From b7cc23c464b0c20500d193f720f224c45af01685 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:30:02 +0100 Subject: [PATCH 001/311] New translations en.json (French) --- website/i18n/fr.json | 258 +++++++++++++++++++++---------------------- 1 file changed, 129 insertions(+), 129 deletions(-) diff --git a/website/i18n/fr.json b/website/i18n/fr.json index e884afd4f04a33..760344733af165 100644 --- a/website/i18n/fr.json +++ b/website/i18n/fr.json @@ -30,7 +30,7 @@ "title": "DataStore" }, "API/directory": { - "title": "Classe Directory" + "title": "Directory Class" }, "API/document": { "title": "Document Class" @@ -57,7 +57,7 @@ "title": "IMAPTransporter" }, "API/overview": { - "title": "Aperçu - API des classes" + "title": "Class API Overview" }, "API/pop3TransporterClass": { "title": "POP3Transporter" @@ -69,7 +69,7 @@ "title": "SMTPTransporter" }, "API/transporter": { - "title": "Classe Transporter" + "title": "Transporter Class" }, "API/webServerClass": { "title": "WebServer" @@ -391,13 +391,13 @@ "title": "Action" }, "FormEditor/propertiesForm": { - "title": "Propriétés des formulaires" + "title": "Form Properties" }, "FormEditor/formSize": { "title": "Form Size" }, "FormEditor/jsonReference": { - "title": "Liste de propriétés JSON" + "title": "JSON property list" }, "FormEditor/markers": { "title": "Markers" @@ -406,52 +406,52 @@ "title": "Menu" }, "FormEditor/print": { - "title": "Imprimer" + "title": "Print" }, "FormEditor/windowSize": { "title": "Window Size" }, "FormObjects/buttonOverview": { - "title": "Bouton" + "title": "Button" }, "FormObjects/buttonGridOverview": { - "title": "Grille de boutons" + "title": "Button Grid" }, "FormObjects/checkboxOverview": { - "title": "Case à cocher" + "title": "Check Box" }, "FormObjects/comboBoxOverview": { "title": "Combo Box" }, "FormObjects/dropdownListOverview": { - "title": "Liste déroulante" + "title": "Drop-down List" }, "FormObjects/formObjectsOverview": { - "title": "A propos des objets formulaires 4D" + "title": "About 4D Form Objects" }, "FormObjects/groupBox": { - "title": "Zone de groupe" + "title": "Group Box" }, "FormObjects/inputOverview": { "title": "Input" }, "FormObjects/listOverview": { - "title": "Liste hiérarchique" + "title": "Hierarchical List" }, "FormObjects/listboxOverview": { "title": "List Box" }, "FormObjects/pictureButtonOverview": { - "title": "Bouton image" + "title": "Picture Button" }, "FormObjects/picturePopupMenuOverview": { - "title": "Pop-up menu image" + "title": "Picture Pop-up Menu" }, "FormObjects/pluginAreaOverview": { - "title": "Zone de plug-in" + "title": "Plug-in Area" }, "FormObjects/progressIndicator": { - "title": "Indicateurs de progression" + "title": "Progress Indicator" }, "FormObjects/propertiesAction": { "title": "Action" @@ -460,46 +460,46 @@ "title": "Animation" }, "FormObjects/propertiesAppearance": { - "title": "Apparence" + "title": "Appearance" }, "FormObjects/propertiesBackgroundAndBorder": { - "title": "Fond et bordure" + "title": "Background and Border" }, "FormObjects/propertiesCoordinatesAndSizing": { - "title": "Coordonnées et dimensions" + "title": "Coordinates & Sizing" }, "FormObjects/propertiesCrop": { - "title": "Découpage" + "title": "Crop" }, "FormObjects/propertiesDataSource": { - "title": "Source de données" + "title": "Data Source" }, "FormObjects/propertiesDisplay": { - "title": "Affichage" + "title": "Display" }, "FormObjects/propertiesEntry": { - "title": "Saisie" + "title": "Entry" }, "FormObjects/propertiesFooters": { - "title": "Pieds" + "title": "Footers" }, "FormObjects/propertiesGridlines": { - "title": "Quadrillage" + "title": "Gridlines" }, "FormObjects/propertiesHeaders": { - "title": "En-têtes" + "title": "Headers" }, "FormObjects/propertiesHelp": { - "title": "Aide" + "title": "Help" }, "FormObjects/propertiesHierarchy": { - "title": "Hiérarchie" + "title": "Hierarchy" }, "FormObjects/propertiesListBox": { "title": "List Box" }, "FormObjects/propertiesObject": { - "title": "Objets" + "title": "Objects" }, "FormObjects/propertiesPicture": { "title": "Image" @@ -508,161 +508,161 @@ "title": "Plug-ins" }, "FormObjects/propertiesPrint": { - "title": "Imprimer" + "title": "Print" }, "FormObjects/propertiesRangeOfValues": { - "title": "Plage de valeurs" + "title": "Range of Values" }, "FormObjects/propertiesReference": { - "title": "Liste de propriétés JSON" + "title": "JSON property list" }, "FormObjects/propertiesResizingOptions": { - "title": "Options de redimensionnement" + "title": "Resizing Options" }, "FormObjects/propertiesScale": { - "title": "Echelle" + "title": "Scale" }, "FormObjects/propertiesSubform": { - "title": "Sous-formulaire" + "title": "Subform" }, "FormObjects/propertiesText": { - "title": "Texte" + "title": "Text" }, "FormObjects/propertiesTextAndPicture": { - "title": "Texte et Image" + "title": "Text and Picture" }, "FormObjects/propertiesWebArea": { - "title": "Zone Web" + "title": "Web Area" }, "FormObjects/radiobuttonOverview": { - "title": "Bouton radio" + "title": "Radio Button" }, "FormObjects/ruler": { - "title": "Règle" + "title": "Ruler" }, "FormObjects/shapesOverview": { - "title": "Formes" + "title": "Shapes" }, "FormObjects/spinner": { "title": "Spinner" }, "FormObjects/splitters": { - "title": "Séparateur" + "title": "Splitter" }, "FormObjects/staticPicture": { - "title": "Image statique" + "title": "Static picture" }, "FormObjects/stepper": { "title": "Stepper" }, "FormObjects/subformOverview": { - "title": "Sous-formulaire" + "title": "Subform" }, "FormObjects/tabControl": { - "title": "Onglets" + "title": "Tab Controls" }, "FormObjects/text": { - "title": "Texte" + "title": "Text" }, "FormObjects/viewProAreaOverview": { - "title": "Zone 4D View Pro" + "title": "4D View Pro area" }, "FormObjects/webAreaOverview": { - "title": "Zone Web" + "title": "Web Area" }, "FormObjects/writeProAreaOverview": { - "title": "Zone 4D Write Pro" + "title": "4D Write Pro area" }, "GettingStarted/installation": { "title": "Installation" }, "Menus/bars": { - "title": "Barres de menus" + "title": "Menu bar features" }, "Menus/creating": { - "title": "Créer des menus et des barres de menus" + "title": "Creating menus and menu bars" }, "Menus/overview": { "title": "Aperçu" }, "Menus/properties": { - "title": "Propriétés des menus" + "title": "Menu item properties" }, "Menus/sdi": { - "title": "Mode SDI sous Windows" + "title": "SDI mode on Windows" }, "MSC/analysis": { - "title": "Page Analyse d'activités", - "sidebar_label": "Page Analyse d'activités" + "title": "Activity analysis Page", + "sidebar_label": "Activity analysis Page" }, "MSC/backup": { - "title": "Page Sauvegarde", - "sidebar_label": "Page Sauvegarde" + "title": "Backup Page", + "sidebar_label": "Backup Page" }, "MSC/compact": { - "title": "Page compactage", - "sidebar_label": "Page compactage" + "title": "Compact Page", + "sidebar_label": "Compact Page" }, "MSC/encrypt": { - "title": "Page chiffrement", - "sidebar_label": "Page chiffrement" + "title": "Encrypt Page", + "sidebar_label": "Encrypt Page" }, "MSC/information": { - "title": "Page informations", - "sidebar_label": "Page informations" + "title": "Information Page", + "sidebar_label": "Information Page" }, "MSC/overview": { "title": "Aperçu", "sidebar_label": "Aperçu" }, "MSC/repair": { - "title": "Page Réparation", - "sidebar_label": "Page Réparation" + "title": "Repair Page", + "sidebar_label": "Repair Page" }, "MSC/restore": { - "title": "Page restitution", - "sidebar_label": "Page restitution" + "title": "Restore Page", + "sidebar_label": "Restore Page" }, "MSC/rollback": { - "title": "Page Retour en arrière", - "sidebar_label": "Page Retour en arrière" + "title": "Rollback Page", + "sidebar_label": "Rollback Page" }, "MSC/verify": { - "title": "Page Vérification", - "sidebar_label": "Page Vérification" + "title": "Verify Page", + "sidebar_label": "Verify Page" }, "ORDA/dsmapping": { "title": "Data Model Objects" }, "ORDA/entities": { - "title": "Travailler avec des données" + "title": "Working with data" }, "ORDA/glossary": { - "title": "Glossaire" + "title": "Glossary" }, "ORDA/ordaClasses": { - "title": "Classes du modèle de données" + "title": "Data Model Classes" }, "ORDA/overview": { - "title": "Que signifie ORDA ?" + "title": "What is ORDA?" }, "ORDA/quickTour": { - "title": "Tour d'horizon d'ORDA" + "title": "A Quick Tour in ORDA" }, "ORDA/datastores": { - "title": "Utiliser un datastore distant" + "title": "Using a remote datastore" }, "Project/architecture": { "title": "Architecture of a project" }, "Project/creating": { - "title": "Créer ou ouvrir un projet" + "title": "Creating or opening a project" }, "Project/developing": { - "title": "Développer un projet" + "title": "Developing a project" }, "Project/documentation": { - "title": "Documenter un projet" + "title": "Documenting a project" }, "Project/overview": { "title": "Aperçu" @@ -743,34 +743,34 @@ "title": "$version" }, "REST/authUsers": { - "title": "Sessions et utilisateurs" + "title": "Users and sessions" }, "REST/classFunctions": { - "title": "Appeler des fonctions de classe ORDA" + "title": "Calling ORDA class functions" }, "REST/configuration": { - "title": "Configuration du serveur" + "title": "Server Configuration" }, "REST/genInfo": { - "title": "Obtenir des informations du serveur" + "title": "Getting Server Information" }, "REST/gettingStarted": { - "title": "Prise en main" + "title": "Getting Started" }, "REST/manData": { - "title": "Manipulation des données" + "title": "Manipulating Data" }, "REST/REST_requests": { - "title": "A propos des requêtes REST" + "title": "About REST Requests" }, "Users/editing": { - "title": "Gestion des groupes et utilisateurs 4D" + "title": "Managing 4D users and groups" }, "Users/overview": { "title": "Aperçu" }, "WebServer/webServerObject": { - "title": "Objet Serveur Web" + "title": "Web Server object" } }, "links": { @@ -779,54 +779,54 @@ "v18": "v18" }, "categories": { - "Getting Started": "Prise en main", - "Project Management": "Gestion de projet", - "4D Language Concepts": "Concepts du langage 4D", + "Getting Started": "Getting Started", + "Project Management": "Project Management", + "4D Language Concepts": "4D Language Concepts", "ORDA": "ORDA", - "Class API Reference": "Classes API", - "Access Rights": "Droits d'accès", + "Class API Reference": "Class API Reference", + "Access Rights": "Access Rights", "Administration": "Administration", - "MSC": "CSM", - "Backup and Restore": "Sauvegarde et restitution", - "Web Server": "Serveur Web", - "REST Server": "Serveur REST", - "Forms": "Formulaires", - "Form Properties": "Propriétés des formulaires", - "Form Objects": "Objets formulaires", - "Form Object Properties": "Propriétés des objets formulaire", - "Form Events": "Evénements formulaire", + "MSC": "MSC", + "Backup and Restore": "Backup and Restore", + "Web Server": "Web Server", + "REST Server": "REST Server", + "Forms": "Forms", + "Form Properties": "Form Properties", + "Form Objects": "Form Objects", + "Form Object Properties": "Form Object Properties", + "Form Events": "Form Events", "Menus": "Menus" } }, "pages-strings": { "Installation|in index page Getting started": "Installation", - "Starting 4D|in index page Getting started": "Démarrer 4D", - "Language Concepts|in index page Getting started": "Concepts du langage", - "Project Management|in index page Getting started": "Gestion de projet", + "Starting 4D|in index page Getting started": "Starting 4D", + "Language Concepts|in index page Getting started": "Language Concepts", + "Project Management|in index page Getting started": "Project Management", "Object Relational Data Access (ORDA)|in index page Getting started": "Object Relational Data Access (ORDA)", - "Class API Reference|no description given": "Classes API", - "Forms|no description given": "Formulaires", - "Form Properties|no description given": "Propriétés des formulaires", - "Form Events|no description given": "Evénements formulaire", - "Form Objects|no description given": "Objets formulaires", - "Form Object Properties|no description given": "Propriétés des objets formulaire", + "Class API Reference|no description given": "Class API Reference", + "Forms|no description given": "Forms", + "Form Properties|no description given": "Form Properties", + "Form Events|no description given": "Form Events", + "Form Objects|no description given": "Form Objects", + "Form Object Properties|no description given": "Form Object Properties", "Menus|no description given": "Menus", - "Web Server|no description given": "Serveur Web", - "REST Server|no description given": "Serveur REST", - "Maintenance and Security Center|no description given": "Centre de Sécurité et de Maintenance", - "Backup and Restore|no description given": "Sauvegarde et restitution", - "License Management|no description given": "Gestion des licences", - "Build Application|no description given": "Générateur d'application", - "Language Reference (4D Doc Center)|no description given": "Langage (4D Doc Center)", - "Access Rights|no description given": "Droits d'accès", - "Getting started|no description given": "Prise en main", - "Core Development|no description given": "Développement", + "Web Server|no description given": "Web Server", + "REST Server|no description given": "REST Server", + "Maintenance and Security Center|no description given": "Maintenance and Security Center", + "Backup and Restore|no description given": "Backup and Restore", + "License Management|no description given": "License Management", + "Build Application|no description given": "Build Application", + "Language Reference (4D Doc Center)|no description given": "Language Reference (4D Doc Center)", + "Access Rights|no description given": "Access Rights", + "Getting started|no description given": "Getting started", + "Core Development|no description given": "Core Development", "Administration|no description given": "Administration", - "Web applications|no description given": "Applications Web", - "Mobile applications|no description given": "Applications Mobile", - "Desktop applications|no description given": "Applications Desktop", - "Help Translate|recruit community translators for your project": "Aidez-nous à traduire", - "Edit this Doc|recruitment message asking to edit the doc source": "Modifier", - "Translate this Doc|recruitment message asking to translate the docs": "Traduire" + "Web applications|no description given": "Web applications", + "Mobile applications|no description given": "Mobile applications", + "Desktop applications|no description given": "Desktop applications", + "Help Translate|recruit community translators for your project": "Help Translate", + "Edit this Doc|recruitment message asking to edit the doc source": "Edit", + "Translate this Doc|recruitment message asking to translate the docs": "Translate" } } From d166c7c26e0a5aa58050efebd1981e55238f6b68 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:30:33 +0100 Subject: [PATCH 002/311] New translations mscrepair2.png (French) --- docs/assets/fr/MSC/mscrepair2.png | Bin 48768 -> 32817 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/mscrepair2.png b/docs/assets/fr/MSC/mscrepair2.png index c5daac47528ce2ed517503b152b628c95289715d..40cf9df248a6792a0ed3b2a812246ec346e57d04 100644 GIT binary patch literal 32817 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

3Yhrri`fAa_O$>#S@!KT6w15d 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 Date: Wed, 16 Dec 2020 16:30:47 +0100 Subject: [PATCH 003/311] New translations splash1.png (French) --- docs/assets/fr/Menus/splash1.png | Bin 52566 -> 57775 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/Menus/splash1.png b/docs/assets/fr/Menus/splash1.png index 2fda97392223978fcac17fb1213bc512da913810..e1965b105026122eff261dcd76b3fa8079ecad2e 100644 GIT binary patch literal 57775 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 j)TmLTMvWRZsz(0fy literal 52566 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 Hu0mjfa+Wx( From 67f334217fec08e4aec0c773be4d9dd8385f5a79 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:30:50 +0100 Subject: [PATCH 004/311] New translations splash3.png (French) --- docs/assets/fr/Menus/splash3.png | Bin 4624 -> 5032 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/Menus/splash3.png b/docs/assets/fr/Menus/splash3.png index aa786a67df6c8cb1d8bc800a56ad086fdaab5933..b5ed4e1d5786a5266d6494b97f0245e3fa6f3669 100644 GIT binary patch literal 5032 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 literal 4624 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 Date: Wed, 16 Dec 2020 16:31:42 +0100 Subject: [PATCH 005/311] New translations msc_Backup.png (French) --- docs/assets/fr/MSC/msc_Backup.png | Bin 30679 -> 23198 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/msc_Backup.png b/docs/assets/fr/MSC/msc_Backup.png index ebb0452c9193fcc3f83a55e36b8dde574e91a9a7..04ac3a99ed1879f93ca47ea6e499ccf2e01e601d 100644 GIT binary patch literal 23198 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 literal 30679 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 From 148960052474c42d1cda820a3d2349715d27f590 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:31:45 +0100 Subject: [PATCH 006/311] New translations onBeforeKeystroke.md (French) --- .../fr/Events/onBeforeKeystroke.md | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/website/translated_docs/fr/Events/onBeforeKeystroke.md b/website/translated_docs/fr/Events/onBeforeKeystroke.md index 76c7b421b3baf2..da066197bdf710 100644 --- a/website/translated_docs/fr/Events/onBeforeKeystroke.md +++ b/website/translated_docs/fr/Events/onBeforeKeystroke.md @@ -3,13 +3,13 @@ id: onBeforeKeystroke title: Sue avant frappe clavier --- -| Code | Peut être appelé par | Définition | -| ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | -| 17 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Combo Box](FormObjects/comboBox_overview.md) - Form - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) | Un caractère est sur le point d'être saisi dans l'objet qui a le focus. `Get edited text` returns the object's text **without** this character. | +| Code | Can be called by | Definition | +| ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| 17 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Combo Box](FormObjects/comboBox_overview.md) - Form - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) | A character is about to be entered in the object that has the focus. `Get edited text` returns the object's text **without** this character. | -
Historique +
History -| Version | Modifications | +| Version | Changes | | ------- | ---------------------------------------------------------------------------------------------------------------- | | v18 R5 | - Support in non-enterable list boxes

- The event is now triggered after IME validation |

@@ -17,29 +17,29 @@ title: Sue avant frappe clavier ## Description -Après avoir sélectionné les événements `On Before Keystroke` et [`On After Keystroke event`](onAfterKeystroke.md) pour un objet, vous pouvez détecter et gérer les frappes au sein de l'objet, en utilisant la commande `Form event` qui retournera `On Before Keystroke` puis [`On After Keystroke`](onAfterKeystroke.md) (pour plus d'informations, veuillez vous reporter à la description de la commande `Get edited text`). Dans l'événement `On Before Keystroke`, la commande `FILTER KEYSTROKE` peut être utilisée pour filtrer les caractères typés. +After the `On Before Keystroke` and [`On After Keystroke event`](onAfterKeystroke.md) events are selected for an object, you can detect and handle the keystrokes within the object, using the `Form event code` command that will return `On Before Keystroke` and then [`On After Keystroke event`](onAfterKeystroke.md) (for more information, please refer to the description of the `Get edited text` command). Within the `On Before Keystroke` event, the `FILTER KEYSTROKE` command can be used to filter typed chars. -> Ces événements sont également activés par des commandes de langage qui simulent une action utilisateur telle que `POST KEY`. +> These events are also activated by language commands that simulate a user action like `POST KEY`. -L'événement `On Before Keystroke` n'est pas généré : +The `On Before Keystroke` event is not generated: -- dans une méthode [colonnes de list box](FormObjects/listbox_overview.md#list-box-columns), sauf lorsqu'une cellule est en cours d'édition (cependant elle est générée dans tous les cas dans la méthode de [list box](FormObjects/listbox_overview.md)), -- lorsque les modifications utilisateur ne sont pas effectuées à l'aide du clavier (coller, glisser-déposer, case à cocher, liste déroulante, combo box). Pour traiter ces événements, vous devez utiliser [`On After Edit`](onAfterEdit.md). +- in a [list box column](FormObjects/listbox_overview.md#list-box-columns) method except when a cell is being edited (however it is generated in any cases in the [list box](FormObjects/listbox_overview.md) method), +- when user modifications are not carried out using the keyboard (paste, drag-and-drop, checkbox, drop down list, combo box). To process these events, you must use [`On After Edit`](onAfterEdit.md). -### Objets non saisissables +### Non-enterable objects -L'événement `On Before Keystroke` peut être généré dans des objets non saisissables, par exemple dans une list box même si les cellules de la list box ne sont pas saisissables ou si les lignes ne peuvent pas être sélectionnées. Cela vous permet de créer des interfaces dans lesquelles l'utilisateur peut faire défiler dynamiquement jusqu'à une ligne spécifique dans une list box en saisissant les premières lettres d'une valeur. Dans le cas où les cellules de la list box sont saisissables, vous pouvez utiliser la commande `Is editing text` pour savoir si l'utilisateur saisit réellement du texte dans une cellule ou s'il utilise la fonction de saisie prédictive, puis exécutez le code approprié. +The `On Before Keystroke` event can be generated in non-enterable objects, e.g. in a list box even if the list box cells are not enterable, or rows are not selectable. This allows you to build interfaces where the user can scroll dynamically to a specific row in a list box by entering the first letters of a value. In case where the list box cells are enterable, you can use the `Is editing text` command to know if the user is actually entering text in a cell or is using the type-ahead feature and then, execute appropriate code. -### Séquence de frappe +### Keystroke sequence -Lorsqu'une entrée nécessite une séquence de frappes clavier, les événements ``On Before Keystroke[` et [`On After Keystroke](onAfterKeystroke.md)] sont générés uniquement lorsque la saisie est entièrement validée par l'utilisateur. La commande `Keystroke` retourne le caractère validé. Ce cas se produit principalement : +When an entry requires a sequence of keystrokes, the `On Before Keystroke` and [`On After Keystroke`](onAfterKeystroke.md) events are generated only when the entry is fully validaded by the user. The `Keystroke` command returns the validated character. This case mainly occurs: -- lors de l'utilisation de touches "mortes" telles que ^ ou ~: les événements ne sont générés que lorsque le caractère étendu est éventuellement saisi (par exemple "ê" ou ñ), -- lorsqu'un IME (Input method editor) affiche une boîte de dialogue intermédiaire où l'utilisateur peut saisir une combinaison de caractères : les événements sont générés uniquement lorsque la boîte de dialogue IME est validée. +- when using "dead" keys such as ^ or ~: events are generated only when the extended character is eventuelly entered (e.g. "ê" or ñ), +- when an IME (Input method editor) displays an intermediary dialog box where the user can enter a combination of characters: events are generated only when the IME dialog is validated. -### Voir également +### See also [On After Keystroke](onAfterKeystroke.md). \ No newline at end of file From 64f93d99c4610a6c4918d2aeb19ff35d64425270 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:31:47 +0100 Subject: [PATCH 007/311] New translations shared.md (French) --- website/translated_docs/fr/Concepts/shared.md | 130 +++++++++--------- 1 file changed, 65 insertions(+), 65 deletions(-) diff --git a/website/translated_docs/fr/Concepts/shared.md b/website/translated_docs/fr/Concepts/shared.md index 0a07505b522a19..008190fa8848c3 100644 --- a/website/translated_docs/fr/Concepts/shared.md +++ b/website/translated_docs/fr/Concepts/shared.md @@ -3,100 +3,100 @@ id: shared title: Objets et collections partagés --- -**Les objets partagés** et **les collections partagées** sont des [objets](Concepts/dt_object.md) et des [collections](Concepts/dt_collection.md) spécifiques dont le contenu est partagé entre les process. Comparés aux [Variables interprocess](Concepts/variables.md#interprocess-variables), les objets partagés et les collections partagées ont l'avantage d'être compatibles avec les **Process 4D préemptifs** : il peuvent être passés en paramètres (par référence) aux commandes telles que `New process` ou `CALL WORKER`. +**Shared objects** and **shared collections** are specific [objects](Concepts/dt_object.md) and [collections](Concepts/dt_collection.md) whose contents are shared between processes. In contrast to [interprocess variables](Concepts/variables.md#interprocess-variables), shared objects and shared collections have the advantage of being compatible with **preemptive 4D processes**: they can be passed by reference as parameters to commands such as `New process` or `CALL WORKER`. -Les objets partagés et les collections partagées peuvent être stockés dans des variables déclarées à l'aide des commandes standard `C_OBJECT` et `C_COLLECTION`, mais doivent être instanciées à l'aide de commandes spécifiques : +Shared objects and shared collections can be stored in variables declared with standard `C_OBJECT` and `C_COLLECTION` commands, but must be instantiated using specific commands: -- pour créer un objet partagé, utilisez la commande `New shared object`, -- pour créer une collection partagée, utilisez la commande `New shared collection`. +- to create a shared object, use the `New shared object` command, +- to create a shared collection, use the `New shared collection` command. -**Note :** Des objets partagés et des collections partagées peuvent être définis comme propriétés d'objets/éléments de collections standard (non partagés). +**Note:** Shared objects and collections can be set as properties of standard (not shared) objects or collections. -Toute modification d'un objet/d'une collection partagé(e) doit s'effectuer à l'intérieur d'une structure **Utiliser...Fin utiliser**. La lecture d'une valeur d'objet/collection ne nécessite pas de structure **Utiliser...Fin utiliser**. +In order to modify a shared object/collection, the **Use...End use** structure must be called. Reading a shared object/collection value does not require **Use...End use**. -Un catalogue unique et global, retourné par la commande `Storage`, est disponible à tout moment et depuis tout process de l'application et de ses composants. +A unique, global catalog returned by the `Storage` command is always available throughout the application and its components, and can be used to store all shared objects and collections. -## Utilisation des objets et collections partagés +## Using shared objects or collections -Une fois instanciés à l'aide des commandes `Creer objet partage` ou `Creer collection partagee`, les objets partagés et les collections partagées peuvent être modifiés et lus depuis n'importe quel process. +Once instantiated with the `New shared object` or `New shared collection` commands, shared object/collection properties and elements can be modified or read from any process of the application. ### Modification -Les modifications suivantes peuvent être effectuées sur les objets partagés et les collections partagées : +Modifications can be applied to shared objects and shared collections: -- ajout ou suppression de propriétés d'objets, -- ajout ou modification de valeurs (prises en charge par les objets/collections partagé(e) s), y compris d'autres objets et collections partagé(s) (ce qui crée un groupe partagé, cf. ci-dessous). +- adding or removing object properties, +- adding or editing values (provided they are supported in shared objects), including other shared objects or collections (which creates a shared group, see below). -Toute instruction de modification d'objet ou de collection partagé(e) doit être encadrée par les mots-clés `Use...End use`, sinon une erreur est générée. +However, all modification instructions in a shared object or collection must be surrounded by the `Use...End use` keywords, otherwise an error is generated. ```4d $s_obj:=New shared object("prop1";"alpha") Use($s_obj) $s_obj.prop1:="omega" -End Use + End Use ``` -Un objet/une collection partagé(e) ne peut être modifié(e) que par un seul process à la fois. `Use` locks the shared object/collection from other threads, while `End use` unlocks the shared object/collection (if the locking counter is at 0, see below). . Toute tentative de modification d'un objet/d'une collection partagé(e) sans au moins un appel à `Use...End use` génère une erreur. Lorsqu'un process appelle `Use...End use` avec un objet/une collection partagé(e) qui est déjà "utilisé(e)" par un autre process, il est simplement mis en attente jusqu'à ce qu'il soit déverrouillé par l'appel à `End use` (aucune erreur n'est générée). En conséquence, les instructions situées à l'intérieur des structures `Use...End use` doivent toujours s'exécuter rapidement et déverrouiller les éléments dès que possible. Il est donc fortement déconseillé de modifier un objet ou une collection partagé(e) directement depuis l'interface, par exemple depuis une boîte de dialogue. +A shared object/collection can only be modified by one process at a time. `Use` locks the shared object/collection from other threads, while `End use` unlocks the shared object/collection (if the locking counter is at 0, see below). . Trying to modify a shared object/collection without at least one `Use...End use` generates an error. When a process calls `Use...End use` on a shared object/collection that is already in use by another process, it is simply put on hold until the `End use` unlocks it (no error is generated). Consequently, instructions within `Use...End use` structures should execute quickly and unlock the elements as soon as possible. Thus, it is strongly advised to avoid modifying a shared object or collection directly from the interface, e.g. through a dialog box. -L'assignation d'objets/collections partagé(e) s à des propriétés ou éléments d'autres objets/collections partagé(e) s est autorisée et entraîne la création de **groupes partagés**. Un groupe partagé est automatiquement créé lorsqu'un objet ou une collection partagé(e) est assigné(e) en tant que valeur de propriété ou élément à un autre objet ou collection partagé(e). Les groupes partagés permettent d'imbriquer des objets et collections partagé(e)s mais nécessitent d'observer des règles supplémentaires : +Assigning shared objects/collections to properties or elements of other shared objects/collections is allowed and creates **shared groups**. A shared group is automatically created when a shared object/collection is set as property value or element of another shared object/collection. Shared groups allow nesting shared objects and collections but enforce additional rules: - Calling `Use` on a shared object/collection belonging to a group locks properties/elements of all shared objects/collections of the group and increments its locking counter. Calling `End use` decrements the locking counter of the group and when the counter is at 0, all the linked shared objects/collections are unlocked. -- Un objet ou une collection partagé(e) peut appartenir à un seul groupe partagé. Une erreur est générée si vous tentez d'assigner un objet ou une collection appartenant déjà à un groupe à un groupe différent. -- Les objets/collections groupé(e) s ne peuvent plus être dégroupé(e) s. Une fois inclus dans un groupe partagé, un objet ou une collection partagé(e) est lié(e) définitivement au groupe pendant toute la durée de la session. Même si toutes les références de l'objet/la collection sont supprimé(e) s des objets/collections parent(e) s, ils resteront liés. +- A shared object/collection can only belong to one shared group. An error is returned if you try to set an already grouped shared object/collection to a different group. +- Grouped shared objects/collections cannot be ungrouped. Once included in a shared group, a shared object/collection is linked permanently to that group during the whole session. Even if all references of an object/collection are removed from the parent object/collection, they will remain linked. -Reportez-vous à l'exemple 2 pour l'illustration des règles des groupes partagés. +Please refer to example 2 for an illustration of shared group rules. -**Note :** Les groupes partagés sont gérés via une propriété interne nommée *locking identifier*. Si vous avez besoin de plus d'informations sur les mécanismes utilisés, reportez-vous au Guide du développeur de 4D. +**Note:** Shared groups are managed through an internal property named *locking identifier*. For detailed information on this value, please refer to the 4D Developer's guide. -### Lecture +### Read -La lecture de propriétés ou d'éléments d'un objet ou d'une collection partagé(e) est possible sans appel de la structure `Use...End use`, même si l'objet ou la collection partagé(e) est "utilisé(e)" par un autre process. +Reading properties or elements of a shared object/collection is allowed without having to call the `Use...End use` structure, even if the shared object/collection is in use by another process. -Cependant, lorsque plusieurs valeurs sont interdépendantes et doivent être lues simultanément, il est nécessaire d'encadrer l'accès en lecture par une structure `Use...End use` pour des raisons de cohérence. +However, it is necessary to read a shared object/collection within `Use...End use` when several values are linked together and must be read at once, for consistency reasons. ### Duplication -Appeler `OB Copier` avec un objet partagé (ou avec un objet dont des propriétés sont des objets partagés) est possible, mais dans ce cas un objet standard (non partagé) est retourné. +Calling `OB Copy` with a shared object (or with an object containing shared object(s) as properties) is possible, but will return a standard (not shared) object including its contained objects (if any). ### Storage -**Storage** est un objet partagé unique, disponible automatiquement pour chaque application et machine. Cet objet partagé est retourné par la commande `Storage`. Il est destiné à référencer les objets ou collections partagé(e)s défini(e)s durant la session que vous souhaitez rendre accessibles à tous les process, préemptifs ou standard. +**Storage** is a unique shared object, automatically available on each application and machine. This shared object is returned by the `Storage` command. You can use this object to reference all shared objects/collections defined during the session that you want to be available from any preemptive or standard processes. -A noter que, à la différence de objets partagés standard, l'objet `Storage` ne crée par de groupe partagé lorsque des objets/collection lui sont assigné(e) s en tant que propriétés. Cette exception permet à l'objet **Storage** d'être utilisé sans verrouiller les objets/collections partagé(e) s connecté(e) s. +Note that, unlike standard shared objects, the `storage` object does not create a shared group when shared objects/collections are added as its properties. This exception allows the **Storage** object to be used without locking all connected shared objects or collections. -Pour plus d'informations, reportez-vous à la description de la commande `Storage`. +For more information, refer to the `Storage` command description. -## Utiliser...Fin utiliser +## Use...End use -La syntaxe de la structure `Use...End use` est la suivante : +The formal syntax of the `Use...End use` structure is: ```4d Use(Shared_object_or_Shared_collection) - instruction(s) + statement(s) End use ``` -La structure `Use...End use` définit une séquence d'instructions qui exécutera des tâches sur le paramètre *Objet_partagé_ou_Collection_partagée* sous la protection d'un sémaphore interne. *Objet_partagé_ou_Collection_partagée* peut être tout objet partagé ou collection partagée valide. +The `Use...End use` structure defines a sequence of statements that will execute tasks on the *Shared_object_or_Shared_collection* parameter under the protection of an internal semaphore. *Shared_object_or_Shared_collection* can be any valid shared object or shared collection. -Les objets partagés et les collections partagées permettent d'établir des communications entre les process, en particulier les **Process 4D préemptifs**. Ils peuvent être passés par référence en paramètre d'un process à un autre. Pour plus de détails sur les objets partagés et les collections partagées, reportez-vous à la page **Objets et collections partagés**. Encadrer les modifications sur les objets partagés et les collections partagées à l'aide des mots-clés `Use...End use` est obligatoire pour empêcher les accès concurrents entre les process. +Shared objects and shared collections are designed to allow communication between processes, in particular, **preemptive 4D processes**. They can be passed by reference as parameters from a process to another one. For detailed information on shared objects or shared collections, refer to the **Shared objects and shared collections** page. Surrounding modifications on shared objects or shared collections by the `Use...End use` keywords is mandatory to prevent concurrent access between processes. -- Une fois que la ligne **Use/Utiliser** est exécutée avec succès, toutes les propriétés/éléments de _Objet_partagé_ou_Collection_partagée_ sont verrouillé(e) s en écriture pour tous les autres process jusqu'à ce que la ligne `End use/Fin` utiliser correspondante soit éxécutée. -- La séquence _d'instructions_ peut alors effectuer toute modification dans les propriétés/éléments de Objet_partagé_ou_Collection_partagée sans risque d'accès concurrent. -- Si un autre objet ou collection partagé(e) est ajouté(e) en tant que propriété du paramètre _Objet_partagé_ou_Collection_partagée_, il ou elle devient connecté(e) et appartiennent au même groupe partagé (cf.** Utilisation des objets et collections partagés**). -- Si un autre process tente d'accéder à une propriété de _Objet_partagé_ou_Collection_partagée_ ou une propriété connectée alors qu'une séquence **Utiliser...Fin** utiliser est en cours d'exécution sur le même Objet_partagé_ou_Collection_partagée, il est automatiquement placé en attente et attendra jusqu'à ce que la séquence courante soit terminée. +- Once the **Use** line is successfully executed, all _Shared_object_or_Shared_collection_ properties/elements are locked for all other process in write access until the corresponding `End use` line is executed. +- The _statement(s)_ sequence can execute any modification on the Shared_object_or_Shared_collection properties/elements without risk of concurrent access. +- If another shared object or collection is added as a property of the _Shared_object_or_Shared_collection_ parameter, they become connected within the same shared group (see **Using shared objects or collections**). +- If another process tries to access one of the _Shared_object_or_Shared_collection_ properties or connected properties while a **Use...End use** sequence is being executed, it is automatically put on hold and waits until the current sequence is terminated. - The **End use** line unlocks the _Shared_object_or_Shared_collection_ properties and all objects of the same group. -- Plusieurs structures **Utiliser...Fin** utiliser peuvent être imbriquées dans le code 4D. In the case of a group, each **Use** increments the locking counter of the group and each **End use** decrements it; all properties/elements will be released only when the last **End use** call sets the locking counter to 0. +- Several **Use...End use** structures can be nested in the 4D code. In the case of a group, each **Use** increments the locking counter of the group and each **End use** decrements it; all properties/elements will be released only when the last **End use** call sets the locking counter to 0. -**Note :** Si une fonction membre d'une collection modifie une collection partagée, un **Utiliser** interne est automatiquement mis en place pour cette collection partagée durant l'exécution de la fonction. +**Note:** If a collection method modifies a shared collection, an internal **Use** is automatically called for this shared collection while the function is executed. -## Exemple 1 +## Example 1 -Vous souhaitez lancer plusieurs process qui vont effectuer des tâches d'inventaire parmi différents produits et mettre à jour le même objet partagé. Le process principal instancie un objet partagé vide et ensuite lance les autres process, passant en paramètre l'objet partagé et les produits à comptabiliser : +You want to launch several processes that perform an inventory task on different products and update the same shared object. The main process instantiates an empty shared object and then, launches the other processes, passing the shared object and the products to count as parameters: ```4d ARRAY TEXT($_items;0) - ... //remplir le tableau avec les éléments à compter + ... //fill the array with items to count $nbItems:=Size of array($_items) C_OBJECT($inventory) $inventory:=New shared object @@ -104,59 +104,59 @@ Vous souhaitez lancer plusieurs process qui vont effectuer des tâches d'inventa $inventory.nbItems:=$nbItems End use - //Créer un process + //Create processes For($i;1;$nbItems) $ps:=New process("HowMany";0;"HowMany_"+$_items{$i};$_items{$i};$inventory) - // objet $inventory envoyé par référence + //$inventory object sent by reference End for ``` -Dans la méthode "HowMany", l'inventaire est effectué et l'objet partagé $inventory est mis à jour dès que possible : +In the "HowMany" method, inventory is done and the $inventory shared object is updated as soon as possible: ```4d C_TEXT($1) C_TEXT($what) C_OBJECT($2) C_OBJECT($inventory) - $what:=$1 //pour une meilleure lisibilité + $what:=$1 //for better readability $inventory:=$2 - - $count:=CountMethod($what) //méthode de comptage des produits - Use($inventory) //Utiliser l'objet partagé - $inventory[$what]:=$count //stockage des résultats pour cet article -End use + + $count:=CountMethod($what) //method to count products + Use($inventory) //use shared object + $inventory[$what]:=$count //save the results for this item + End use ``` -## Exemple 2 +## Example 2 -Les exemples suivants illustrent les règles spécifiques à observer lorsque vous utilisez des groupes partagés : +The following examples highlight specific rules when handling shared groups: ```4d $ob1:=New shared object $ob2:=New shared object Use($ob1) - $ob1.a:=$ob2 //un premier groupe est créé - End use + $ob1.a:=$ob2 //group 1 is created + End use $ob3:=New shared object $ob4:=New shared object Use($ob3) - $ob3.a:=$ob4 //un 2e groupe est créé + $ob3.a:=$ob4 //group 2 is created End use - Use($ob1) //Utilisation d'un objet du groupe 1 - $ob1.b:=$ob4 //ERREUR - //$ob4 appartient déjà à un autre groupe - //son assignation n'est pas permise -End use + Use($ob1) //use an object from group 1 + $ob1.b:=$ob4 //ERROR + //$ob4 already belongs to another group + //assignment is not allowed + End use Use($ob3) - $ob3.a:=Null //on enlève la référence de $ob4 du groupe 2 + $ob3.a:=Null //remove any reference to $ob4 from group 2 End use - Use($ob1) //Utilisation d'un objet du groupe 1 - $ob1.b:=$ob4 //ERREUR - //$ob4 appartient toujours au groupe 2 - //son assignation n'est pas permise + Use($ob1) //use an object from group 1 + $ob1.b:=$ob4 //ERROR + //$ob4 still belongs to group 2 + //assignment is not allowed End use ``` From 5fd079e2e0053ce92863dfd11f659d6a827e45b6 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:31:49 +0100 Subject: [PATCH 008/311] New translations variables.md (French) --- .../translated_docs/fr/Concepts/variables.md | 164 +++++++++--------- 1 file changed, 83 insertions(+), 81 deletions(-) diff --git a/website/translated_docs/fr/Concepts/variables.md b/website/translated_docs/fr/Concepts/variables.md index 10a71e450c145c..5dcb524b60a8f8 100644 --- a/website/translated_docs/fr/Concepts/variables.md +++ b/website/translated_docs/fr/Concepts/variables.md @@ -3,25 +3,25 @@ id: variables title: Variables --- -Fondamentalement, dans 4D, les données peuvent être stockées de deux manières. **Les champs** stockent les données sur disque, de manière permanente ; **les variables** stockent les données en mémoire, de manière temporaire. +Data in 4D is stored in two fundamentally different ways. **Fields** store data permanently on disk; **variables** store data temporarily in memory. -Lorsque vous définissez votre base, vous indiquez à 4D les noms et les types de champs que vous voulez utiliser. C’est pratiquement la même chose pour les variables — vous leur donnez un nom et un type (cf. [Type de données](Concepts/data-types.md)). +When you set up your 4D database, you specify the names and types of fields that you want to use. Variables are much the same—you also give them names and different types (see [Data types](Concepts/data-types.md)). -Une fois créée, vous pouvez utiliser une variable partout dans votre application. For example, you might need to store a text variable in a field of same type: +Once created, you can use a variable wherever you need it in your application. For example, you might need to store a text variable in a field of same type: ```4d - [MaTable]MonChamp:=MonTexte + [MyTable]MyField:=MyText ``` -Les variables sont des objets du langage; vous pouvez créer et utiliser des variables qui n’apparaîtront jamais à l'écran. Dans vos formulaires, vous pouvez afficher des variables à l’écran (à l'exception des pointeurs et des BLOB), les utiliser pour saisir des données, et les imprimer dans des états. Dans ces cas, elles se comportent exactement comme des champs, et les mêmes contrôles intégrés sont disponibles lorsque vous les créez . Les variables peuvent également servir à contrôler des boutons, des list box, des zones de défilement, des boutons image, etc., ou à afficher les résultats de calculs ne devant pas être sauvegardés. +Variables are language objects; you can create and use variables that will never appear on the screen. In your forms, you can display variables (except Pointer and BLOB) on the screen, enter data into them, and print them in reports. In this way, enterable and non-enterable area variables act just like fields, and the same built-in controls are available when you create them. Form variables can also control buttons, list boxes, scrollable areas, picture buttons, and so on, or display results of calculations that do not need to be saved. -## Déclaration des variables +## Declaring Variables -Vous créez des variables en les déclarant. Le langage 4D propose deux manières de déclarer des variables : +You create variables by declaring them. The 4D language offers two ways to declare variables: -- à l'aide du mot-clé `var` (recommandé particulièrement si votre code utilise des objets et des classes), -- à l'aide de l'une des commandes du langage 4D du thème "Compilateur" ou "Tableaux" (obsolète, langage classique uniquement). +- using the `var` keyword (recommended, specially if your code uses objects and classes), +- using one of the "Compiler" or "Arrays" theme 4D language commands (deprecated, classic language only). **Note:** Although it is usually not recommended, you can create basic variables simply by using them; you do not necessarily need to formally define them. For example, to declare a variable that will hold the current date plus 30 days, you can write: @@ -40,7 +40,7 @@ To declare a variable of any type with the `var` keyword, use the following synt `var {; ;...}{ : }` -Par exemple: +For example: ```4d var $myText : Text //a text variable @@ -59,26 +59,26 @@ This syntax only supports [local and process variables](#local-process-and-inter If `varType` is omitted, a variable of the **variant** type is created. -Le tableau suivant répertorie toutes les valeurs `varType` prises en charge : - -| varType | Contenu | -| -------------- | ---------------------------------------- | -| Texte | Valeur texte | -| Date | Valeur date | -| Heure | Valeur Heure | -| Booléen | Valeur booléen | -| Entier long | Valeur entier long | -| Réel | Valeur réel | -| Pointeur | Valeur pointeur | -| Image | Valeur image | -| Blob | Valeur BLOB | -| Collection | Valeur collection | -| Variant | Valeur variant | -| Objet | Objet avec classe par défaut (4D.object) | -| 4D.*className* | Objet du nom de la classe 4D | -| cs.*className* | Objet du nom de la classe utilisateur | - -#### Exemples +The following table lists all supported `varType` values: + +| varType | Contents | +| -------------- | ------------------------------------- | +| Text | Text value | +| Date | Date value | +| Heure | Time value | +| Booléen | Boolean value | +| Integer | Long integer value | +| Real | Real value | +| Pointeur | Pointer value | +| Image | Picture value | +| Blob | BLOB value | +| Collection | Collection value | +| Variant | Variant value | +| Objet | Object with default class (4D.Object) | +| 4D.*className* | Object of the 4D class name | +| cs.*className* | Object of the user class name | + +#### Examples - To declare local and process basic variables: @@ -87,9 +87,9 @@ var $myText; myText; $vt : Text var myVar //variant var $o : Object -//équivalent à : +//equivalent to: var $o : 4D.Object -//également équivalent à C_OBJECT($o) +//also equivalent to C_OBJECT($o) ``` - To declare object variables of 4D class: @@ -114,107 +114,109 @@ var $entity : cs.EmployeeEntity Directives from the "Compiler" theme commands allow you to declare variables of basic types. -Par exemple, si vous souhaitez définir une variable de type texte, il suffira d'écrire : +For example, if you want to define a text variable, you write: ```4d - C_TEXT(monTexte) + C_TEXT(myText) ``` -Voici quelques déclarations de variables simples : +The following are some basic variable declarations: ```4d - C_BLOB(vxMyBlob) // La variable process vxMyBlob est déclarée comme variable de type BLOB - C_DATE($vdCurDate) // La variable locale $vdCurDate est déclarée comme variable de type Date - C_C_LONGINT(vg1;vg2;vg3) // Les 3 variables process vg1, vg2 et vg3 sont déclarées comme variables de type Entier long - C_OBJECT($vObj) // La variable locale $vObj est déclarée comme variable de type Objet - C_COLLECTION($vCol) // La variable locale $vCol est déclarée comme variable de type Collection -ARRAY LONGINT(alAnArray;10) //La variable process alAnArray est déclarée comme un tableau entier long de 10 éléments + C_BLOB(vxMyBlob) // The process variable vxMyBlob is declared as a variable of type BLOB + C_DATE($vdCurDate) // The local variable $vdCurDate is declared as a variable of type Date + C_LONGINT(vg1;vg2;vg3) // The 3 process variables vg1, vg2 and vg3 are declared as variables of type longint + C_OBJECT($vObj) // The local variable $vObj is declared as a variable of type Object + C_COLLECTION($vCol) // The local variable $vCol is declared as a variable of type Collection + ARRAY LONGINT(alAnArray;10) //The process alAnArray variable is declared as a Longint array of 10 elements ``` -**Note :** Les tableaux sont un type particulier de variables. Un tableau est une série ordonnée de variables de même type. Pour plus d'informations, veuillez consulter le thème [Tableaux](Concepts/arrays.md). +**Note:** Arrays are a particular type of variables. An array is an ordered series of variables of the same type. For more information, please refer to [Arrays](Concepts/arrays.md). -## Assigner des valeurs +## Assigning Data -Vous pouvez donner des valeurs aux variables ou aux tableaux et/ou récupérer leur valeur. Donner une valeur à une variable s’appelle **assigner une valeur (ou affecter une valeur)** et s’effectue à l’aide de l’opérateur d’assignation (:=). L’opérateur d’assignation est également utilisé pour assigner des valeurs aux champs. +Data can be put into and copied out of variables and arrays. Putting data into a variable is called **assigning the data to the variable** and is done with the assignment operator (:=). The assignment operator is also used to assign data to fields. -L’opérateur d’assignation est un premier moyen pour créer une variable et lui donner une valeur. Vous placez le nom de la variable que vous voulez créer à gauche de l’opérateur. Par exemple: +The assignment operator is a primary way to create a variable and to put data into it. You write the name of the variable that you want to create on the left side of the assignment operator. For example: ```4d -MonNombre:=3 +MyNumber:=3 ``` -crée la variable _MonNombre_ et lui donne la valeur numérique 3. Si MonNombre existait déjà, elle prend simplement la valeur 3. +creates the variable _MyNumber_ and puts the number 3 into it. If MyNumber already exists, then the number 3 is just put into it. > It is usually not recommended to create variables without [declaring their type](#creating-variables). -Bien entendu, les variables ne seraient pas très utiles si vous ne pouviez pas récupérer les valeurs qu’elles contiennent. De nouveau, vous utilisez l’opérateur d’assignation. Si vous devez placer la valeur de MonNombre dans un champ nommé [Produits]Taille, il vous suffit de placer _MonNombre_ à droite de l’opérateur d’assignation : +Of course, variables would not be very useful if you could not get data out of them. Once again, you use the assignment operator. If you need to put the value of MyNumber in a field called [Products]Size, you would write _MyNumber_ on the right side of the assignment operator: ```4d -[Produits]Taille:=MonNombre +[Products]Size:=MyNumber ``` -Dans ce cas, _[Produits]Taille_ vaudrait 3. Cet exemple est plutôt simple, mais il illustre le moyen élémentaire dont vous disposez pour transférer des données d’un objet vers un autre en utilisant le langage. +In this case, _[Products]Size_ would be equal to 3. This example is rather simple, but it illustrates the fundamental way that data is transferred from one place to another by using the language. -Vous assignez des valeurs aux éléments du tableau à l'aide d'accolades ({...}) : +You assign data to array elements by using curly braces ({...}): ```4d -atNoms{1}:="Richard" +atNames{1}:="Richard" ``` -## Variables locales, process et interprocess +## Local, Process, and Interprocess variables -Vous pouvez créer trois types de variables : des variables **locales**, des variables **process** et des variables **interprocess**. La différence entre ces trois types de variables est leur portée, ou les objets pour lesquels elles sont disponibles. +You can create three types of variables: **local**, **process**, and **interprocess**. The difference between the three types of elements is their scope, or the objects to which they are available. -### Variables locales +### Local variables -Une variable locale, comme son nom l’indique, est locale à une méthode — c’est-à-dire accessible uniquement à l’intérieur de la méthode dans laquelle elle a été créée et inaccessible à l’extérieur de cette méthode. Le fait d'être local à une méthode est formellement qualifié de «portée locale». Les variables locales sont utilisées pour restreindre une variable afin qu'elle ne fonctionne que dans la méthode. +A local variable is, as its name implies, local to a method—accessible only within the method in which it was created and not accessible outside of that method. Being local to a method is formally referred to as being “local in scope.” Local variables are used to restrict a variable so that it works only within the method. -- Eviter des conflits de noms avec les autres variables -- Utiliser temporairement des valeurs, -- Réduire le nombre de variables process +You may want to use a local variable to: -Le nom d’une variable locale commence toujours par le signe dollar ($) et peut contenir jusqu’à 31 autres caractères. Si vous saisissez un nom plus long, 4D le tronque pour le ramener à 31 caractères. +- Avoid conflicts with the names of other variables +- Use data temporarily +- Reduce the number of process variables -Lorsque vous développez un projet d'application comportant de nombreuses méthodes et variables, il arrive souvent que vous n’ayez besoin d’utiliser une variable que dans une méthode. Vous pouvez alors créer et utiliser une variable locale, sans devoir vous soucier de l’existence d’une autre variable du même nom ailleurs dans la base. +The name of a local variable always starts with a dollar sign ($) and can contain up to 31 additional characters. If you enter a longer name, 4D truncates it to the appropriate length. -Souvent, dans une application, des informations ponctuelles sont demandées à l’utilisateur. The `Request` command can obtain this information. Elle affiche une boîte de dialogue comportant un message demandant à l’utilisateur de répondre et, lorsque la réponse est validée, la retourne. Généralement, il n’est pas nécessaire de conserver cette information très longtemps dans vos méthodes. C’est l’endroit parfait pour utiliser une variable locale. Voici un exemple : +When you are working in an application project with many methods and variables, you often find that you need to use a variable only within the method on which you are working. You can create and use a local variable in the method without worrying about whether you have used the same variable name somewhere else. + +Frequently, in an application, small pieces of information are needed from the user. The `Request` command can obtain this information. It displays a dialog box with a message prompting the user for a response. When the user enters the response, the command returns the information the user entered. You usually do not need to keep this information in your methods for very long. This is a typical way to use a local variable. Here is an example: ```4d - $vsID:=Request("Saisissez votre numéro d'identification :") -If(OK=1) - QUERY([Personnes];[Personnes]ID=$vsID) + $vsID:=Request("Please enter your ID:") + If(OK=1) + QUERY([People];[People]ID =$vsID) End if ``` -Cette méthode demande simplement à l’utilisateur de saisir un numéro d’identification. La réponse est placée dans une variable locale, $vsID, puis la méthode la recherche parmi les champs [Personnes]ID. Une fois la méthode terminée, la variable locale $vsID est effacée de la mémoire. Ce fonctionnement est bien adapté puisque la variable n’est utile qu’une seule fois et dans cette méthode uniquement. +This method simply asks the user to enter an ID. It puts the response into a local variable, $vsID, and then searches for the ID that the user entered. When this method finishes, the $vsID local variable is erased from memory. This is fine, because the variable is needed only once and only in this method. -**Note :** les paramètres $1, $2 etc. passés aux méthodes sont des variables locales. Pour plus d'informations, veuillez consulter le thème [Paramètres](Concepts/parameters.md). +**Note:** Parameters $1, $2... passed to methods are local variables. For more information, please refer to [Parameters](Concepts/parameters.md). -### Variables process +### Process variables -Une variable process est “visible” uniquement dans le process où elle a été créée. Elle est utilisable par toutes les méthodes du process et toutes les méthodes appelées depuis le process. +A process variable is available only within a process. It is accessible to the process method and any other method called from within the process. -Le nom d’une variable process ne comporte aucun préfixe. Ce nom peut contenir jusqu’à 31 caractères. +A process variable does not have a prefix before its name. A process variable name can contain up to 31 characters. -En mode interprété, les variables sont gérées dynamiquement; elles sont créées et effacées de la mémoire «à la volée». En mode compilé, tous les process que vous créez (process utilisateur) partagent la même définition de variables process, mais chaque process a une instance différente pour chaque variable. Par exemple, la variable maVar est une certaine variable dans le process P_1 et une autre variable dans le process P_2. +In interpreted mode, variables are maintained dynamically; they are created and erased from memory “on the fly.” In compiled mode, all processes you create (user processes) share the same definition of process variables, but each process has a different instance for each variable. For example, the variable myVar is one variable in the process P_1 and another one in the process P_2. -Un process peut lire et écrire des variables process dans un autre process à l'aide des commandes `LIRE VARIABLE PROCESS` et `ECRIRE VARIABLE PROCESS`. Nous vous recommandons de n'utiliser ces commandes que dans le cadre des besoins décrits ci-dessous (qui sont les raisons pour lesquelles ces commandes ont été créées dans 4D) : +A process can “peek and poke” process variables from another process using the commands `GET PROCESS VARIABLE` and `SET PROCESS VARIABLE`. It is good programming practice to restrict the use of these commands to the situation for which they were added to 4D: -- Communication interprocess à des endroits particuliers de votre code -- Gestion du glisser-déposer interprocess -- En client/serveur, communication entre les process sur les postes clients et les procédures stockées exécutées sur le serveur +- Interprocess communication at specific places or your code +- Handling of interprocess drag and drop +- In Client/Server, communication between processes on client machines and the stored procedures running on the server machines -Pour plus d'informations, reportez-vous à la section **Process** et à la description de ces commandes. +For more information, see the chapter **Processes** and the description of these commands. -### Variables interprocess +### Interprocess variables -Les variables interprocess sont visibles dans tout le projet et sont disponibles pour tous les process. Les variables interprocess sont principalement utilisées pour le partage d’informations entre les process. +Interprocess variables are available throughout the project and are shared across all cooperative processes. They are primarily used to share information between processes. -> L'utilisation de variables interprocess n'est pas recommandée car elles ne sont pas disponibles depuis le process préemptif et peuvent rendre le code moins maintenable. +> Use of interprocess variables is not recommended since they are not available from preemptive processes and tend to make the code less maintainable. -Le nom d’une variable interprocess débute toujours par le symbole (<>) — formé du symbole “inférieur à” suivi du symbole “supérieur à” — et peut comporter jusqu’à 31 caractères supplémentaires. +The name of an interprocess variable always begins with the symbols (<>) — a “less than” sign followed by a “greater than” sign— followed by 31 characters. -En mode client/serveur, chaque poste (client et serveur) partage la même définition des variables interprocess, mais chacun utilise une instance différente d'une variable. +In Client/Server, each machine (Client machines and Server machine) share the same definition of interprocess variables, but each machine has a different instance for each variable. From cff433aed3f04f0460b15ff99fe7283f0b6aa84f Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:31:51 +0100 Subject: [PATCH 009/311] New translations onActivate.md (French) --- website/translated_docs/fr/Events/onActivate.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/website/translated_docs/fr/Events/onActivate.md b/website/translated_docs/fr/Events/onActivate.md index df119463ce9fd3..ab79ae0dddfe34 100644 --- a/website/translated_docs/fr/Events/onActivate.md +++ b/website/translated_docs/fr/Events/onActivate.md @@ -3,15 +3,15 @@ id: onActivate title: Sur activation --- -| Code | Peut être appelé par | Définition | -| ---- | -------------------- | ---------------------------------------------------------------------------------------- | -| 11 | Formulaire | The form's window becomes the frontmost window or the subform's container gets the focus | +| Code | Can be called by | Definition | +| ---- | ---------------- | ---------------------------------------------------------------------------------------- | +| 11 | Form | The form's window becomes the frontmost window or the subform's container gets the focus | ## Description -Si la fenêtre d'un formulaire a été envoyée en arrière-plan, cet événement est appelé lorsque la fenêtre devient la fenêtre active. +If the window of a form was sent to the background, this event is called when the window becomes the frontmost window. -Cet événement s'applique au formulaire dans son ensemble et non à un objet particulier. Par conséquent, si la propriété d'événement formulaire `On Activate` est sélectionnée, seul le formulaire aura sa méthode formulaire appelée. +This event applies to the form as a whole and not to a particular object. Consequently, if the `On Activate` form event property is selected, only the form will have its form method called. In the case of a subform, this event is passed to the subform when the container gets the focus (if it has the [focusable](FormObjects/properties_Entry.md#focusable) property). \ No newline at end of file From 5dc8dd488c79420c9331d121bba6baa45f61693a Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:31:54 +0100 Subject: [PATCH 010/311] New translations onAfterEdit.md (French) --- .../translated_docs/fr/Events/onAfterEdit.md | 72 +++++++++---------- 1 file changed, 34 insertions(+), 38 deletions(-) diff --git a/website/translated_docs/fr/Events/onAfterEdit.md b/website/translated_docs/fr/Events/onAfterEdit.md index 8eda378ab28191..955d969bdbff4d 100644 --- a/website/translated_docs/fr/Events/onAfterEdit.md +++ b/website/translated_docs/fr/Events/onAfterEdit.md @@ -3,57 +3,57 @@ id: onAfterEdit title: Sur après modification --- -| Code | Peut être appelé par | Définition | -| ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | -| 45 | [Zone 4D View Pro](FormObjects/viewProArea_overview) - [Zone 4D Write Pro](FormObjects/writeProArea_overview) - [Combo Box](FormObjects/comboBox_overview.md) - Formulaire - [Zone de saisie](FormObjects/input_overview.md) - [Liste hiérarchique](FormObjects/list_overview.md) - [List Box](FormObjects/listbox_overview.md) - [Colonne List Box](FormObjects/listbox_overview.md#list-box-columns) | The contents of the enterable object that has the focus has just been modified | +| Code | Can be called by | Definition | +| ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | +| 45 | [4D View Pro area](FormObjects/viewProArea_overview) - [4D Write Pro area](FormObjects/writeProArea_overview) - [Combo Box](FormObjects/comboBox_overview.md) - Form - [Input](FormObjects/input_overview.md) - [Hierarchical List](FormObjects/list_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) | The contents of the enterable object that has the focus has just been modified | ## Description -### Cas général +### General case -Cet événement peut être utilisé pour filtrer la saisie de données dans les objets saisissables au clavier au niveau le plus bas. +This event can be used filter the data entry in keyboard enterable objects at the lowest level. When it is used, this event is generated after each change made to the contents of an enterable object, regardless of the action that caused the change, *i.e.*: -- Actions d'édition standard qui modifient le contenu comme les actions coller, couper, supprimer ou annuler; -- Déposer une valeur (action similaire à coller); -- Toute entrée au clavier effectuée par l'utilisateur; dans ce cas, l'événement `On After Edit` est généré après les événements [`On Before Keystroke`](onBeforeKeystroke.md) et [`On After Keystroke`](onAfterKeystroke.md), s'ils sont utilisés. -- Toute modification apportée à l'aide d'une commande de langage qui simule une action de l'utilisateur (c'est-à-dire `POST KEY`). +- Standard editing actions which modify content like paste, cut, delete or cancel; +- Dropping a value (action similar to paste); +- Any keyboard entry made by the user; in this case, the `On After Edit` event is generated after the [`On Before Keystroke`](onBeforeKeystroke.md) and [`On After Keystroke`](onAfterKeystroke.md) events, if they are used. +- Any modification made using a language command that simulates a user action (i.e., `POST KEY`). ### 4D View Pro The object returned by the `FORM Event` command contains: -| Propriété | Type | Description | -| ----------- | ----------- | --------------------------------------------------------------------------------------------------- | -| code | entier long | Sur après modification | -| description | Texte | "On After Edit" | -| objectName | Texte | 4D View Pro area name | -| sheetName | Texte | Name of the sheet of the event | -| action | Texte | "editChange", "valueChanged", "DragDropBlock", "DragFillBlock", "formulaChanged", "clipboardPasted" | +| Property | Type | Description | +| ----------- | ------- | --------------------------------------------------------------------------------------------------- | +| code | longint | Sur après modification | +| description | text | "On After Edit" | +| objectName | text | 4D View Pro area name | +| sheetName | text | Name of the sheet of the event | +| action | text | "editChange", "valueChanged", "DragDropBlock", "DragFillBlock", "formulaChanged", "clipboardPasted" | Depending on the `action` property value, the [event object](overview.md#event-object) will contain additional properties. #### action = editChange -| Propriété | Type | Description | +| Property | Type | Description | | ----------- | ------- | --------------------------------- | | range | object | Cell range | | editingText | variant | The value from the current editor | #### action = valueChanged -| Propriété | Type | Description | -| --------- | ------- | --------------------------- | -| range | object | Cell range | -| oldValue | variant | Value of cell before change | -| newValue | variant | Value of cell after change | +| Property | Type | Description | +| -------- | ------- | --------------------------- | +| range | object | Cell range | +| oldValue | variant | Value of cell before change | +| newValue | variant | Value of cell after change | #### action = DragDropBlock -| Propriété | Type | Description | +| Property | Type | Description | | --------- | ------- | --------------------------------------------------- | | fromRange | object | Range of source cell range (being dragged) | | toRange | object | Range of the destination cell range (drop location) | @@ -63,7 +63,7 @@ Depending on the `action` property value, the [event object](overview.md#event-o #### action = DragFillBlock -| Propriété | Type | Description | +| Property | Type | Description | | --------- | ------ | ------------------- | | fillRange | object | Range used for fill | autoFillType|longint|Value used for the fill.
  • 0: Cells are filled with all data (values, formatting, and formulas)
  • 1: Cells are filled with automatically sequential data
  • 2: Cells are filled with formatting only
  • 3: Cells are filled with values but not formatting
  • 4: Values are removed from the cells
  • 5: Cells are filled automatically| |fillDirection|longint|Direction of the fill.
  • 0: The cells to the left are filled
  • 1: The cells to the right are filled
  • 2: The cells above are filled
  • 3: The cells below are filled| @@ -71,21 +71,21 @@ Depending on the `action` property value, the [event object](overview.md#event-o #### action = formulaChanged -| Propriété | Type | Description | -| --------- | ------ | ------------------- | -| range | object | Cell range | -| formula | Texte | The formula entered | +| Property | Type | Description | +| -------- | ------ | ------------------- | +| range | object | Cell range | +| formula | text | The formula entered | #### action = clipboardPasted -| Propriété | Type | Description | -| ----------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| range | object | Cell range | -| pasteOption | entier long | Specifies what is pasted from the clipboard:
  • 0: Everything is pasted (values, formatting, and formulas)
  • 1: Only values are pasted
  • 2: Only the formatting is pasted
  • 3: Only formulas are pasted
  • 4: Values and formatting are pasted (not formulas)
  • 5: Formulas and formatting are pasted (not values) | -| pasteData | object | The data from the clipboard to be pasted
  • "text" (text): The text from the clipboard
  • "html" (text): The HTML from the clipboard | +| Property | Type | Description | +| ----------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| range | object | Cell range | +| pasteOption | longint | Specifies what is pasted from the clipboard:
  • 0: Everything is pasted (values, formatting, and formulas)
  • 1: Only values are pasted
  • 2: Only the formatting is pasted
  • 3: Only formulas are pasted
  • 4: Values and formatting are pasted (not formulas)
  • 5: Formulas and formatting are pasted (not values) | +| pasteData | object | The data from the clipboard to be pasted
  • "text" (text): The text from the clipboard
  • "html" (text): The HTML from the clipboard | -#### Exemple +#### Example Here is an example handling an `On After Edit` event: @@ -96,10 +96,6 @@ Here is an example handling an `On After Edit` event: from "+String(FORM Event.oldValue)+\ " to "+String(FORM Event.newValue)+"!") End if - End if - End if - End if - End if End if ``` From 41fa13696a358c31b1a78dadae8368501a680fe3 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:31:56 +0100 Subject: [PATCH 011/311] New translations onAfterKeystroke.md (French) --- .../fr/Events/onAfterKeystroke.md | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/website/translated_docs/fr/Events/onAfterKeystroke.md b/website/translated_docs/fr/Events/onAfterKeystroke.md index 6e85b2c6394e80..5208a9d50cb20b 100644 --- a/website/translated_docs/fr/Events/onAfterKeystroke.md +++ b/website/translated_docs/fr/Events/onAfterKeystroke.md @@ -3,13 +3,13 @@ id: onAfterKeystroke title: Sue après frappe clavier --- -| Code | Peut être appelé par | Définition | -| ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | -| 28 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Combo Box](FormObjects/comboBox_overview.md) - Form - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) | Un caractère est sur le point d'être saisi dans l'objet qui a le focus. `Get edited text` returns the object's text **including** this character. | +| Code | Can be called by | Definition | +| ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | +| 28 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Combo Box](FormObjects/comboBox_overview.md) - Form - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) | A character is about to be entered in the object that has the focus. `Get edited text` returns the object's text **including** this character. | -
    Historique +
    History -| Version | Modifications | +| Version | Changes | | ------- | ---------------------------------------------------------------------------------------------------------------- | | v18 R5 | - Support in non-enterable list boxes

    - The event is now triggered after IME validation |

    @@ -17,25 +17,25 @@ title: Sue après frappe clavier ## Description -> L'événement `On After Keystroke` peut généralement être remplacé par l'événement On After Edit (voir ci-dessous). +> The `On After Keystroke` event can generally be replaced by the [`On After Edit`](onAfterEdit.md) event (see below). -Après avoir sélectionné les propriétés d'événement [`On Before Keystroke`](onBeforeKeystroke.md) et `On After Keystroke` pour un objet, vous pouvez détecter et gérer les frappes au sein de l'objet, en utilisant la commande `FORM event` qui renverra `On Before Keystroke` puis `On After Keystroke` (pour plus d'informations, veuillez reportez-vous à la description de la commande `Get edited text`). +After the [`On Before Keystroke`](onBeforeKeystroke.md) and `On After Keystroke` event properties are selected for an object, you can detect and handle the keystrokes within the object, using the `FORM event` command that will return `On Before Keystroke` and then `On After Keystroke` (for more information, please refer to the description of the `Get edited text` command). -> Ces événements sont également activés par des commandes de langage qui simulent une action utilisateur telle que `POST KEY`. +> These events are also activated by language commands that simulate a user action like `POST KEY`. -L'événement `On After Keystroke` n'est pas généré : +The `On After Keystroke` event is not generated: -- dans la méthode [des colonnes de list box](FormObjects/listbox_overview.md#list-box-columns), sauf lorsqu'une cellule est en cours d'édition (cependant elle est générée dans tous les cas dans la méthode de [list box](FormObjects/listbox_overview.md)), -- lorsque les modifications utilisateur ne sont pas effectuées à l'aide du clavier (coller, glisser-déposer, case à cocher, liste déroulante, combo box). Pour traiter ces événements, vous devez utiliser [`On After Edit`](onAfterEdit.md). +- in [list box columns](FormObjects/listbox_overview.md#list-box-columns) method except when a cell is being edited (however it is generated in any cases in the [list box](FormObjects/listbox_overview.md) method), +- when user modifications are not carried out using the keyboard (paste, drag-and-drop, checkbox, drop down list, combo box). To process these events, you must use [`On After Edit`](onAfterEdit.md). -### Séquence de frappe +### Keystroke sequence -Lorsqu'une entrée nécessite une séquence de frappes clavier, les événements [`On Before Keystroke`](onBeforeKeystroke.md) et [`On After Keystroke event`] sont générés uniquement lorsque l'entrée est entièrement validée par l'utilisateur. La commande `Keystroke` retourne le caractère validé. Ce cas se produit principalement : +When an entry requires a sequence of keystrokes, the [`On Before Keystroke`](onBeforeKeystroke.md) and [`On After Keystroke event`] events are generated only when the entry is fully validaded by the user. The `Keystroke` command returns the validated character. This case mainly occurs: -- lors de l'utilisation de touches "mortes" telles que ^ ou ~: les événements ne sont générés que lorsque le caractère étendu est éventuellement saisi (par exemple "ê" ou ñ), -- lorsqu'un IME (Input method editor) affiche une boîte de dialogue intermédiaire où l'utilisateur peut saisir une combinaison de caractères : les événements sont générés uniquement lorsque la boîte de dialogue IME est validée. +- when using "dead" keys such as ^ or ~: events are generated only when the extended character is eventuelly entered (e.g. "ê" or ñ), +- when an IME (Input method editor) displays an intermediary dialog box where the user can enter a combination of characters: events are generated only when the IME dialog is validated. -### Voir également +### See also [On Before Keystroke](onBeforeKeystroke.md). \ No newline at end of file From c153736bfc739c82c374265de7f43cf4ec91db4a Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:31:59 +0100 Subject: [PATCH 012/311] New translations onAfterSort.md (French) --- website/translated_docs/fr/Events/onAfterSort.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onAfterSort.md b/website/translated_docs/fr/Events/onAfterSort.md index 42960efc05a02a..d125cb3fe934a5 100644 --- a/website/translated_docs/fr/Events/onAfterSort.md +++ b/website/translated_docs/fr/Events/onAfterSort.md @@ -3,7 +3,7 @@ id: onAfterSort title: Sur après tri --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ----------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | | 30 | [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) | A standard sort has just been carried out in a list box column. | From a38155010cf034de1369db4b8a276654855489c1 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:01 +0100 Subject: [PATCH 013/311] New translations onAlternativeClick.md (French) --- website/translated_docs/fr/Events/onAlternativeClick.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onAlternativeClick.md b/website/translated_docs/fr/Events/onAlternativeClick.md index 45374c0278ed20..69ab04a846720f 100644 --- a/website/translated_docs/fr/Events/onAlternativeClick.md +++ b/website/translated_docs/fr/Events/onAlternativeClick.md @@ -3,7 +3,7 @@ id: onAlternativeClick title: Sur clic alternatif --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 38 | [Button](FormObjects/button_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) |
  • Buttons: The "arrow" area of a button is clicked
  • List boxes: In a column of an object array, an ellipsis button ("alternateButton" attribute) is clicked | From 6c3c6febfab647254d764866c0f56d7da1f7b238 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:03 +0100 Subject: [PATCH 014/311] New translations onBeforeDataEntry.md (French) --- website/translated_docs/fr/Events/onBeforeDataEntry.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onBeforeDataEntry.md b/website/translated_docs/fr/Events/onBeforeDataEntry.md index d39909a97c18c3..ccfa74ee9ace58 100644 --- a/website/translated_docs/fr/Events/onBeforeDataEntry.md +++ b/website/translated_docs/fr/Events/onBeforeDataEntry.md @@ -3,7 +3,7 @@ id: onBeforeDataEntry title: Sur avant saisie --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | | 41 | [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) | A list box cell is about to change to editing mode | From 8804618787ee15b84684b986a9b21f89887e3462 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:05 +0100 Subject: [PATCH 015/311] New translations onBeginDragOver.md (French) --- website/translated_docs/fr/Events/onBeginDragOver.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onBeginDragOver.md b/website/translated_docs/fr/Events/onBeginDragOver.md index 05e3dc802a5f0f..638b197e4097be 100644 --- a/website/translated_docs/fr/Events/onBeginDragOver.md +++ b/website/translated_docs/fr/Events/onBeginDragOver.md @@ -3,7 +3,7 @@ id: onBeginDragOver title: Sur début survol --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- | | 17 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Tab control](FormObjects/tabControl.md) | An object is being dragged | From 5a8916f00b3de61a5e2589ee0e122c7681f7f618 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:07 +0100 Subject: [PATCH 016/311] New translations plug-ins.md (French) --- .../translated_docs/fr/Concepts/plug-ins.md | 62 +++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/website/translated_docs/fr/Concepts/plug-ins.md b/website/translated_docs/fr/Concepts/plug-ins.md index dcf1118eb70357..0e62435acb5e9f 100644 --- a/website/translated_docs/fr/Concepts/plug-ins.md +++ b/website/translated_docs/fr/Concepts/plug-ins.md @@ -3,57 +3,57 @@ id: plug-ins title: Plug-ins --- -En développant une application 4D, vous découvrirez de nombreuses fonctionnalités que vous n'aviez pas remarquées au début. Vous pouvez même étendre la version standard de 4D en ajoutant des **plug-ins** à votre environnement de développement 4D. +As you develop a 4D application, you will discover many capabilities that you did not notice when you started. You can even augment the standard version of 4D by adding **plug-ins** to your 4D development environment. -## Pourquoi un plugin ? +## Why the need for a plug-in? -Bien que 4D propose des centaines de méthodes intégrées permettant de manipuler des objets et des enregistrements, et d'implémenter une interface utilisateur, une utilisation ou des fonctionnalités spéciales (parfois dépendantes de la plate-forme) peuvent être nécessaires : l'une peut nécessiter ODBC sous Windows, une autre peut nécessiter des services Apple sous macOS, et un autre peut souhaiter implémenter des outils statistiques spécifiques, une connexion à un réseau social, une plateforme de paiement, un accès à un fichier sur le réseau, une interface utilisateur spéciale ou une structure d'image privée. +Although 4D provides hundred of built-in methods used to manipulate objects, records and implement user interface, some special use or feature (sometimes platform dependant) may be needed: one may need ODBC under Windows, another may need Apple services under macOS, while yet another may want to implement specific statistics tools, social network login, payment platform, file access over the network, a special user interface, or a private picture structure. -Il est évident que couvrir tous les domaines des systèmes d'exploitation macOS et Windows au moyen de commandes 4D mènerait certainement à un produit contenant des milliers de commandes et, dans le même temps, la plupart des utilisateurs n'auraient pas besoin d'un si grand ensemble de fonctionnalités. De plus, la création d'un outil aussi complet rendrait l'environnement 4D incroyablement complexe et demanderait des mois d'étude à la plupart des utilisateurs avant de pouvoir obtenir des résultats utiles. +It is obvious that covering all areas of both the macOS and Windows operating systems by way of 4D commands would certainly lead to a product with thousands of commands, and at the same time, most users would have no need for such a large set of capabilities. Also, creating such an all-encompassing tool would make the 4D environment incredibly complex and would take most users months of study before useful results could be expected. -La nature modulaire de l'environnement 4D permet la création d'applications de base, mais n'exclut pas le développement de systèmes extrêmement complexes. L'architecture du plug-in 4D ouvre l'environnement 4D à tout type d'application ou d'utilisateur. Les plug-ins 4D multiplient la puissance et la productivité de cette application ou de l'utilisateur. +The modular nature of the 4D environment allows the creation of basic applications but does not preclude the development of highly complex systems. The 4D Plug-in architecture opens the 4D environment to any type of application or user. 4D Plug-ins multiply that application or user's power and productivity. -## Qu'est-ce qu'un plug-in et à quoi sert-il ? +## What is a plug-in and what can it do? -Un plug-in est un morceau de code que 4D lance au démarrage. Il ajoute des fonctionnalités à 4D et augmente ainsi sa capacité. +A plug-in is a piece of code that 4D launches at start up. It adds functionality to 4D and thus increases its capacity. -Habituellement, un plug-in fait des choses : -- Que 4D ne peut pas effectuer (c'est-à-dire une technologie de plate-forme spécifique), -- Qui sera très difficile à écrire en utilisant uniquement 4D, -- Qui sont uniquement disponibles en tant que point d'entrée de plug-in +Usually, a plug-in does things that: +- 4D cannot do (ie, specific platform technology), +- will be very hard to write just using 4D, +- are only available as Plug-in Entrypoint -Un plug-in contient généralement un ensemble de routines données au développeur 4D. Il peut gérer une zone externe et exécuter un processus externe. +A plug-in usually contains a set of routines given to the 4D Developer. It can handle an External Area and run an external process. -- Une **routine de plug-in** est une routine écrite en langage natif (généralement C ou C ++) qui déclenche une action. -- Une **zone externe** est une partie d'un formulaire pouvant presque tout afficher et interagir avec l'utilisateur si nécessaire. -- Un **processus externe** est un processus qui s'exécute seul, généralement en boucle, et qui fait quasiment tout ce qu'il souhaite. Tout le code de process appartient au plug-in, 4D est simplement présent pour recevoir/envoyer des événements au process. +- A **plug-in routine** is a routine written in native language (usually C or C++) that causes an action. +- An **external area** is a part of a form that can display almost everything and interact with the user when necessary. +- An **external process** is a process that runs alone, usually in a loop, doing almost everything it wants. All process code belongs to the plug-in, 4D is simply present to receive/send events to the process. -### Note importante +### Important note -Un plug-in peut être très simple, avec une seule routine effectuant une très petite tâche, ou très complexe, impliquant une centaine de routines et de domaines. Cependant, chaque développeur de plug-in doit se rappeler qu'un plug-in est un "échantillon" de code. C'est le plug-in qui s'exécute dans 4D, et non l'inverse. En tant que morceau de code, c'est l'hôte de 4D; ce n'est pas une application autonome. Il partage le temps CPU et la mémoire avec 4D et d'autres plug-ins. Il doit donc s'agir d'un code poli, qui utilise exactement ce qui est nécessaire à son fonctionnement. Par exemple, dans les longues boucles, un plug-in doit appeler `PA_Yield ()` pour donner du temps au planificateur 4D, à moins que sa tâche ne soit critique aussi bien pour lui que pour l'application. +A plug-in can be very simple, with just one routine performing a very small task, or it can be very complex, involving hundred of routines and areas. There is virtually no limit to what a plug-in can do, however every plug-in developer should remember that a plug-in is a "sample" piece of code. It is the plug-in that runs within 4D, not the opposite. As a piece of code, it is the host of 4D; it is not a stand-alone application. It shares CPU time and memory with 4D and other plug-ins, thus, it should be a polite code, using just what is necessary to run. For example, in long loops, a plug-in should call `PA_Yield()` to give time to the 4D scheduler unless its task is critical for both it and the application. -## Comment créer un plug-in ? +## How to create a plug-in? -Sur GitHub, 4D fournit un [**plug-in SDK**](https://github.com/4d/4D-Plugin-SDK) open source, contenant le plug-in API 4D et l'assistant de plug-in 4D : +4D provides on GitHub an open-source [**plug-in SDK**](https://github.com/4d/4D-Plugin-SDK), containing the 4D Plugin API and the 4D Plugin Wizard: -- le [**Plugin API de 4D**](https://github.com/4d/4D-Plugin-SDK/blob/master/4D%20Plugin%20API), écrit en C, ajoute plus de 400 fonctions qui vous aident à créer facilement vos propres plug-ins pour ajouter de nouvelles fonctionnalités à votre application 4D. Les fonctions du plug-in API de 4D gèrent toutes les interactions entre l'application 4D et votre plug-in. -- [**L'assistant de plug-in 4D**](https://github.com/4d/4D-Plugin-SDK/blob/master/4D%20Plugin%20Wizard) est un outil essentiel qui simplifie la tâche de développement des plug-ins 4D. Il écrit le code dont 4D a besoin pour interagir correctement avec un plug-in et le charger, afin de vous concentrer sur votre propre code. +- the [**4D Plugin API**](https://github.com/4d/4D-Plugin-SDK/blob/master/4D%20Plugin%20API), written in C, adds more than 400 functions that help you to easily create your own plug-ins to add new functionnalities to your 4D application. 4D Plug-in API functions manage all the interactions between the 4D application and your plug-in. +- The [**4D Plugin Wizard**](https://github.com/4d/4D-Plugin-SDK/blob/master/4D%20Plugin%20Wizard) is an essential tool that simplifies the task of developing 4D plug-ins. It writes the code 4D needs to correctly load and interact with a plug-in, allowing you to concentrate on your own code. -## Comment installer un plug-in? +## How to install a plug-in? -L’installation des plug-ins et composants dans l’environnement 4D s’effectue par simple copie des fichiers des plug-ins ou des composants dans des dossiers appropriés. +You install plug-ins in the 4D environment by copying their files into the appropriate folder. -Les dossiers “NomPlugin.bundle” (appelés paquets ou packages sous Mac Os) contiennent à la fois les versions Windows et Mac Os des plug-ins 4D. Leur architecture interne spécifique permet notamment à 4D Server de charger la version adéquate en fonction de la plate-forme d’exécution du poste client. Pour installer un plug-in dans votre environnement, il vous suffit de placer le dossier ou progiciel “NomPlugin.bundle” concerné dans le dossier **Plugins** souhaité. +“PluginName.bundle” folders contain both Windows and macOS versions of 4D plug-ins. Their specific internal architecture lets 4D Server load the appropriate version according to the platform where the client machine will be run. To install a plug-in in your environment, you just need to put the “PluginName.bundle” folder or package concerned into the desired **Plugins** folder. -Vous pouvez placer les dossiers Plugins et Components à deux endroits : +You can put the Plugins folder in two different places: -- Au niveau de l’application 4D exécutable, c'est-à-dire .: - - Sous Windows : à côté du fichier .exe +- At the level of the 4D executable application, i.e.: + - Under Windows: next to the .exe file - Under macOS: at the first level of the Contents folder inside the application package. In this case, plug-ins are available in every project opened by this application. -- At the same level as the Project folder. Dans ce cas, les plug-ins et les composants sont disponibles dans cette application uniquement. +- At the same level as the Project folder. In this case, plug-ins are only available in this particular project. -Le choix de l’emplacement dépend de votre mode d’utilisation du plug-in ou du composant. +The choice of location depends on how you want to use the plug-in. -Si un même plug-in ou un même composant est placé aux deux endroits, 4D charge uniquement celui situé à côté de la structure. Dans le cas d’une application compilée et fusionnée avec 4D Volume Desktop, la présence de plusieurs instances d’un même plug-in ou d'un même composant empêchera l’ouverture de l’application. +If the same plug-in is placed in both locations, 4D will only load the one located next to the structure. In an application that is compiled and merged using 4D Volume Desktop, if there are several instances of the same plug-in present, this will prevent the application from opening. -Les plug-ins et les composants sont chargés par 4D lors du lancement de l’application. Vous devez donc quitter votre application 4D avant d’effectuer vos copies de fichiers ou dossiers. Ouvrez ensuite votre projet avec 4D. Si l’utilisation d'un plug-in nécessite une licence spécifique, le plug-in est chargé mais n’est pas actif. \ No newline at end of file +Plug-ins are loaded by 4D when the application is launched so you will need to quit your 4D application before installing them. Then open your project with 4D. If any plug-in requires a specific license for use, it will be loaded but not available for use. \ No newline at end of file From bb54746d14a4b5ca547f5df1ea3fea69b642f649 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:09 +0100 Subject: [PATCH 017/311] New translations onBeginUrlLoading.md (French) --- website/translated_docs/fr/Events/onBeginUrlLoading.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/Events/onBeginUrlLoading.md b/website/translated_docs/fr/Events/onBeginUrlLoading.md index 330a1a09e1fffb..f7eb5de22cbe11 100644 --- a/website/translated_docs/fr/Events/onBeginUrlLoading.md +++ b/website/translated_docs/fr/Events/onBeginUrlLoading.md @@ -3,9 +3,9 @@ id: onBeginUrlLoading title: On Begin URL Loading --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------- | ----------------------------------- | -| 47 | [Zone Web](FormObjects/webArea_overview.md) | A new URL is loaded in the Web area | +| 47 | [Web Area](FormObjects/webArea_overview.md) | A new URL is loaded in the Web area | ## Description From c730627ccf7d7e75a3fcd18bd5f91ac8ce5e7f51 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:11 +0100 Subject: [PATCH 018/311] New translations onBoundVariableChange.md (French) --- website/translated_docs/fr/Events/onBoundVariableChange.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onBoundVariableChange.md b/website/translated_docs/fr/Events/onBoundVariableChange.md index 7d4928731a877c..239aae38ad4eb0 100644 --- a/website/translated_docs/fr/Events/onBoundVariableChange.md +++ b/website/translated_docs/fr/Events/onBoundVariableChange.md @@ -3,9 +3,9 @@ id: onBoundVariableChange title: On Bound Variable Change --- -| Code | Peut être appelé par | Définition | -| ---- | -------------------- | ------------------------------------------- | -| 54 | Formulaire | The variable bound to a subform is modified | +| Code | Can be called by | Definition | +| ---- | ---------------- | ------------------------------------------- | +| 54 | Form | The variable bound to a subform is modified | ## Description From 18da80617dc89e222126e140e2dfe58922eec926 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:13 +0100 Subject: [PATCH 019/311] New translations onClicked.md (French) --- .../translated_docs/fr/Events/onClicked.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/website/translated_docs/fr/Events/onClicked.md b/website/translated_docs/fr/Events/onClicked.md index 6512d8a9f6267c..c49940f4bdc916 100644 --- a/website/translated_docs/fr/Events/onClicked.md +++ b/website/translated_docs/fr/Events/onClicked.md @@ -3,7 +3,7 @@ id: onClicked title: Sur clic --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------- | | 4 | [4D View Pro Area](FormObjects/viewProArea_overview.md) - [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Tab control](FormObjects/tabControl.md) | A click occurred on an object | @@ -20,7 +20,7 @@ The `On Clicked` event usually occurs once the mouse button is released. However - [Rulers](FormObjects/ruler.md): If the [Execute object method](FormObjects/properties_Action.md#execute-object-method) option is set to **true**, the `On Clicked` event occurs as soon as the click is made. - [Combo boxes](FormObjects/comboBox_overview.md): The `On Clicked` event occurs only if the user selects another value in the associated menu. A [combo box](FormObjects/comboBox_overview.md) must be treated as an enterable text area whose associated drop-down list provides default values. Consequently, you handle data entry within a combo box through the `On Before Keystroke`, `On After Keystroke` and `On Data Change` events. - [Drop-down lists](FormObjects/dropdownList_Overview.md): The `On Clicked` event occurs only if the user selects another value in the menu. The `On Data Change` event allows you to detect the activation of the object when a value different from the current value is selected -- Lorsqu'une cellule d'entrée de list box est [en cours d'édition](FormObjects/listbox_overview.md#managing-entry), l'événement `On Clicked` est généré lorsque le bouton de la souris est enfoncé, permettant d'utiliser la commande `Contextual click` par exemple. +- When a list box input cell is [being edited](FormObjects/listbox_overview.md#managing-entry), the `On Clicked` event is generated when the mouse button is pressed, allowing to use the `Contextual click` command for example. In the context of an `On Clicked` event, you can test the number of clicks made by the user by means of the `Clickcount` command. @@ -34,15 +34,15 @@ If both events are selected for an object, the `On Clicked` and then the `On Dou This event is generated when the user clicks anywhere on a 4D View Pro document. On this context, the [event object](overview.md#event-object) returned by the `FORM Event` command contains: -| Propriété | Type | Description | -| ----------- | ----------- | ------------------------------ | -| code | entier long | Sur clic | -| description | Texte | "On Clicked" | -| objectName | Texte | 4D View Pro area name | -| sheetName | Texte | Name of the sheet of the event | -| range | object | Cell range | +| Property | Type | Description | +| ----------- | ------- | ------------------------------ | +| code | longint | Sur clic | +| description | text | "On Clicked" | +| objectName | text | 4D View Pro area name | +| sheetName | text | Name of the sheet of the event | +| range | object | Cell range | -#### Exemple +#### Example ```4d If(FORM Event.code=On Clicked) From 0d80620e240fcce43010965d8b0a5994165452d9 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:16 +0100 Subject: [PATCH 020/311] New translations onCloseBox.md (French) --- website/translated_docs/fr/Events/onCloseBox.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/website/translated_docs/fr/Events/onCloseBox.md b/website/translated_docs/fr/Events/onCloseBox.md index 0bfb4f742c3daf..5c0bff081375fc 100644 --- a/website/translated_docs/fr/Events/onCloseBox.md +++ b/website/translated_docs/fr/Events/onCloseBox.md @@ -3,16 +3,16 @@ id: onCloseBox title: On Close Box --- -| Code | Peut être appelé par | Définition | -| ---- | -------------------- | --------------------------------------- | -| 22 | Formulaire | The window’s close box has been clicked | +| Code | Can be called by | Definition | +| ---- | ---------------- | --------------------------------------- | +| 22 | Form | The window’s close box has been clicked | ## Description The `On Close Box` event is generated when the user clicks on the clos box of the window. -### Exemple +### Example This example shows how to respond to a close window event with a form used for record data entry: @@ -24,8 +24,6 @@ This example shows how to respond to a close window event with a form used for r :(Form event code=On Close Box) If(Modified record($vpFormTable->)) CONFIRM("This record has been modified. Save Changes?") - Save Changes?") - Save Changes?") If(OK=1) ACCEPT Else @@ -35,6 +33,5 @@ This example shows how to respond to a close window event with a form used for r CANCEL End if //... - //déclaration(s) End case ``` \ No newline at end of file From 44534b3f338804ea0de92529d1e7c13c9e06b341 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:18 +0100 Subject: [PATCH 021/311] New translations onCloseDetail.md (French) --- website/translated_docs/fr/Events/onCloseDetail.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onCloseDetail.md b/website/translated_docs/fr/Events/onCloseDetail.md index a0e9f5526674a0..1a918df966f165 100644 --- a/website/translated_docs/fr/Events/onCloseDetail.md +++ b/website/translated_docs/fr/Events/onCloseDetail.md @@ -3,7 +3,7 @@ id: onCloseDetail title: Sur fermeture corps --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | -------------------------------------------------- | -------------------------------------------------------------- | | 26 | Form - [List Box](FormObjects/listbox_overview.md) | You left the detail form and are going back to the output form | From 28e645788587bc16dc2830ae9faf94077652bb82 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:20 +0100 Subject: [PATCH 022/311] New translations onCollapse.md (French) --- website/translated_docs/fr/Events/onCollapse.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/Events/onCollapse.md b/website/translated_docs/fr/Events/onCollapse.md index bcaf2c2adb740e..f70bcda98f633e 100644 --- a/website/translated_docs/fr/Events/onCollapse.md +++ b/website/translated_docs/fr/Events/onCollapse.md @@ -3,7 +3,7 @@ id: onCollapse title: Sur contracter --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | | 44 | [Hierarchical List](FormObjects/list_overview.md#overview) - [List Box](FormObjects/listbox_overview.md) | An element of the hierarchical list or hierarchical list box has been collapsed using a click or a keystroke | @@ -14,5 +14,5 @@ title: Sur contracter - [Hierarchical list boxes](FormObjects/listbox_overview.md#hierarchical-list-boxes): This event is generated when a row of the hierarchical list box is collapsed. -### Voir également +### See also [Sur déployer](onExpand.md) \ No newline at end of file From 91bc92bd98119ba3a8b67ba79d66dc100072459f Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:24 +0100 Subject: [PATCH 023/311] New translations onColumnMoved.md (French) --- website/translated_docs/fr/Events/onColumnMoved.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onColumnMoved.md b/website/translated_docs/fr/Events/onColumnMoved.md index 77fbb35304d3d4..4e3d82c46d0c6d 100644 --- a/website/translated_docs/fr/Events/onColumnMoved.md +++ b/website/translated_docs/fr/Events/onColumnMoved.md @@ -3,7 +3,7 @@ id: onColumnMoved title: Sur déplacement colonne --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | | 32 | [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) | A list box column is moved by the user via drag and drop | From 5a0d05f9ecdb3a0a99d9f8ff2c0238a16fb878d1 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:26 +0100 Subject: [PATCH 024/311] New translations onColumnResize.md (French) --- .../fr/Events/onColumnResize.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/website/translated_docs/fr/Events/onColumnResize.md b/website/translated_docs/fr/Events/onColumnResize.md index fd419fabd42059..29f29c769d64e6 100644 --- a/website/translated_docs/fr/Events/onColumnResize.md +++ b/website/translated_docs/fr/Events/onColumnResize.md @@ -3,7 +3,7 @@ id: onColumnResize title: Sur redimensionnement colonne --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | | 33 | [4D View Pro Area](FormObjects/viewProArea_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) | The width of a column is modified directly by the user or consequently to a form window resize | @@ -20,16 +20,16 @@ This event is generated when the width of a column in the list box is modified b This event is generated when the width of a column is modified by a user. On this context, the [event object](overview.md#event-object) returned by the `FORM Event` command contains: -| Propriété | Type | Description | -| ----------- | ----------- | ------------------------------------------------------------------- | -| code | entier long | Sur redimensionnement colonne | -| description | Texte | "On Column Resize" | -| objectName | Texte | 4D View Pro area name | -| sheetName | Texte | Name of the sheet of the event | -| range | object | Cell range of the columns whose widths have changed | -| header | boolean | True if the row header column (first column) is resized, else false | +| Property | Type | Description | +| ----------- | ------- | ------------------------------------------------------------------- | +| code | longint | Sur redimensionnement colonne | +| description | text | "On Column Resize" | +| objectName | text | 4D View Pro area name | +| sheetName | text | Name of the sheet of the event | +| range | object | Cell range of the columns whose widths have changed | +| header | boolean | True if the row header column (first column) is resized, else false | -#### Exemple +#### Example ```4d If(FORM Event.code=On Column Resize) From 02ca0738598c52eb9e9f646899abb2b0f6e236be Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:28 +0100 Subject: [PATCH 025/311] New translations onDataChange.md (French) --- website/translated_docs/fr/Events/onDataChange.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onDataChange.md b/website/translated_docs/fr/Events/onDataChange.md index 0e62a62846fc98..d0ef7c294b5e00 100644 --- a/website/translated_docs/fr/Events/onDataChange.md +++ b/website/translated_docs/fr/Events/onDataChange.md @@ -3,7 +3,7 @@ id: onDataChange title: Sur données modifiées --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | | 20 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Stepper](FormObjects/stepper.md) - [Subform](FormObjects/subform_overview.md) | An object data has been modified | From eed70ca44fcfad6b68b6e464e9c8412b96aba489 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:30 +0100 Subject: [PATCH 026/311] New translations quick-tour.md (French) --- .../translated_docs/fr/Concepts/quick-tour.md | 317 +++++++++--------- 1 file changed, 158 insertions(+), 159 deletions(-) diff --git a/website/translated_docs/fr/Concepts/quick-tour.md b/website/translated_docs/fr/Concepts/quick-tour.md index c07250a783c6e9..c3acc07f7b0508 100644 --- a/website/translated_docs/fr/Concepts/quick-tour.md +++ b/website/translated_docs/fr/Concepts/quick-tour.md @@ -4,39 +4,39 @@ title: Tour d'horizon sidebar_label: Tour d'horizon --- -En utilisant le langage 4D, le traditionnel "Hello, world!" peut s'afficher à l'écran de plusieurs manières. Le plus simple est probablement d'écrire la ligne suivante dans une méthode de projet : +Using the 4D language, printing the traditional "Hello, world!" message on screen can be done in several ways. The most simple is probably to write the following single line in a project method: ```4d ALERT("Hello, World!") ``` -Ce code affichera une boîte de dialogue d'alerte standard contenant le message "Hello, World!" et un bouton OK. Pour exécuter le code, il vous suffit de cliquer sur le bouton d'exécution dans l'éditeur de méthode : +This code will display a platform-standard alert dialog box with the "Hello, World!" message, containing an OK button. To execute the code, you just need to click on the execution button in the Method editor: ![alt-text](assets/en/Concepts/helloworld.png) -Vous pouvez également associer ce code à un bouton de formulaire et exécuter le formulaire. Dans ce cas, en cliquant sur le bouton, vous afficherez la boîte de dialogue d'alerte. Dans tous les cas, vous venez d'exécuter votre première ligne de code 4D ! +Or, you could attach this code to a button in a form and execute the form, in which case clicking on the button would display the alert dialog box. In any cases, you have just executed your first line of 4D code! -## Assigner des valeurs +## Assigning Values -Vous pouvez donner des valeurs aux variables, aux champs, aux éléments de tableaux et/ou récupérer leur valeur. Donner une valeur à une variable s’appelle assigner une valeur (ou affecter une valeur) et s’effectue à l’aide de l’opérateur d’assignation (:=). L’opérateur d’assignation est également utilisé pour assigner des valeurs aux champs ou aux éléments de tableaux. +Data can be put into and copied out of variables, fields, array elements... Putting data into a variable is called assigning the data to the variable and is done with the assignment operator (:=). The assignment operator is also used to assign data to fields or array elements. ```4d -$MyNumber:=3 //assigne 3 à la variable MyNumber -[Products]Size:=$MyNumber //assigne la variable MyNumber au champ [Products]Size -arrDays{2}:="Mardi" //assigne la chaîne "Mardi" au 2ème élément arrDays -MyVar:=Length("Acme") //assigne le résultat de la fonction (4) à MyVar -$myDate:=!2018/01/21! //assigne une date littérale -$myHour:=?08:12:55? //assigne une heure littérale +$MyNumber:=3 //assigns 3 to MyNumber variable +[Products]Size:=$MyNumber //assigns MyNumber variable to [Products]Size field +arrDays{2}:="Tuesday" //assigns "Tuesday" string to the 2nd arrDays element +MyVar:=Length("Acme") //assigns the result of the function (4) to MyVar +$myDate:=!2018/01/21! //assigns a date literal +$myHour:=?08:12:55? //assigns a time literal ``` -Vous devez impérativement distinguer l'opérateur d'affectation := des autres opérateurs. Plutôt que de combiner des expressions dans une nouvelle expression, l'opérateur d'affectation copie la valeur de l'expression à droite de l'opérateur d'affectation dans la variable ou le champ situé à gauche de l'opérateur. +You MUST distinguish the assignment operator := from the other operators. Rather than combining expressions into a new one, the assignment operator copies the value of the expression to the right of the assignment operator into the variable or field to the left of the operator. -**Important :** Ne confondez pas l’opérateur d’assignation (:=) avec le signe égal (=). Un opérateur d'affectation différent (et non pas =) a été choisi délibérément pour éviter les problèmes et la confusion qui surviennent souvent avec == ou === dans d'autres langages de programmation. De telles erreurs sont souvent difficiles à reconnaître pour le compilateur et conduisent à un dépannage fastidieux. +**Important:** Do NOT confuse the assignment operator := with the equality comparison operator =. A different assignment operator (and not =) was deliberately chosen to avoid issues and confusion which often occur with == or === in other programming languages. Such errors are often difficult to recognize by the compiler and lead to time-consuming troubleshooting. ## Variables -Le langage 4D est fortement typé, bien qu'une certaine flexibilité soit autorisée dans de nombreux cas. You create a typed variable using the `var` keyword. Par exemple, pour créer une variable du type date, vous pouvez écrire : +The 4D language is strongly typed, although some flexibility is allowed in many cases. You create a typed variable using the `var` keyword. For example, to create a variable of the date type, you can write: ```4d var MyDate : Date @@ -50,23 +50,23 @@ var myPerson : cs.Person ``` -Even if it is usually not recommended, you can declare variables simply by using them; you do not necessarily need to formally define them. Par exemple, si vous voulez créer une variable qui contient la date du jour plus 30 jours, il vous suffit d’écrire dans 4D : +Even if it is usually not recommended, you can declare variables simply by using them; you do not necessarily need to formally define them. For example, if you want a variable that will hold the current date plus 30 days, you can write: ```4d MyOtherDate:=Current date+30 ``` -La ligne de code indique "MyOtherDate obtient la date actuelle plus 30 jours." This line declares the variable, assigns it with both the (temporary) date type and a content. A variable declared by assignment is interpreted as typeless, that is, it can be assigned with other types in other lines and then changes the type dynamically. A variable typed with `var` cannot change the type. In [compiled mode](interpreted.md) however, the type can never be changed, regardless of how the variable was declared. +The line of code reads “MyOtherDate gets the current date plus 30 days.” This line declares the variable, assigns it with both the (temporary) date type and a content. A variable declared by assignment is interpreted as typeless, that is, it can be assigned with other types in other lines and then changes the type dynamically. A variable typed with `var` cannot change the type. In [compiled mode](interpreted.md) however, the type can never be changed, regardless of how the variable was declared. -## Commandes +## Commands -Les commandes 4D sont des méthodes intégrées qui permettent d'effectuer une action. Toutes les commandes 4D, telles que `CREATE RECORD` ou `ALERT`, sont décrites dans le _Manuel Langage de 4D_, et sont regroupées par thème. Les commandes sont souvent utilisées avec des paramètres qui sont passés entre parenthèses () et séparés par des points-virgules (;). Exemple : +4D commands are built-in methods to perform an action. All 4D commands, such as `CREATE RECORD`, or `ALERT`, are described in the _4D Language Reference_ manual, grouped by theme. Commands are often used with parameters, which are passed in brackets () and separated by semicolons (;). Example: ```4d -COPY DOCUMENT("dossier1\\nom1";"dossier2\\" ; "nouveau") +COPY DOCUMENT("folder1\\name1";"folder2\\" ; "new") ``` -Certaines commandes sont reliées à des collections ou à des objets, auquel cas ce sont des méthodes nommées qui sont utilisées à l'aide de la notation en point. Par exemple: +Some commands are attached to collections or objects, in which case they are named methods and are used using the dot notation. For example: ```4d $c:=New collection(1;2;3;4;5) @@ -75,144 +75,143 @@ $nc:=$c.slice(0;3) //$nc=[1,2,3] $lastEmployee:=$employee.last() ``` -Vous pouvez utiliser des plug-ins ou des composants 4D qui ajoutent de nouvelles commandes à votre environnement de développement 4D. +You can use 4D plug-ins or 4D components that add new commands to your 4D development environment. -Il existe de nombreux plug-ins proposés par la communauté des utilisateurs de 4D ou des développeurs tiers. Par exemple, en utilisant les pages [4d-plugin-pdf-pages](https://github.com/miyako/4d-plugin-pdf-pages) sur macOS : +There are many plug-ins proposed by the 4D user community or 3rd-party developers on the market. For example, using the [4d-plugin-pdf-pages](https://github.com/miyako/4d-plugin-pdf-pages) on macOS: ```4d PDF REMOVE PAGE(path;page) ``` -4D SVG est un exemple de composant utilitaire qui augmente les capacités de votre application : +4D SVG is an example of a utility component extending the capabilities of your application: ```4d -//faire un dessin +//drawing a picture svgRef:=SVG_New objectRef:=SVG_New_arc(svgRef;100;100;90;90;180) ``` -4D SVG est inclus dans 4D. +4D SVG is included in 4D. -## Constantes +## Constants -4D propose un large ensemble de constantes prédéfinies, dont les valeurs sont accessibles par un nom. Par exemple, `XML DATA` est une constante (valeur 6). Par défaut, les constantes prédéfinies sont soulignées dans l'éditeur de méthodes 4D. Elles permettent d'écrire un code plus lisible. +4D proposes an extensed set of predefined constants, whose values are accessible by name. For example, `Read Mode` is a constant (value 2). Predefined constants appear underlined by default in the 4D Method editor. They allow writing more readable code. ```4d -vRef:=Open document("PassFile";"TEXTE";Read Mode) // ouvrir le doc en mode lecture seule +vRef:=Open document("PassFile";"TEXT";Read Mode) // open doc in read only mode ``` ## Méthodes -4D propose un grand nombre de méthodes (ou de commandes) intégrées, mais vous permet également de créer vos propres **méthodes de projet**. Les méthodes de projet sont des méthodes définies par l'utilisateur qui contiennent des commandes, des opérateurs et d'autres parties du langage. Les méthodes projet sont des méthodes génériques, mais il existe d'autres types de méthodes : les méthodes objet, les méthodes formulaire, les méthodes table (Triggers) et les méthodes base. +4D provides a large number of built-in methods (or commands) but also lets you can create your own **project methods**. Project methods are user-defined methods that contain commands, operators, and other parts of the language. Project methods are generic methods, but there are other kinds of methods: Object methods, Form methods, Table methods (Triggers), and Database methods. -Une méthode est composée de plusieurs lignes d’instructions. Une ligne d’instructions effectue une action. Cette ligne d’instruction peut être simple ou complexe. +A method is composed of statements; each statement consists of one line in the method. A statement performs an action, and may be simple or complex. -Par exemple, la ligne de code suivante est une instruction qui affichera une boîte de dialogue de confirmation : +For example, the following line is a statement that will display a confirmation dialog box: ```4d -CONFIRM("Souhaitez-vous vraiment clore ce compte ?";"Oui";"Non") +CONFIRM("Do you really want to close this account?";"Yes";"No") ``` -Une méthode contient également des testes et des boucles qui gèrent le flux d'exécution. Les méthodes 4D prennent en charge les structures `If...Else...End if` et `Case of...Else...End case` ainsi que les boucles : `While...End while`, `Repeat...Until`, `For...End for`, et `For each...End for each`: +A method also contains tests and loops that control the flow of the execution. 4D methods support `If...Else...End if` and `Case of...Else...End case` branching structures as well as looping structures: `While...End while`, `Repeat...Until`, `For...End for`, and `For each...End for each`: -L'exemple suivant permet d'examiner chaque caractère du texte vtSomeText : +The following example goes through all the characters of the text vtSomeText: ```4d For($vlChar;1;Length(vtSomeText)) - //Faire quelque chose avec le caractère s'il s'agit d'une tabulation + //Do something with the character if it is a TAB If(Character code(vtSomeText[[$vlChar]])=Tab) //... End if End for ``` -Une méthode projet peut en appeler une autre avec ou sans les paramètres (arguments). Les paramètres sont passés à la méthode entre parenthèses, à la suite du nom de la méthode. Chaque paramètre est séparé par des points virgule (;). Les paramètres sont passés à la méthode appelée en tant que variables locales numérotées séquentiellement : $1, $2,…, $n. Une méthode peut retourner une seule valeur dans le paramètre $0. Lorsque vous appelez une méthode, vous saisissez simplement son nom : +A project method can call another project method with or without parameters (arguments). The parameters are passed to the method in parentheses, following the name of the method. Each parameter is separated from the next by a semicolon (;). The parameters are available within the called method as consecutively numbered local variables: $1, $2,…, $n. A method can return a single value in the $0 parameter. When you call a method, you just type its name: ```4d $myText:="hello" -$myText:=Do_Something($myText) //Appelle la méthode Do_Something +$myText:=Do_Something($myText) //Call the Do_Something method ALERT($myText) //"HELLO" - //Voici le code de la méthode Do_Something + //Here the code of the method Do_Something $0:=Uppercase($1) ``` -## Types de données +## Data Types -De nombreux types de données peuvent être manipulés via le langage 4D. Il existe des types de données élémentaires (chaîne, numérique, date, heure, booléen, image, pointeur, tableau), ainsi que des types de données composites (BLOBs, objets, collections). +In the language, the various types of data that can be handled are referred to as data types. There are basic data types (string, numeric, date, time, Boolean, picture, pointers, arrays), and also composite data types (BLOBs, objects, collections). -A noter que les données de type chaîne et numérique peuvent être associées à plusieurs types de champ. Lorsque des données sont placées dans un champ, le langage les convertit automatiquement dans le type du champ. Par exemple, si un champ de type entier est utilisé, les valeurs qu’il contient sont automatiquement traitées en tant que numériques. En d’autres termes, vous n’avez pas à vous préoccuper du mélange de champs de types semblables lorsque vous programmez avec 4D ; le langage le gère pour vous. +Note that string and numeric data types can be associated with more than one type of field. When data is put into a field, the language automatically converts the data to the correct type for the field. For example, if an integer field is used, its data is automatically treated as numeric. In other words, you need not worry about mixing similar field types when using the language; it will manage them for you. -Cependant, il est important, lorsque vous utilisez le langage, de ne pas mélanger les différents types de données. Tout comme il est absurde de stocker la valeur “ABC” dans un champ de type Date, il est absurde de donner la valeur “ABC” à une variable utilisée pour des dates. Dans la plupart des cas, 4D est très tolérant et tentera d’utiliser de manière logique ce que vous faites. Par exemple, si vous additionnez un nombre x et une date, 4D déduira que vous voulez ajouter x jours à la date, mais si vous tentez d’ajouter une chaîne à une date, 4D vous préviendra que cette opération est impossible. +However, when using the language it is important that you do not mix different data types. In the same way that it makes no sense to store “ABC” in a Date field, it makes no sense to put “ABC” in a variable used for dates. In most cases, 4D is very tolerant and will try to make sense of what you are doing. For example, if you add a number to a date, 4D will assume that you want to add that number of days to the date, but if you try to add a string to a date, 4D will tell you that the operation cannot work. -Certains cas nécessitent que vous stockiez des données dans un type et que vous les utilisiez dans un autre. Le langage contient un ensemble complet de commandes vous permettant de convertir des types de données en d’autres types. Par exemple, si vous voulez créer un numéro de matricule commençant par des chiffres et se terminant par des lettres, telles que "abc", vous pouvez écrire : vous pouvez écrire : +There are cases in which you need to store data as one type and use it as another type. The language contains a full complement of commands that let you convert from one data type to another. For example, you may need to create a part number that starts with a number and ends with characters such as “abc”. In this case, you might write: ```4d -[Produits]Matricule:=String(Numéro)+"abc" +[Products]Part Number:=String(Number)+"abc" ``` -Si _Numéro_ vaut 17, _[Produits]Matricule_ prendra la valeur “17abc”. +If _Number_ is 17, then _[Products]Part Number_ will get the string “17abc”. -Les types de données sont détaillés dans la section [Types de données](Concepts/data-types.md). +The data types are fully defined in the section [Data Types](Concepts/data-types.md). -## Objets et collections +## Objects and collections -Vous pouvez gérer les objets et collections du langage 4D à l'aide de la notation objet pour lire ou définir leurs valeurs. Par exemple: +You can handle 4D language objects and collections using the object notation to get or to set their values. For example: ```4d employee.name:="Smith" ``` -Vous pouvez également utiliser de crochets, comme dans l'exemple ci-dessous : +You can also use a string within square brackets, for example: ```4d -$vName:=employee["nom"] +$vName:=employee["name"] ``` -Comme la valeur d'une propriété d'objet peut elle-même être un objet ou une collection, la notation objet requiert une séquence de symboles pour accéder aux sous-propriétés, par exemple : +Since an object property value can be an object or a collection, object notation accepts a sequence of symbols to access sub-properties, for example: ```4d $vAge:=employee.children[2].age ``` -A noter que si la valeur de la propriété de l'objet est un objet qui encapsule une méthode (une formule), vous devez ajouter des parenthèses () au nom de la propriété pour exécuter la méthode : +Note that if the object property value is an object that encapsulates a method (a formula), you need to add parenthesis () to the property name to execute the method: ``` $f:=New object $f.message:=New formula(ALERT("Hello world!")) -$f.message() //affiche "Hello world!" -$f.message() //affiche "Hello world!" +$f.message() //displays "Hello world!" ``` -Pour accéder à un élément de collection, vous devez passer le numéro de l'élément situé entre crochets : +To access a collection element, you have to pass the element number embedded in square brackets: ```4d C_COLLECTION(myColl) myColl:=New collection("A";"B";1;2;Current time) -myColl[3] //accède au 4ème élément de la collection +myColl[3] //access to 4th element of the collection ``` ## Classes -Le langage 4D prend en charge les classes d'objets. Ajoutez un fichier `myClass.4dm` dans le dossier Project/Sources/Classes d'un projet pour créer une classe nommée "myClass". +The 4D language supports object classes. Add a `myClass.4dm` file in the Project/Sources/Classes folder of a project to create a class named "myClass". -To instantiate an object of the class in a method, call the user class from the *class store* (`cs`) and use the `new()` member function. Vous pouvez passer des paramètres. +To instantiate an object of the class in a method, call the user class from the *class store* (`cs`) and use the `new()` member function. You can pass parameters. ```4d -// dans une méthode 4D +// in a 4D method $o:=cs.myClass.new() ``` -In the `myClass` class method, use the `Function ` statement to define the *methodName* class member method. Une méthode membre de classe peut recevoir et retourner des paramètres comme n'importe quelle méthode, et utiliser `This` comme instance d'objet. +In the `myClass` class method, use the `Function ` statement to define the *methodName* class member method. A class member method can receive and return parameters like any method, and use `This` as the object instance. ```4d -// dans le fichier myClass.4dm -Fonction bonjour - C_TEXT (0 $) - $0: = "Hello" + This.who +//in the myClass.4dm file +Function hello + C_TEXT($0) + $0:="Hello "+This.who ``` -Pour exécuter une méthode membre de classe, utilisez simplement l'opérateur `()` sur la méthode membre de l'instance d'objet. +To execute a class member method, just use the `()` operator on the member method of the object instance. ```4d $o:=cs.myClass.new() @@ -232,7 +231,7 @@ This.width:=$2 This.name:="Rectangle" ``` -A class can extend another class by using `Class extends `. Superclasses can be called using the `Super` command. Par exemple: +A class can extend another class by using `Class extends `. Superclasses can be called using the `Super` command. For example: ```4d //in the Square.4dm file @@ -249,141 +248,141 @@ This.name:="Square" ``` -## Opérateurs -Lorsque vous programmez avec 4D, il est rare que vous ayez simplement besoin de données “brutes”. Le plus souvent, il sera nécessaire de traiter ces données d'une manière ou d'une autre. Vous effectuez ces calculs avec des opérateurs. Les opérateurs, en général, prennent deux valeurs et effectuent avec elles une opération dont le résultat est une troisième valeur. Vous connaissez déjà la plupart des opérateurs. Par exemple, 1 + 2 utilise l’opérateur d’addition (ou signe plus) pour faire la somme de deux nombres, et le résultat est 3. Le tableau ci-dessous présente quelques opérateurs courants : +## Operators +When you use the language, it is rare that you will simply want a piece of data. It is more likely that you will want to do something to or with that data. You perform such calculations with operators. Operators, in general, take two pieces of data and perform an operation on them that results in a new piece of data. You are already familiar with many operators. For example, 1 + 2 uses the addition (or plus sign) operator to add two numbers together, and the result is 3. This table shows some familiar numeric operators: -| Opérateur | Opération | Exemple | -| --------- | -------------- | --------- | -| + | Addition | 1 +2 = 3 | -| – | Soustraction | 3 - 2 = 1 | -| * | Multiplication | 2 * 3 = 6 | -| / | Division | 6 / 2 = 3 | +| Operator | Operation | Example | +| -------- | -------------- | ------------------ | +| + | Addition | 1 + 2 results in 3 | +| – | Subtraction | 3 – 2 results in 1 | +| * | Multiplication | 2 * 3 results in 6 | +| / | Division | 6 / 2 results in 3 | -Les opérateurs numériques ne représentent qu’un seul des différents types d’opérateurs disponibles. Comme 4D traite de multiples types de données, tels que des nombres, des dates ou des images, vous disposez d’opérateurs particuliers effectuant des opérations sur ces données. +Numeric operators are just one type of operator available to you. 4D supports many different types of data, such as numbers, text, dates, and pictures, so there are operators that perform operations on these different data types. -Souvent, les mêmes symboles sont utilisés pour des opérations différentes, en fonction du type de données traitées. Par exemple, le signe (+) peut effectuer diverses opérations, comme le montre le tableau suivant : +The same symbols are often used for different operations, depending on the data type. For example, the plus sign (+) performs different operations with different data: -| Type de données | Opération | Exemple | -| ----------------- | ---------------- | --------------------------------------------------------------------------------------------------- | -| Nombre | Addition | 1 + 2 ajoute les nombres, le résultat est 3 | -| Chaine | Concaténation | “Bonjour” + “à tous” concatène (met bout à bout) les chaînes, le résultat est “Bonjour à tous” | -| Date et Numérique | Addition de date | !1989-01-01! + 20 ajoute 20 jours à la date 1 janvier 1989, le résultat est la date 21 janvier 1989 | +| Data Type | Operation | Example | +| --------------- | ------------- | ---------------------------------------------------------------------------------------------------- | +| Number | Addition | 1 + 2 adds the numbers and results in 3 | +| Chaine | Concatenation | “Hello ” + “there” concatenates (joins together) the strings and results in “Hello there” | +| Date and Number | Date addition | !1989-01-01! + 20 adds 20 days to the date January 1, 1989, and results in the date January 21, 1989 | ## Expressions -Pour parler simplement, les expressions retournent une valeur. En fait, lorsque vous programmez avec 4D, vous utilisez systématiquement des expressions et avez tendance à les manipuler uniquement à travers la valeur qu’elles représentent. Les expressions sont aussi appelées formules. - -Les expressions peuvent être constituées de presque tous les éléments du langage : commandes, opérateurs, variables, champs, propriétés d'objets et éléments de collection. Vous utilisez des expressions pour écrire des lignes de code, qui sont à leur tour utilisées pour construire des méthodes. Des expressions sont employées à chaque fois que le langage 4D a besoin de connaître la valeur d’une donnée. - -Les expressions sont rarement «autonomes». Il existe plusieurs endroits dans 4D où une expression peut être utilisée seule. Par exemple : - -- Editeur de formule (apply formula, query with formula, order by formula) -- La commande `EXECUTE FORMULA` -- La liste de propriétés, où une expression peut être utilisée en tant que source de données pour la plupart des widgets -- Dans la fenêtre du Débogueur où la valeur des expressions peut être évaluée -- Dans l’éditeur d’états semi-automatiques en tant que formule dans une colonne - - -### Types d’expressions -Vous vous référez à une expression via le type de données qu’elle retourne. Il existe plusieurs types d’expressions : Il existe plusieurs types d’expressions : Le tableau suivant fournit des exemples de chaque type d'expression. - -| Expression | Type | Description | -| ----------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| “Bonjour” | Chaine | Le mot Bonjour est une constante chaîne, signalée par les guillemets. | -| “Bonjour ” + “à tous” | Chaine | Deux chaînes, “Bonjour ” et “à tous”, sont mises bout à bout (concaténées) à l'aide de l'opérateur de concaténation de chaînes (+). La chaîne “Bonjour à tous” est retournée. | -| “Mr. ” + [Personnes]Nom | Chaine | Deux chaînes sont concaténées : la chaîne "Mr." et la valeur courante du champ Nom dans la table Personnes. Si le champ contient “Dupont”, l'expression retourne “M. Dupont”. | -| Uppercase("smith") | Chaine | Cette expression utilise `Uppercase`, une commande du langage, pour convertir la chaîne "dupont" en majuscules. Elle retourne “DUPONT”. | -| 4 | Nombre | C'est une constante numérique, 4. | -| 4 * 2 | Nombre | Deux nombres, 4 et 2, sont multipliés à l'aide de l'opérateur de multiplication (*). Le résultat est le nombre 8. | -| MonBouton | Nombre | C'est le nom d'un bouton. Il retourne la valeur courante du bouton : 1 s'il y a eu un clic sur le bouton, 0 sinon. | -| !1997-01-25! | Date | C'est une constante date pour la date 25/01/97 (25 janvier 1997). | -| Current date+ 30 | Date | C'est une expression de type Date qui utilise la commande `Current date` pour récupérer la date courante. Elle ajoute 30 jours à la date d'aujourd'hui et retourne la nouvelle date. | -| ?8:05:30? | Heure | C'est une constante heure qui représente 8 heures, 5 minutes, et 30 secondes. | -| ?2:03:04? + ?1:02:03? | Heure | Cette expression ajoute une heure à une autre et retourne l'heure 3:05:07. | -| Vrai | Booléen | Cette commande retourne la valeur booléenne TRUE. | -| 10 # 20 | Booléen | C'est une comparaison logique entre deux nombres. Le symbole (#) signifie “est différent de”. Comme 10 “est différent de” 20, l'expression retourne TRUE. | -| “ABC” = “XYZ” | Booléen | C'est une comparaison logique entre deux chaînes. Elles sont différentes, donc l'expression retourne FALSE. | -| MonImage + 50 | Image | Cette expression considère l'image placée dans MonImage, la déplace de 50 pixels vers la droite, et retourne l'image résultante. | -| ->[Personnes]Nom | Pointeur | Cette expression retourne un pointeur vers le champ [Amis]Nom. | -| Table(1) | Pointeur | C'est une commande qui retourne un pointeur vers la première table. | -| JSON Parse (MaChaine) | Objet | C'est une commande qui retourne MaChaine sous forme d'objet (si format adéquat) | -| JSON Parse (MonTabJSON) | Collection | C'est une commande qui retourne MonTabJSON sous forme de collection (si format adéquat) | -| Form.pageNumber | Propriété objet | Une propriété objet est une expression qui peut être de tout type | -| 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 - -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 à droite d'une assignation. Par exemple: +Simply put, expressions return a value. In fact, when using the 4D language, you use expressions all the time and tend to think of them only in terms of the value they represent. Expressions are also sometimes referred to as formulas. + +Expressions are made up of almost all the other parts of the language: commands, operators, variables, fields, object properties, and collection elements. You use expressions to build statements (lines of code), which in turn are used to build methods. The language uses expressions wherever it needs a piece of data. + +Expressions rarely “stand alone.” There are several places in 4D where an expression can be used by itself. It includes: + +- Formula editor (apply formula, query with formula, order by formula) +- The `EXECUTE FORMULA` command +- The Property list, where an expression can be used as a data source for most of widgets +- Debugger where the value of expressions can be checked +- Quick Report editor as a formula for a column + + +### Expression types +You refer to an expression by the data type it returns. There are several expression types. The following table gives examples of each type of expression. + +| Expression | Type | Description | +| ------------------------ | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| “Hello” | Chaine | The word Hello is a string constant, indicated by the double quotation marks. | +| “Hello ” + “there” | Chaine | Two strings, “Hello ” and “there”, are added together (concatenated) with the string concatenation operator (+). The string “Hello there” is returned. | +| “Mr. ” + [People]Name | Chaine | Two strings are concatenated: the string “Mr. ” and the current value of the Name field in the People table. If the field contains “Smith”, the expression returns “Mr. Smith”. | +| Uppercase("smith") | Chaine | This expression uses `Uppercase`, a command from the language, to convert the string “smith” to uppercase. It returns “SMITH”. | +| 4 | Number | This is a number constant, 4. | +| 4 * 2 | Number | Two numbers, 4 and 2, are multiplied using the multiplication operator (*). The result is the number 8. | +| myButton | Number | This is a variable associated to a button. It returns the current value of the button: 1 if it was clicked, 0 if not. | +| !1997-01-25! | Date | This is a date constant for the date 1/25/97 (January 25, 1997). | +| Current date+ 30 | Date | This is a date expression that uses the `Current date` command to get today’s date. It adds 30 days to today’s date and returns the new date. | +| ?8:05:30? | Heure | This is a time constant that represents 8 hours, 5 minutes, and 30 seconds. | +| ?2:03:04? + ?1:02:03? | Heure | This expression adds two times together and returns the time 3:05:07. | +| True | Booléen | This command returns the Boolean value TRUE. | +| 10 # 20 | Booléen | This is a logical comparison between two numbers. The number sign (#) means “is not equal to”. Since 10 “is not equal to” 20, the expression returns TRUE. | +| “ABC” = “XYZ” | Booléen | This is a logical comparison between two strings. They are not equal, so the expression returns FALSE. | +| My Picture + 50 | Image | This expression takes the picture in My Picture, moves it 50 pixels to the right, and returns the resulting picture. | +| ->[People]Name | Pointeur | This expression returns a pointer to the field called [People]Name. | +| Table (1) | Pointeur | This is a command that returns a pointer to the first table. | +| JSON Parse (MyString) | Objet | This is a command that returns MyString as an object (if proper format) | +| JSON Parse (MyJSONArray) | Collection | This is a command that returns MyJSONArray as a collection (if proper format) | +| Form.pageNumber | Object property | An object property is an expression that can be of any supported type | +| 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 + +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 right side of an assignation. For example: ```4d -//La variable $myVar est assignable, vous pouvez écrire : -$myVar:="Hello" //assigner "Hello" à myVar -//Form.pageNumber est assignable, vous pouvez écrire : -Form.pageNumber:=10 //assigne 10 à Form.pageNumber -//Form.pageTotal-Form.pageNumber n'est pas assignable : -Form.pageTotal- Form.pageNumber:=10 //erreur, non assignable +//$myVar variable is assignable, you can write: +$myVar:="Hello" //assign "Hello" to myVar +//Form.pageNumber is assignable, you can write: +Form.pageNumber:=10 //assign 10 to Form.pageNumber +//Form.pageTotal-Form.pageNumber is not assignable: +Form.pageTotal- Form.pageNumber:=10 //error, non-assignable ``` -En général, les expressions qui utilisent un opérateur ne sont pas assignables. Par exemple, `[Personne] Prénom " " +[Personne]Nom` n'est pas assignable. +In general, expressions that use an operator are non-assignable. For example, `[Person]FirstName+" "+[Person]LastName` is not assignable. -## Pointeurs +## Pointers -Le langage 4D fournit une mise en oeuvre avancée des pointeurs, pour vous permettre d'écrire un code puissant et modulaire. Vous pouvez utiliser des pointeurs pour référencer des tables, des champs, des variables, des tableaux et des éléments de tableaux. +The 4D language provides an advanced implementation of pointers, that allow writing powerful and modular code. You can use pointers to reference tables, fields, variables, arrays, and array elements. -Un pointeur sur un élément est créé en ajoutant un symbole "->" avant le nom de l'élément, et peut être déréférencé en ajoutant le symbole "->" après le nom du pointeur. +A pointer to an element is created by adding a "->" symbol before the element name, and can be dereferenced by adding the "->" symbol after the pointer name. ```4d -MaVar:="Bonjour" -MonPointeur->->MaVar -ALERT(MonPointeur->) +MyVar:="Hello" +MyPointer:=->MyVar +ALERT(MyPointer->) ``` -## Commentaires +## Comments -Les commentaires sont des lignes d’instructions inactives. Ces lignes ne sont pas interprétées par le programme (4D n’applique aucun style spécifique à l’intérieur de la ligne de commentaire) et ne sont pas exécutées lorsque la méthode est appelée. +Comments are inactive lines of code. These lines are not interpreted by the 4D language and are not executed when the code is called. -Voici deux manières de créer des commentaires : +There are two ways to create comments: -- `//` pour créer une ligne de commentaire -- `/*...*/` pour les blocs de commentaire en ligne et multi-lignes. +- `//` for single line comments +- `/*...*/` for inline or multiline commnents. -Les deux styles de commentaires peuvent être utilisés simultanément. +Both styles of comments can be used simultaneously. -#### Ligne de commentaire (//) +#### Single line comments (//) -Insérez les caractères `//` au début de la ligne ou après une instruction pour ajouter une ligne de commentaire. Exemple : +Insert `//` at the beginning of a line or after a statement to add a single line comment. Example: ```4d -//Ceci est un commentaire -For($vCounter;1;100) //Début de la boucle - //commentaire - //commentaire - //commentaire - End for +//This is a comment +For($vCounter;1;100) //Starting loop + //comment + //comment + //comment + End for ``` -#### Commentaires en ligne ou multi-lignes (/* */) +#### Inline or multiline comments (/* */) -Entourez le contenu avec des caractères `/*` ... `*/` pour créer des commentaires en ligne ou des blocs de commentaires multilignes. Les blocs de commentaire en ligne et multi-lignes commencent par `/*` et se terminent par `*/`. +Surround contents with `/*` ... `*/` characters to create inline comments or multiline comment blocks. Both inline and multiline comment blocks begin with `/*` and end with `*/`. -- Les **lignes de commentaires en ligne** - peuvent être insérées n'importe où dans le code. Exemple : +- **Inline comments** can be inserted anywhere in the code. Example: ```4d -For /* ligne de commentaire */ ($vCounter;1;100) +For /* inline comment */ ($vCounter;1;100) ... End for ``` -- Les **blocs de commentaires multi-lignes** permettent de commenter un nombre illimité de lignes. Les blocs de commentaires peuvent être imbriqués (ce qui est utile, étant donné que l'éditeur de code 4D prend en charge les blocs condensés). Exemple : +- **Multiline comment blocks** allows commenting an unlimited number of lines. Comment blocks can be nested (useful since the 4D code editor supports block collapsing). Example: ```4d For ($vCounter;1;100) /* -commentaires +comments /* - autres commentaires + other comments */ */ ... From 5ffcd58f862e62d60c5153d485d8bb274a0bc73d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:32 +0100 Subject: [PATCH 027/311] New translations parameters.md (French) --- .../translated_docs/fr/Concepts/parameters.md | 246 +++++++++--------- 1 file changed, 123 insertions(+), 123 deletions(-) diff --git a/website/translated_docs/fr/Concepts/parameters.md b/website/translated_docs/fr/Concepts/parameters.md index 3bc3d75a18e7ee..e3b7fc0f75b190 100644 --- a/website/translated_docs/fr/Concepts/parameters.md +++ b/website/translated_docs/fr/Concepts/parameters.md @@ -4,53 +4,53 @@ 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. +You'll often find that you need to pass data to your methods and functions. This is easily done with parameters. ## Aperçu -**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 `ALERTE` : +**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: ```4d -ALERT("Bonjour") +ALERT("Hello") ``` -Les paramètres sont passés de la même manière aux méthodes ou aux fonctions de classe (class functions). Par exemple, si une fonction de classe nommée `getArea()` accepte deux paramètres, voilà) à quoi pourrait ressembler un appel à la fonction de classe : +Parameters are passed to methods or class functions in the same way. For example, if a class function named `getArea()` accepts two parameters, a call to the class function might look like this: ``` $area:=$o.getArea(50;100) ``` -Ou si la méthode `FAIRE QUELQUE CHOSE` accepte trois paramètres, l'appel à cette méthode pourrait être de la forme suivante : +Or, if a project method named `DO_SOMETHING` accepts three parameters, a call to the method might look like this: ```4d -FAIRE QUELQUE CHOSE(AvecCeci; EtCela; CommeCeci) +DO_SOMETHING($WithThis;$AndThat;$ThisWay) ``` -Les paramètres d'entrée sont séparés par des points-virgules (;). +The input parameters are separated by semicolons (;). -Les mêmes principes s'appliquent lorsque des méthodes sont exécutées via des commandes consacrées, comme par exemple : +The same principles are used when methods are executed through dedicated commands, for example: ```4d EXECUTE METHOD IN SUBFORM("Cal2";"SetCalendarDate";*;!05/05/20!) -//passez la date du !05/05/20! comme paramètre de SetCalendarDate -// dans le contexte d'un sous-formulaire +//pass the !05/05/20! date as parameter to the SetCalendarDate +//in the context of a subform ``` -Les données peuvent également être **retournées** à partir de méthodes et de fonctions de classe. Par exemple, la ligne d’instruction suivante utilise une commande intégrée, `Longueur`, qui retourne la longueur d’une chaîne. La valeur retournée par `Longueur` est placée dans une variable appelée *MaLongueur*. +Data can also be **returned** from methods and class functions. For example, the following line is a statement that uses the built-in command, `Length`, to return the length of a string. The statement puts the value returned by `Length` in a variable called *MyLength*. Here is the statement: ```4d -MaLongueur:=Length("Comment suis-je arrivé là ?") +MyLength:=Length("How did I get here?") ``` -Toute sous-routine peut retourner une valeur. Only one single output parameter can be declared per method or class function. +Any subroutine can return a value. Only one single output parameter can be declared per method or class function. -Les valeurs d'entrée et de sortie sont [évaluées](#values-or-references) au moment de l'appel et copiée dans les variables locales au sein de la fonction de classe ou de la méthode appelée. Two syntaxes are proposed to declare variable parameters in the called code: +Input and output values are [evaluated](#values-or-references) at the moment of the call and copied into local variables within the called class function or method. Two syntaxes are proposed to declare variable parameters in the called code: - [named variables](#named-parameters) (recommended in most cases) or - [sequentially numbered variables](#sequential-parameters). -> Both [named](#named-parameters) and [sequential](#sequential-parameters) variables syntaxes can be mixed with no restriction to declare parameters. Par exemple: +> Both [named](#named-parameters) and [sequential](#sequential-parameters) variables syntaxes can be mixed with no restriction to declare parameters. For example: > > ```4d Function add($x : Integer) @@ -61,14 +61,14 @@ Function add($x : Integer) -## Paramètres nommés +## Named parameters -Dans les méthodes et fonctions de classe qui sont appelées, les valeurs des paramètres sont assignées aux variables locales. You can declare parameters using a **parameter name** along with a **parameter type**, separated by colon. +Inside called methods or class functions, parameter values are assigned to local variables. You can declare parameters using a **parameter name** along with a **parameter type**, separated by colon. -- Pour les fonctions de classe, les paramètres sont déclarés avec le mot clé `Function`. -- Pour les méthodes (méthodes projet, méthodes objet formulaire, méthodes de base de données et les triggers), les paramètres sont déclarés à l'aide du mot clé `#DECLARE` saisi au début du code de la méthode. +- For class functions, parameters are declared along with the `Function` keyword. +- 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. -Voici quelques exemples : +Examples: ```4d Function getArea($width : Integer; $height : Integer) -> $area : Integer @@ -79,12 +79,12 @@ Function getArea($width : Integer; $height : Integer) -> $area : Integer ``` -Les règles suivantes s'appliquent : +The following rules apply: -- La ligne de déclaration doit être la première ligne de code de la méthode ou de la fonction, sinon une erreur est affichée (seuls les commentaires ou les sauts de ligne peuvent précéder la déclaration). +- The declaration line must be the first line of the method or function code, otherwise an error is displayed (only comments or line breaks can precede the declaration). - Parameter names must start with a `$` character and be compliant with [property naming rules](dt_object.md#object-property-identifiers). -- Plusieurs paramètres (et types) sont séparés par des points-virgules (;). -- Les syntaxes multilignes sont prises en charge (en utilisant le caractère "\\"). +- Multiple parameters (and types) are separated by semicolons (;). +- Multiline syntaxes are supported (using "\\" character). For example, when you call a `getArea()` function with two parameters: @@ -100,7 +100,7 @@ In the class function code, the value of each parameter is copied into the corre Function getArea($width : Integer; $height : Integer)-> $area : Integer $area:=$width*$height ``` -> Si le type n'est pas défini, le paramètre sera défini comme `Variant`. +> If the type is not defined, the parameter will be defined as `Variant`. All 4D method kinds support the `#DECLARE` keyword, including database methods. For example, in the `On Web Authentication` database method, you can declare named parameters: @@ -114,15 +114,15 @@ $entitySelection:=ds.User.query("login=:1"; $user) // Check hash password... ``` -### Valeur retournée +### Returned value -You declare the return parameter of a function by adding an arrow (->) and the parameter definition after the input parameter(s) list. Par exemple: +You declare the return parameter of a function by adding an arrow (->) and the parameter definition after the input parameter(s) list. For example: ```4d Function add($x : Variant; $y : Integer) -> $result : Integer ``` -You can also declare the return parameter only by adding `: type`, in which case it will automatically be available through `$0` ([see sequential syntax below](#returned-value-1)). Par exemple: +You can also declare the return parameter only by adding `: type`, in which case it will automatically be available through `$0` ([see sequential syntax below](#returned-value-1)). For example: ```4d Function add($x : Variant; $y : Integer): Integer @@ -130,9 +130,9 @@ Function add($x : Variant; $y : Integer): Integer ``` -### Type de données pris en charge +### Supported data types -With named parameters, you can use the same data types as those which are [supported by the `var` keyword](variables.md#using-the-var-keyword), including class objects. Par exemple: +With named parameters, you can use the same data types as those which are [supported by the `var` keyword](variables.md#using-the-var-keyword), including class objects. For example: ```4d Function saveToFile($entity : cs.ShapesEntity; $file : 4D.File) @@ -142,16 +142,16 @@ Function saveToFile($entity : cs.ShapesEntity; $file : 4D.File) -## Paramètres séquentiels +## Sequential parameters -As an alternative to [named parameters](#named-parameters) syntax, you can declare parameters using sequentially numbered variables: **$1**, **$2**, **$3**, and so on. La numérotation des variables locales représente l’ordre des paramètres. +As an alternative to [named parameters](#named-parameters) syntax, you can declare parameters using sequentially numbered variables: **$1**, **$2**, **$3**, and so on. The numbering of the local variables represents the order of the parameters. > Although this syntax is supported by class functions, it is recommended to use [named parameters](#named-parameters) syntax in this case. For example, when you call a `DO_SOMETHING` project method with three parameters: ```4d -FAIRE QUELQUE CHOSE(AvecCeci; EtCela; CommeCeci) +DO_SOMETHING($WithThis;$AndThat;$ThisWay) ``` In the method code, the value of each parameter is automatically copied into $1, $2, $3 variables: @@ -167,37 +167,37 @@ In the method code, the value of each parameter is automatically copied into $1, ``` -### Valeur retournée +### Returned value The value to be returned is automatically put into the local variable `$0`. -Par exemple, la méthode suivante, appelée `Uppercase4`, retourne une chaîne dont les quatre premiers caractères ont été passés en majuscules : +For example, the following method, called `Uppercase4`, returns a string with the first four characters of the string passed to it in uppercase: ```4d $0:=Uppercase(Substring($1;1;4))+Substring($1;5) ``` -Voici un exemple qui utilise la méthode Uppercase4 : +The following is an example that uses the Uppercase4 method: ```4d $NewPhrase:=Uppercase4("This is good.") ``` -Dans cet exemple, la variable *$NewPhrase* prend la valeur “THIS is good.” +In this example, the variable *$NewPhrase* gets “THIS is good.” -La valeur retournée, `$0`, est une variable locale à la sous-routine. Elle peut être utilisée en tant que telle à l'intérieur de la sous-routine. Par exemple, vous pouvez écrire : +The returned value, `$0`, is a local variable within the subroutine. It can be used as such within the subroutine. For example, you can write: ```4d -// Faire_quelque chose +// Do_something $0:=Uppercase($1) ALERT($0) ``` -Dans cet exemple, `$0` recevait d'abord la valeur de `$1`, puis était utilisée en tant que paramètre de la commande `ALERT`. Dans une sous-méthode, vous pouvez utiliser `$0` comme n'importe quelle autre variable locale. C'est 4D qui retourne sa valeur finale `$0` (sa valeur courante au moment où la sous-routine se termine) à la méthode appelée. +In this example, `$0` is first assigned the value of `$1`, then used as parameter to the `ALERT` command. Within the subroutine, you can use `$0` in the same way you would use any other local variable. It is 4D that returns the value of `$0` (as it is when the subroutine ends) to the called method. -### Type de données pris en charge +### Supported data types You can use any [expression](quick-tour.md#expression-types) as sequential parameter, except: @@ -206,13 +206,13 @@ You can use any [expression](quick-tour.md#expression-types) as sequential param Tables or array expressions can only be passed [as reference using a pointer](dt_pointer.md#pointers-as-parameters-to-methods). -### Indirections sur les paramètres +### Parameter indirection -Les méthodes projets 4D acceptent un grand nombre de paramètres de même type, commençant par la droite. Ce principe est appelé **l'indirection des paramètres**. L'utilisation de la commande `Count parameters` vous permet d'adresser ces paramètres avec la boucle `For...End for` ainsi que la syntaxe de l'indirection des paramètres. +4D project methods accept a variable number of parameters of the same type, starting from the right. This principle is called **parameter indirection**. Using the `Count parameters` command you can then address those parameters with a `For...End for` loop and the parameter indirection syntax. > Parameter indirection can only be used with the [sequential](#sequential-parameters) syntax. -Dans l'exemple qui suit, la méthode projet `ENVOYER PAQUET` accepte le paramètre de temps suivi d'un nombre de variables des paramètres de texte : +In the following example, the project method `SEND PACKETS` accepts a time parameter followed by a variable number of text parameters: ```4d //SEND PACKETS Project Method @@ -228,52 +228,52 @@ Dans l'exemple qui suit, la méthode projet `ENVOYER PAQUET` accepte le paramèt End for ``` -Pour une bonne gestion de cette indirection, il est important de respecter la convention suivante : si tous les paramètres ne sont pas adressés par indirection, ce qui est le cas le plus fréquent, il faut que les paramètres adressés par indirection soient passés en fin de liste. A l’intérieur de la méthode, l’adressage par indirection se fait sous la forme : ${$i}, $i étant une variable numérique. ${$i} est appelé **paramètre générique**. +Parameter indirection is best managed if you respect the following convention: if only some of the parameters are addressed by indirection, they should be passed after the others. Within the method, an indirection address is formatted: ${$i}, where $i is a numeric variable. ${$i} is called a **generic parameter**. -Illustrons notre propos par un exemple : écrivons une fonction qui prend des valeurs, fait leur somme et renvoie cette somme formatée suivant un format qui peut varier avec les valeurs. A chaque appel à cette méthode, le nombre de valeurs à additionner peut varier. Il faudra donc passer comme paramètre à notre méthode les valeurs, en nombre variable, et le format, exprimé sous forme d’une chaîne de caractères. +For example, consider a function that adds values and returns the sum formatted according to a format that is passed as a parameter. Each time this method is called, the number of values to be added may vary. We must pass the values as parameters to the method and the format in the form of a character string. The number of values can vary from call to call. -Un appel à cette fonction se fera de la façon suivante : +This function is called in the following manner: ```4d - Résultat:=LaSomme("##0,00";125,2;33,5;24) + Result:=MySum("##0.00";125,2;33,5;24) ``` -La méthode appelante récupérera dans ce cas la chaîne : 182,70, somme des nombres passés, formatée suivant le format spécifié. Les paramètres de la fonction doivent être passés dans un ordre précis : le format d’abord et ensuite les valeurs, dont le nombre peut varier d’un appel à l’autre. +In this case, the calling method will get the string “182.70”, which is the sum of the numbers, formatted as specified. The function's parameters must be passed in the correct order: first the format and then the values. -Examinons maintenant la fonction que nous appelons `LaSomme` : +Here is the function, named `MySum`: ```4d - $Somme:=0 - For($i;2;Nombre de paramètres) - $Somme:=$Somme+${$i} + $Sum:=0 + For($i;2;Count parameters) + $Sum:=$Sum+${$i} End for - $0:=String($Somme;$1) + $0:=String($Sum;$1) ``` -Cette fonction pourra être appelée de diverses manières : +This function can now be called in various ways: ```4d - Résultat:=LaSomme("##0,00";125,2;33,5;24) - Résultat:=LaSomme("000";1;18;4;23;17) + Result:=MySum("##0.00";125,2;33,5;24) + Result:=MySum("000";1;18;4;23;17) ``` -De même que pour les autres variables locales, la déclaration du paramètre générique par directive de compilation n’est pas obligatoire. Il est néanmoins recommandé d'éviter toute ambiguïté. Pour déclarer ces paramètres, utilisez une directive de compilateur à laquelle vous passez ${N} comme paramètre, où N est le premier paramètre générique. +As with other local variables, it is not mandatory to declare generic parameters by compiler directive. However, it is recommended to avoid any ambiguity. To declare these parameters, you use a compiler directive to which you pass ${N} as a parameter, where N specifies the first generic parameter. ```4d C_LONGINT(${4}) ``` -La commande ci-dessus signifie que tous les paramètres à partir du quatrième (inclus) seront adressés par indirection. Ils seront tous de type Entier long. Les types de $1, $2 et $3 pourront être quelconques. En revanche, si vous utilisez $2 par indirection, le type utilisé sera le type générique. Il sera donc de type Entier long, même si pour vous, par exemple, il était de type Réel. +This command means that starting with the fourth parameter (included), the method can receive a variable number of parameters of longint type. $1, $2 and $3 can be of any data type. However, if you use $2 by indirection, the data type used will be the generic type. Thus, it will be of the data type Longint, even if for you it was, for instance, of the data type Real. > The number in the declaration has to be a constant and not a variable. -### Déclaration des paramètres pour le mode compilé +### Declaring parameters for compiled mode Even if it is not mandatory in [interpreted mode](interpreted.md), you must declare each parameter in the called methods or functions to prevent any trouble. -When using the [named variable syntax](#named-parameters), parameters are automatically declared through the `#DECLARE` keyword or `Function` prototype. Par exemple: +When using the [named variable syntax](#named-parameters), parameters are automatically declared through the `#DECLARE` keyword or `Function` prototype. For example: ```4d Function add($x : Variant; $y : Integer)-> $result : Integer @@ -281,18 +281,18 @@ Function add($x : Variant; $y : Integer)-> $result : Integer ``` -When using the sequential variable syntax, you need to make sure all parameters are properly declared. Dans l'exemple suivant, la méthode projet `ajoutCapitale` accepte un paramètre texte et retourne un résultat texte : +When using the sequential variable syntax, you need to make sure all parameters are properly declared. In the following example, the `Capitalize` project method accepts a text parameter and returns a text result: ```4d - // Méthode projet ajoutCapitale - // ajoutCapitale ( Texte ) -> Texte - // ajoutCapitale( Chaîne source ) -> chaîne avec la première lettre capitale + // Capitalize Project Method + // Capitalize ( Text ) -> Text + // Capitalize ( Source string ) -> Capitalized string - C_TEXTE($0;$1) - $0:=Majusc(Sous chaine($1;1;1))+Minusc(Sous chaine($1;2)) + C_TEXT($0;$1) + $0:=Uppercase(Substring($1;1;1))+Lowercase(Substring($1;2)) ``` -L'utilisation de commandes telles que `Nouveau process` avec les méthodes process qui acceptent les paramètres nécessite également que les paramètres soient explicitement déclarés dans la méthode appelée. Par exemple: +Using commands such as `New process` with process methods that accept parameters also require that parameters are explicitely declared in the called method. For example: ```4d C_TEXT($string) @@ -302,7 +302,7 @@ C_OBJECT($obj) $idProc:=New process("foo_method";0;"foo_process";$string;$int;$obj) ``` -Ce code peut être exécuté en mode compilé, uniquement si "foo_method" déclare ses paramètres : +This code can be executed in compiled mode only if "foo_method" declares its parameters: ```4d //foo_method @@ -312,27 +312,27 @@ C_OBJECT($3) ... ``` -> En mode compilé, vous pouvez regrouper tous les paramètres de variables locales pour les méthodes projets dans un méthode spécifique avec un nom commençant par "Compiler". Dans cette méthode, vous pouvez prédéclarer les paramètres de chaque méthode, comme par exemple : +> For compiled mode, you can group all local variable parameters for project methods in a specific method with a name starting with "Compiler". Within this method, you can predeclare the parameters for each method, for example: ```4d // Compiler_method C_REAL(OneMethodAmongOthers;$1) ``` See [Interpreted and compiled modes](interpreted.md) page for more information. -La déclaration des paramètres est également obligatoire dans les contextes suivants (ces contextes ne prennent pas en charge les déclarations dans une méthode "Compiler") : +Parameter declaration is also mandatory in the following contexts (these contexts do not support declaration in a "Compiler" method): -- Méthodes base - Par exemple, la `méthode base Sur connexion Web` reçoit six paramètres, allant de $1 à $6, de type Texte. Au début de la méthode base, vous devez écrire (même si tous les paramètres ne sont pas utilisés) : +- Database methods - For example, the `On Web Connection Database Method` receives six parameters, $1 to $6, of the data type Text. At the beginning of the database method, you must write (even if all parameters are not used): ```4d -// Sur connexion Web +// On Web Connection C_TEXT($1;$2;$3;$4;$5;$6) ``` > You can also use [named parameters](#named-parameters) with the `#DECLARE` keyword. -- Triggers - Le paramètre $0 (Entier long), qui résulte d'un trigger, sera typé par le compilateur si le paramètre n'a pas été explicitement déclaré. Néanmoins, si vous souhaitez le déclarer, vous devez le faire dans le trigger lui-même. +- Triggers - The $0 parameter (Longint), which is the result of a trigger, will be typed by the compiler if the parameter has not been explicitly declared. Nevertheless, if you want to declare it, you must do so in the trigger itself. -- Objets formulaires qui acceptent l'événement formulaire `Sur glisser` - Le paramètre $0 (Entier long), qui résulte de l'événement formulaire `Sur glisser` est typé par le compilateur si le paramètre n'a pas été explicitement déclaré. Néanmoins, si vous souhaitez le déclarer, vous devez le faire dans la méthode projet. **Note :** Le compilateur n'initialise pas le paramètre $0. Ainsi, dès que vous utilisez l'événement formulaire `Sur glisser`, vous devez initialiser $0. Par exemple: +- Form objects that accept the `On Drag Over` form event - The $0 parameter (Longint), which is the result of the `On Drag Over` form event, is typed by the compiler if the parameter has not been explicitly declared. Nevertheless, if you want to declare it, you must do so in the object method. **Note:** The compiler does not initialize the $0 parameter. So, as soon as you use the `On Drag Over` form event, you must initialize $0. For example: ```4d C_LONGINT($0) @@ -349,11 +349,11 @@ C_TEXT($1;$2;$3;$4;$5;$6) -## Utilisation des propriétés d'objet comme paramètres nommés +## Using object properties as named parameters -L'utilisation d'objets en tant que paramètres vous permet de gérer des **paramètres nommés**. Ce style de programmation est simple, souple et facile à lire. +Using objects as parameters allow you to handle **named parameters**. This programming style is simple, flexible, and easy to read. -Par exemple, si vous utilisez la méthode `CreatePerson` : +For example, using the `CreatePerson` method: ```4d //CreatePerson @@ -363,7 +363,7 @@ Par exemple, si vous utilisez la méthode `CreatePerson` : ALERT(String($person.Age)) ``` -Dans la méthode `ChangeAge`, vous pouvez écrire : +In the `ChangeAge` method you can write: ```4d //ChangeAge @@ -373,12 +373,12 @@ Dans la méthode `ChangeAge`, vous pouvez écrire : ALERT($para.Name+" is "+String($para.Age)+" years old.") ``` -C'est un moyen puissant de définir des [paramètres optionnels](#optional-parameters) (voir ci-dessous également). Pour gérer les paramètres manquants, vous pouvez : -- vérifier si tous les paramètres attendus sont fournis en les comparant à la valeur `Null`, ou -- prédéfinir les valeurs des paramètres, ou -- les utiliser sous forme de valeurs vides. +This provides a powerful way to define [optional parameters](#optional-parameters) (see also below). To handle missing parameters, you can either: +- check if all expected parameters are provided by comparing them to the `Null` value, or +- preset parameter values, or +- use them as empty values. -Dans la méthode `ChangeAge` ci-dessus, les propriétés Age et Nom sont obligatoires et pourraient générer des erreurs si elles sont manquantes. Pour éviter cela, vous pouvez simplement écrire : +In the `ChangeAge` method above, both Age and Name properties are mandatory and would produce errors if they were missing. To avoid this case, you can just write: ```4d //ChangeAge @@ -387,9 +387,9 @@ Dans la méthode `ChangeAge` ci-dessus, les propriétés Age et Nom sont obligat $para.Age:=Num($para.Age)+10 ALERT(String($para.Name)+" is "+String($para.Age)+" years old.") ``` -Les deux paramètres sont alors optionnels. S'ils ne sont pas renseignés, le résultat sera "a 10 ans", mais aucune erreur ne sera générée. +Then both parameters are optional; if they are not filled, the result will be " is 10 years old", but no error will be generated. -Enfin, les paramètres nommés permettent de maintenir et de reproduire des applications en toutes simplicité et sécurité. Imaginez que vous réalisez, par la suite, qu'ajouter 10 ans n'est pas toujours approprié. Vous aurez besoin d'un autre paramètre pour définir le nombre d'années à ajouter. Vous pouvez écrire : +Finally, with named parameters, maintaining or refactoring applications is very simple and safe. Imagine you later realize that adding 10 years is not always appropriate. You need another parameter to set how many years to add. You write: ```4d $person:=New object("Name";"Smith";"Age";40;"toAdd";10) @@ -405,36 +405,36 @@ $para.Age:=Num($para.Age)+$para.toAdd ALERT(String($para.Name)+" is "+String($para.Age)+" years old.") ``` -Ici, toute la puissance réside dans le fait de ne pas avoir à changer votre code existant. Cela fonctionnera toujours dans l'ancienne version, mais le cas échéant, vous pouvez utiliser une autre valeur que 10 ans. +The power here is that you will not need to change your existing code. It will always work as in the previous version, but if necessary, you can use another value than 10 years. -Avec les variables nommées, n'importe quel paramètre peut être optionnel. Dans l'exemple ci-dessus, tous les paramètres sont optionnels et peuvent être donnés, dans n'importe quel ordre. +With named variables, any parameter can be optional. In the above example, all parameters are optional and anyone can be given, in any order. -## Variables d'entrée/de sortie +## Input/Output variables -Dans une sous-méthode, vous pouvez utiliser les paramètres $1, $2... comme n'importe quelle autre variable locale. Toutefois, dans le cas où vous utilisez des commandes qui modifient la valeur de la variable passée en paramètre (par exemple `Trouver dans champ`), les paramètres $1, $2, etc. ne peuvent pas être utilisés directement. Vous devez d'abord les recopier dans des variables locales standard (par exemple `$mavar:=$1`). +Within the subroutine, you can use the parameters $1, $2... in the same way you would use any other local variable. However, in the case where you use commands that modify the value of the variable passed as parameter (for example `Find in field`), the parameters $1, $2, and so on cannot be used directly. You must first copy them into standard local variables (for example: `$myvar:=$1`). -## Paramètres optionnels +## Optional parameters -Dans le manuel *Langage de 4D*, les caractères { } (accolades) indiquent des paramètres facultatifs. Par exemple, `ALERT (message{; okButtonTitle})` signifie que le paramètre *okButtonTitle* doit être omis lors de l'appel de la commande. Vous pouvez l'appeler comme suit : +In the *4D Language Reference* manual, the { } characters (braces) indicate optional parameters. For example, `ALERT (message{; okButtonTitle})` means that the *okButtonTitle* parameter may be omitted when calling the command. You can call it in the following ways: ```4d -ALERT("Etes*vous sûr?";"Oui, je le suis") //2 paramètres -ALERT("Temps écoulé") //1 paramètre +ALERT("Are you sure?";"Yes I am") //2 parameters +ALERT("Time is over") //1 parameter ``` -Les méthodes projet 4D acceptent également des paramètres optionnels, en commençant par la droite. Cependant, il est difficile de gérer les paramètres optionnels lorsque certains d'entre eux sont manquants dans la méthode appelée - cela ne devrait jamais générer d'erreur. Une bonne pratique consisterait à assigner des valeurs par défaut aux paramètres non utilisés. +4D project methods also accept such optional parameters, starting from the right. The issue with optional parameters is how to handle the case where some of them are missing in the called method - it should never produce an error. A good practice is to assign default values to unused parameters. -> Lorsque les paramètres sont nécessaires dans vos méthodes, vous pouvez également envisager des [propriétés d'objet comme paramètres nommés](#using-objects-properties-as-named-parameters) pour gérer plusieurs paramètres de manière flexible. +> When optional parameters are needed in your methods, you might also consider using [object properties as named parameters](#using-objects-properties-as-named-parameters) which provide a flexible way to handle variable numbers of parameters. -A l'aide de la commande `Count parameters` contenue dans la méthode appelée, vous pouvez détecter le nombre de paramètres et effectuer des opérations différentes en fonction de ce nombre. +Using the `Count parameters` command from within the called method, you can detect the actual number of parameters and perform different operations depending on what you have received. -L'exemple suivant affiche un message et peut insérer le texte dans un document sur disque ou dans une zone 4D Write Pro : +The following example displays a text message and can insert the text into a document on disk or in a 4D Write Pro area: ```4d // APPEND TEXT Project Method @@ -452,71 +452,71 @@ L'exemple suivant affiche un message et peut insérer le texte dans un document End if End if ``` -Une fois que cette méthode projet a été ajoutée à votre application, vous pouvez écrire : +After this project method has been added to your application, you can write: ```4d -APPEND TEXT(vtSomeText) //Affichera uniquement le message -APPEND TEXT(vtSomeText;$path) //Affiche le message et l'annexe au document dans $path -APPEND TEXT(vtSomeText;"";$wpArea) //Affiche le message et l'écrit dans $wpArea +APPEND TEXT(vtSomeText) //Will only display the message +APPEND TEXT(vtSomeText;$path) //Displays text message and appends it to document at $path +APPEND TEXT(vtSomeText;"";$wpArea) //Displays text message and writes it to $wpArea ``` -## Valeurs ou références +## Values or references -Lorsque vous passez un paramètre, 4D évalue toujours l'expression du paramètre dans le contexte de la méthode appelée et définit la**valeur résultante** sur les variables locales dans la fonction de classe ou la sous-routine. Les variables/paramètres locaux ne correspondent pas aux véritables champs, variables ou expressions passés par la méthode appelée; ils contiennent uniquement les valeurs qui n'ont pas été passées. Cette portée étant locale, si la valeur d'un paramètre est modifiée dans la sous-routine/fonction de classe, elle ne modifie pas la valeur dans la méthode appelée. Par exemple: +When you pass a parameter, 4D always evaluates the parameter expression in the context of the calling method and sets the **resulting value** to the local variables in the class function or subroutine. The local variables/parameters are not the actual fields, variables, or expressions passed by the calling method; they only contain the values that have been passed. Since its scope is local, if the value of a parameter is modified in the class function/subroutine, it does not change the value in the calling method. For example: ```4d - //Voici du code extrait de la méthode MY_METHOD + //Here is some code from the method MY_METHOD DO_SOMETHING([People]Name) //Let's say [People]Name value is "williams" ALERT([People]Name) - //Voici du code extrait de la méthode DO_SOMETHING + //Here is the code of the method DO_SOMETHING $1:=Uppercase($1) ALERT($1) ``` -La boîte de dialogue d'alerte affichée par `FAIRE QUELQUE CHOSE` contiendra "WILLIAM" et celle affichée par `MA METHODE` contiendra "william". La méthode a modifié localement la valeur du paramètre $1, mais cela n'affecte pas la valeur du champ `[Personnes]Nom` passé en paramètre par la méthode `MA METHODE`. +The alert box displayed by `DO_SOMETHING` will read "WILLIAMS" and the alert box displayed by `MY_METHOD` will read "williams". The method locally changed the value of the parameter $1, but this does not affect the value of the field `[People]Name` passed as parameter by the method `MY_METHOD`. -Si vous voulez réellement que la méthode `FAIRE QUELQUE CHOSE` modifie la valeur du champ, deux solutions s'offrent à vous : +There are two ways to make the method `DO_SOMETHING` change the value of the field: -1. Plutôt que de passer le champ à la méthode, vous lui passez un pointeur : +1. Rather than passing the field to the method, you pass a pointer to it, so you would write: ```4d - //Voici du code extrait de la méthode MY_METHOD + //Here is some code from the method MY_METHOD DO_SOMETHING(->[People]Name) //Let's say [People]Name value is "williams" ALERT([People]Last Name) - //Voici du code extrait de la méthode DO_SOMETHING + //Here the code of the method DO_SOMETHING $1->:=Uppercase($1->) ALERT($1->) ``` -Ici, le paramètre n'est pas le champ lui-même, mais un pointeur vers le champ. Ainsi, à l'intérieur de la méthode `FAIRE QUELQUE CHOSE`, $1 ne contient plus la valeur du champ mais un pointeur vers le champ. L'objet **référencé** par $1 ($1-> dans le code ci-dessus) est le champ lui-même. Par conséquent, la modification de l'objet référencé dépasse les limites de la sous-routine et le champ lui-même est affecté. Dans cet exemple, les deux boîtes de dialogue d'alerte afficheront "WILLIAM". +Here the parameter is not the field, but a pointer to it. Therefore, within the `DO SOMETHING` method, $1 is no longer the value of the field but a pointer to the field. The object **referenced** by $1 ($1-> in the code above) is the actual field. Consequently, changing the referenced object goes beyond the scope of the subroutine, and the actual field is affected. In this example, both alert boxes will read "WILLIAMS". -2. Plutôt que la méthode `FAIRE QUELQUE CHOSE` “fasse quelque chose”, vous pouvez la réécrire de manière à ce qu'elle retourne une valeur. +2. Rather than having the method `DO_SOMETHING` "doing something," you can rewrite the method so it returns a value. Thus you would write: ```4d - //Voici du code extrait de la méthode MY METHOD + //Here is some code from the method MY METHOD [People]Name:=DO_SOMETHING([People]Name) //Let's say [People]Name value is "williams" ALERT([People]Name) - //Voici du code extrait de la méthode DO SOMETHING + //Here the code of the method DO SOMETHING $0:=Uppercase($1) ALERT($0) ``` -Cette deuxième technique de renvoi d'une valeur par une sous-routine est appelée «utilisation d'une fonction». Ceci est décrit dans le paragraphe [Valeurs retournées](#returning-values). +This second technique of returning a value by a subroutine is called “using a function.” This is described in the [Returning values](#returning-values) paragraph. -### Cas particuliers : objets et collections +### Particular cases: objects and collections -Veillez à ce que les types de données d'Objet et Collection ne puissent être gérés que via une référence (c'est-à-dire un* pointeur* interne). +You need to pay attention to the fact that Object and Collection data types can only be handled through a reference (i.e. an internal *pointer*). -Par conséquent, lorsque vous utilisez des types de données comme paramètres, `$1, $2 ...` ne contiennent pas des *valeurs*, mais des *références*. La modification de la valeur des paramètres `$1, $2 ...` dans la sous-routine sera propagée à chaque fois que l'objet ou la collection source est utilisé(e). This is the same principle as for [pointers](dt_pointer.md#pointers-as-parameters-to-methods), except that `$1, $2...` parameters do not need to be dereferenced in the subroutine. +Consequently, when using such data types as parameters, `$1, $2...` do not contain *values* but *references*. Modifying the value of the `$1, $2...` parameters within the subroutine will be propagated wherever the source object or collection is used. This is the same principle as for [pointers](dt_pointer.md#pointers-as-parameters-to-methods), except that `$1, $2...` parameters do not need to be dereferenced in the subroutine. -Par exemple, considérons que la méthode `CreatePerson`, qui crée un objet et qui l'envoie comme paramètre : +For example, consider the `CreatePerson` method that creates an object and sends it as a parameter: ```4d //CreatePerson @@ -526,7 +526,7 @@ Par exemple, considérons que la méthode `CreatePerson`, qui crée un objet et ALERT(String($person.Age)) ``` -La méthode `ChangeAge` ajoute 10 à l'attribut Age de l'objet reçu +The `ChangeAge` method adds 10 to the Age attribute of the received object ```4d //ChangeAge @@ -535,8 +535,8 @@ La méthode `ChangeAge` ajoute 10 à l'attribut Age de l'objet reçu ALERT(String($person.Age)) ``` -Si vous exécutez la méthode `CreatePerson`, les deux messages d'alerte contiendront "50" car le même objet est traité par les deux méthodes. +When you execute the `CreatePerson` method, both alert boxes will read "50" since the same object reference is handled by both methods. -**4D Server :** Lorsque des paramètres sont passés entre des méthodes qui ne sont pas exécutées sur la même machine (lors de l'utilisation de l'option Exécuter sur serveur par exemple), il n'est pas possible d'utiliser des références. Dans ce cas, ce sont des copies des paramètres objet ou collection qui sont envoyées au lieu de références. +**4D Server:** When parameters are passed between methods that are not executed on the same machine (using for example the "Execute on Server" option), references are not usable. In these cases, copies of object and collection parameters are sent instead of references. From 6a3b2293633e5190f9963bdaaa7abad40432216f Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:34 +0100 Subject: [PATCH 028/311] New translations onDeleteAction.md (French) --- website/translated_docs/fr/Events/onDeleteAction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onDeleteAction.md b/website/translated_docs/fr/Events/onDeleteAction.md index ae16c780ff3d45..505ad869d88384 100644 --- a/website/translated_docs/fr/Events/onDeleteAction.md +++ b/website/translated_docs/fr/Events/onDeleteAction.md @@ -3,7 +3,7 @@ id: onDeleteAction title: Sur action suppression --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ----------------------------------------------------------------------------------------------- | ----------------------------------- | | 58 | [Hierarchical List](FormObjects/list_overview.md) - [List Box](FormObjects/listbox_overview.md) | The user attempts to delete an item | From a7eff14eb0384ed230063b1f86944f8a60312d66 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:36 +0100 Subject: [PATCH 029/311] New translations dt_number.md (French) --- .../translated_docs/fr/Concepts/dt_number.md | 184 +++++++++--------- 1 file changed, 92 insertions(+), 92 deletions(-) diff --git a/website/translated_docs/fr/Concepts/dt_number.md b/website/translated_docs/fr/Concepts/dt_number.md index fbc3d9fe16b6b3..55932e04b34aff 100644 --- a/website/translated_docs/fr/Concepts/dt_number.md +++ b/website/translated_docs/fr/Concepts/dt_number.md @@ -3,22 +3,22 @@ id: number title: Numérique (Réel, Entier, Entier long) --- -Numérique est un terme générique utilisé pour : +Number is a generic term that stands for: -- Les champs, variables ou expression de type Réel. Les nombres de type Réel sont compris dans l'intervalle ±1.7e±308 (13 chiffres significatifs). -- Les champs, variables ou expression de type Entier long. Les nombres de type Entier long (4 octets) sont compris dans l'intervalle -2^31..(2^31)-1. -- Les champs, variables ou expression de type Entier. Les nombres de type Entier (2 octets) sont compris dans l'intervalle -32 768..32 767. +- Real field, variable or expression. The range for the Real data type is ±1.7e±308 (13 significant digits). +- Long Integer field, variable or expression. The range for the Long Integer data type (4-byte Integer) is -2^31..(2^31)-1. +- Integer field, array or expression. The range for the Integer data type (2-byte Integer) is -32,768..32,767 (2^15..(2^15)-1). -**Note :** Lorsqu'elles sont utilisées dans le langage 4D, les valeurs des champs de type Entier sont automatiquement converties en Entier long. +**Note:** Integer field values are automatically converted in Long integers when used in the 4D Language. -Vous pouvez assigner tout nombre d'un type numérique à un nombre d'un autre type numérique, 4D effectue automatiquement la conversion, en tronquant ou en arrondissant les valeurs si nécessaire. Notez cependant que lorsqu'une valeur est située en-dehors de l'intervalle du type de destination, 4D ne pourra la convertir. Vous pouvez mélanger tous les types de numériques au sein d'une même expression. +You can assign any Number data type to another; 4D does the conversion, truncating or rounding if necessary. However, when values are out of range, the conversion will not return a valid value. You can mix Number data types in expressions. -**Note :** Dans ce manuel de référence du langage 4D, quel que soit le type précis des données, les paramètres de type Réel, Entier et Entier long dans les descriptions des commandes sont appelés numériques, sauf spécification explicite. +**Note:** In the 4D Language Reference manual, no matter the actual data type, the Real, Integer, and Long Integer parameters in command descriptions are denoted as number, except when marked otherwise. -## Constantes littérales numériques +## Number literals -Une constante littérale numérique s’écrit comme un nombre réel. Voici quelques exemples de constantes numériques : +A numeric literal constant is written as a real number. Here are some examples of numeric constants: ```4d 27 @@ -26,9 +26,9 @@ Une constante littérale numérique s’écrit comme un nombre réel. Voici quel 0.0076 ``` -> Le séparateur décimal est par défaut le point (.), quelle que soit la langue du système. Si vous avez coché l'option "Utiliser langage français et paramètres régionaux système" dans la Page Méthodes des Préférences, vous devez utiliser le séparateur défini dans votre système. +> The default decimal separator is a period (.), regardless of the system language. If you have checked the "Use regional system settings" option in the Methods Page of the Preferences, you must use the separator defined in your system. -Les nombres négatifs s’écrivent précédés du signe moins (-). Par exemple: +Negative numbers are specified with the minus sign (-). For example: ```4d -27 @@ -36,113 +36,113 @@ Les nombres négatifs s’écrivent précédés du signe moins (-). Par exemple: -0.0076 ``` -## Opérateurs sur les nombres - -| Opération | Syntaxe | Retourne | Expression | Valeur | -| ------------------- | ---------------- | -------- | ---------- | ------ | -| Addition | Nombre + Nombre | Nombre | 2 + 3 | 5 | -| Soustraction | Nombre - Nombre | Nombre | 3 – 2 | 1 | -| Multiplication | Number * Number | Nombre | 5 * 2 | 10 | -| Division | Number / Number | Nombre | 5 / 2 | 2.5 | -| Division entière | Nombre \ Nombre | Nombre | 5 \ 2 | 2 | -| Modulo | Nombre % Nombre | Nombre | 5 % 2 | 1 | -| Exponentiation | Nombre ^ Nombre | Nombre | 2 ^ 3 | 8 | -| Egalité | Nombre = Nombre | Booléen | 10 = 10 | Vrai | -| | | | 10 = 11 | Faux | -| Inégalité | Nombre # Nombre | Booléen | 10 #11 | Vrai | -| | | | 10 # 10 | Faux | -| Supérieur à | Nombre > Nombre | Booléen | 11 > 10 | Vrai | -| | | | 10 > 11 | Faux | -| Inférieur à | Nombre < Nombre | Booléen | 10 < 11 | Vrai | -| | | | 11 < 10 | Faux | -| Supérieur ou égal à | Nombre >= Nombre | Booléen | 11 >= 10 | Vrai | -| | | | 10 >= 11 | Faux | -| Inférieur ou égal à | Nombre <= Nombre | Booléen | 10 <= 11 | Vrai | -| | | | 11 <= 10 | Faux | - -L'opérateur modulo % divise le premier nombre par le second et retourne le reste de la division entière. Voici quelques exemples : - -- 10 % 2 retourne 0 car la division de 10 par 2 ne donne pas de reste. -- 10 % 3 retourne 1 car le reste est 1. -- 10,5 % 2 retourne 0 car le reste n'est pas un nombre entier. - -**ATTENTION :** -- L'opérateur modulo % retourne des valeurs significatives avec des nombres appartenant à la catégorie des entiers longs (de –2^31 à +2^31 moins 1). Pour calculer le modulo de nombres qui ne sont pas dans cet intervalle, utilisez la fonction `Modulo`. -- L'opérateur division entière \ retourne des valeurs significatives avec des nombres entiers uniquement. - -### Priorité - -L'ordre dans lequel une expression est évaluée s'appelle la priorité. 4D applique strictement une règle de priorité de gauche à droite. L'ordre algébrique n'est pas appliqué. Par exemple: +## Number operators + +| Operation | Syntax | Returns | Expression | Value | +| ------------------------ | ---------------- | ------- | ---------- | ----- | +| Addition | Number + Number | Number | 2 + 3 | 5 | +| 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 | +| Modulo | Number % Number | Number | 5 % 2 | 1 | +| Exponentiation | Number ^ Number | Number | 2 ^ 3 | 8 | +| Equality | Number = Number | Booléen | 10 = 10 | True | +| | | | 10 = 11 | False | +| Inequality | Number # Number | Booléen | 10 #11 | True | +| | | | 10 # 10 | False | +| Greater than | Number > Number | Booléen | 11 > 10 | True | +| | | | 10 > 11 | False | +| Less than | Number < Number | Booléen | 10 < 11 | True | +| | | | 11 < 10 | False | +| Greater than or equal to | Number >= Number | Booléen | 11 >= 10 | True | +| | | | 10 >= 11 | False | +| Less than or equal to | Number <= Number | Booléen | 10 <= 11 | True | +| | | | 11 <= 10 | False | + +The modulo operator % divides the first number by the second number and returns a whole number remainder. Here are some examples: + +- 10 % 2 returns 0 because 10 is evenly divided by 2. +- 10 % 3 returns 1 because the remainder is 1. +- 10.5 % 2 returns 0 because the remainder is not a whole number. + +**WARNING:** +- The modulo operator % returns significant values with numbers that are in the Long Integer range (from minus 2^31 to 2^31 minus one). To calculate the modulo with numbers outside of this range, use the `Mod` command. +- The longint division operator \ returns significant values with integer numbers only. + +### Precedence + +The order in which an expression is evaluated is called precedence. 4D has a strict left-to-right precedence, in which algebraic order is not observed. For example: ```4d 3+4*5 ``` -retourne 35 car l'expression est évaluée comme 3 + 4, qui donne 7, multiplié par 5, ce qui donne 35. +returns 35, because the expression is evaluated as 3 + 4, yielding 7, which is then multiplied by 5, with the final result of 35. -Les parenthèses doivent être utilisées pour forcer l'ordre de calcul en fonction de vos besoins. Par exemple: +To override the left-to-right precedence, you MUST use parentheses. For example: ```4d 3+(4*5) ``` -retourne 23 car l'expression (4 * 5) est évaluée en premier lieu. Le résultat (20) est alors ajouté à 3, ce qui donne le résultat final 23. +returns 23 because the expression (4 * 5) is evaluated first, because of the parentheses. The result is 20, which is then added to 3 for the final result of 23. -Des parenthèses peuvent être incluses dans d'autres parenthèses. Assurez-vous qu'il y ait une parenthèse fermante pour chaque parenthèse ouverte. Une parenthèse manquante ou placée à un mauvais endroit peut soit donner un résultat erroné, soit renvoyer une expression invalide. De plus, si vous avez l'intention de compiler vos applications, vous devez vous assurer d'une bonne utilisation des parenthèses. Le compilateur interprètera toute parenthèse manquante ou superflue comme une erreur de syntaxe. +Parentheses can be nested inside other sets of parentheses. Be sure that each left parenthesis has a matching right parenthesis to ensure proper evaluation of expressions. Lack of, or incorrect use of parentheses can cause unexpected results or invalid expressions. Furthermore, if you intend to compile your applications, you must have matching parentheses—the compiler detects a missing parenthesis as a syntax error. -## Opérateurs sur les bits +## Bitwise operators -Les opérateurs sur les bits s'appliquent à des expressions ou valeurs de type **Entier long**. +The bitwise operators operates on **Long Integer** expressions or values. -> Si vous passez une valeur de type Entier ou Réel à un opérateur sur les bits, 4D la convertit en Entier long avant de calculer le résultat de l'expression. +> If you pass an Integer or a Real value to a bitwise operator, 4D evaluates the value as a Long Integer value before calculating the expression that uses the bitwise operator. -Lorsque vous employez des opérateurs sur les bits, vous devez considérer une valeur de type Entier long comme un tableau de 32 bits. Les bits sont numérotés de 0 à 31, de droite à gauche. +While using the bitwise operators, you must think about a Long Integer value as an array of 32 bits. The bits are numbered from 0 to 31, from right to left. -Comme un bit peut valoir 0 (zéro) ou 1, vous pouvez également considérer une valeur de type Entier long comme une expression dans laquelle vous pouvez stocker 32 valeurs de type Booléen. Lorsque le bit vaut 1, la valeur est **Vrai** et lorsque le bit vaut 0, la valeur est **Faux**. +Because each bit can equal 0 or 1, you can also think about a Long Integer value as a value where you can store 32 Boolean values. A bit equal to 1 means **True** and a bit equal to 0 means **False**. -Une expression utilisant un opérateur sur les bits retourne une valeur de type Entier long, à l'exception de l'opérateur Tester bit avec lequel l'expression retournée est du type Booléen. Le tableau suivant fournit la liste des opérateurs sur les bits et leur syntaxe : +An expression that uses a bitwise operator returns a Long Integer value, except for the Bit Test operator, where the expression returns a Boolean value. The following table lists the bitwise operators and their syntax: -| Opération | Opérateur | Syntaxe | Retourne | -| --------------------- | --------- | ---------------------- | ----------------------- | -| ET | & | long & E. long | E. long | -| OU (inclusif) | | | long | E. long | E. long | -| OU (exclusif) | \^| | long \^| E. long | E. long | -| Décaler bits à gauche | << | E. Long << E. Long | long (voir note n°1) | -| Décaler bits à droite | >> | E. Long >> E. Long | long (voir note n°1) | -| Mettre bit à 1 | ?+ | long ?+ E. long | long (voir note n°2) | -| Mettre bit à 0 | ?- | long ?? | long (voir note n°2) | -| Tester bit | ?? | E. E. long | Booléen (voir note n°2) | +| Operation | Operator | Syntax | Returns | +| ---------------------- | --------- | ------------------- | -------------------- | +| Bitwise AND | & | Long & Long | Long | +| Bitwise OR (inclusive) | | | Long | Long | Long | +| Bitwise OR (exclusive) | \^| | Long \^| Long | Long | +| Left Bit Shift | << | Long << Long | Long (see note 1) | +| Right Bit Shift | >> | Long >> Long | Long (see note 1) | +| Bit Set | ?+ | Long ?+ Long | Long (see note 2) | +| Bit Clear | ?- | Long ?- Long | Long (see note 2) | +| Bit Test | ?? | Long ?? Long | Boolean (see note 2) | #### Notes -1. Dans les opérations utilisant `Décaler bits à gauche` et `Décaler bits à droite`, le second opérande indique le nombre de décalages de bits du premier opérande à effectuer dans la valeur retournée. Par conséquent, ce second opérande doit être compris entre 0 et 31. Notez qu'un décalage de 0 retourne une valeur inchangée et qu'un décalage de plus de 31 bits retourne 0x00000000 car tous les bits sont perdus. Si vous passez une autre valeur en tant que second opérande, le résultat sera non significatif. -2. Dans les opérations utilisant `Mettre bit à 1`, `Mettre bit à 0` et `Tester bit`, le second opérande indique le numéro du bit sur lequel agir. Par conséquent, ce second opérande doit être compris entre 0 et 31, sinon le résultat de l'expression sera non significatif. +1. For the `Left Bit Shift` and `Right Bit Shift` operations, the second operand indicates the number of positions by which the bits of the first operand will be shifted in the resulting value. Therefore, this second operand should be between 0 and 31. Note however, that shifting by 0 returns an unchanged value and shifting by more than 31 bits returns 0x00000000 because all the bits are lost. If you pass another value as second operand, the result is non-significant. +2. For the `Bit Set`, `Bit Clear` and `Bit Test` operations , the second operand indicates the number of the bit on which to act. Therefore, this second operand must be between 0 and 31; otherwise, the result of the expression is non-significant. -Le tableau suivant dresse la liste des opérateurs sur les bits et de leurs effets : +The following table lists the bitwise operators and their effects: -| Opération | Description | -| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| ET | Chaque bit retourné est le résultat de l'opération ET logique appliquée aux deux bits opérandes.

    Voici la table du ET logique :

  • 1 & 1 --> 1
  • 0 & 1 --> 0
  • 1 & 0 --> 0
  • 0 & 0 --> 0

    En d'autres termes, le bit résultant est 1 si les deux bits d'opérande sont 1; sinon, le bit résultant est 0. | -| OU (inclusif) | Chaque bit retourné est le résultat de l'opération OU logique appliquée aux deux bits opérandes.

    Voici la table du OU inclusif logique :

  • 1 | 1 --> 1
  • 0 | 1 --> 1
  • 1 | 0 --> 1
  • 0 | 0 --> 0

    En d'autres termes, le bit résultant est 1 si au moins l'un des deux bits d'opérande est 1; sinon, le bit résultant est 0. | -| OU (exclusif) | Chaque bit retourné est le résultat de l'opération OU logique appliquée aux deux bits opérandes.

    Voici la table du OU exclusif logique :

  • 1 \^| 1 --> 0
  • 0 \^| 1 --> 1
  • 1 \^| 0 --> 1
  • 0 \^| 0 --> 0

    En d'autres termes, le bit résultant est 1 si seul l'un des deux bits d'opérande est 1; sinon, le bit résultant est 0. | -| Décaler bits à gauche | La valeur résultante est définie sur la première valeur d'opérande, puis les bits résultants sont décalés vers la gauche du nombre de positions indiqué par le deuxième opérande. Les bits auparavant situés à gauche sont perdus et les nouveaux bits situés à droite ont la valeur 0.

    **Note:** en ne tenant compte que des valeurs positives, le décalage vers la gauche de N bits équivaut à multiplier par 2 ^ N. | -| Décaler bits à droite | La valeur résultante est définie sur la première valeur d'opérande, puis les bits résultants sont décalés vers la droite du nombre de positions indiqué par le deuxième opérande. Les bits auparavant situés à droite sont perdus et les nouveaux bits situés à gauche ont la valeur 0.

    **Note:** en ne tenant compte que des valeurs positives, le décalage vers la droite de N bits équivaut à diviser par 2^N. | -| Mettre bit à 1 | La valeur retournée est la valeur du premier opérande dans lequel le bit dont le numéro est spécifié par le second opérande est positionné à 0. Les autres bits demeurent inchangés. | -| Mettre bit à 0 | La valeur retournée est la valeur du premier opérande dans lequel le bit dont le numéro est spécifié par le second opérande est positionné à 0. Les autres bits demeurent inchangés. | -| Tester bit | Retourne Vrai si, dans le premier opérande, le bit dont le numéro est indiqué par le second opérande vaut 1. Retourne Faux si, dans le premier opérande, le bit dont le numéro est indiqué par le second opérande vaut 0. | +| Operation | Description | +| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Bitwise AND | Each resulting bit is the logical AND of the bits in the two operands.

    Here is the logical AND table:

  • 1 & 1 --> 1
  • 0 & 1 --> 0
  • 1 & 0 --> 0
  • 0 & 0 --> 0

    In other words, the resulting bit is 1 if the two operand bits are 1; otherwise the resulting bit is 0. | +| Bitwise OR (inclusive) | Each resulting bit is the logical OR of the bits in the two operands.

    Here is the logical OR table:

  • 1 | 1 --> 1
  • 0 | 1 --> 1
  • 1 | 0 --> 1
  • 0 | 0 --> 0

    In other words, the resulting bit is 1 if at least one of the two operand bits is 1; otherwise the resulting bit is 0. | +| Bitwise OR (exclusive) | Each resulting bit is the logical XOR of the bits in the two operands.

    Here is the logical XOR table:

  • 1 \^| 1 --> 0
  • 0 \^| 1 --> 1
  • 1 \^| 0 --> 1
  • 0 \^| 0 --> 0

    In other words, the resulting bit is 1 if only one of the two operand bits is 1; otherwise the resulting bit is 0. | +| Left Bit Shift | The resulting value is set to the first operand value, then the resulting bits are shifted to the left by the number of positions indicated by the second operand. The bits on the left are lost and the new bits on the right are set to 0.

    **Note:** Taking into account only positive values, shifting to the left by N bits is the same as multiplying by 2^N. | +| Right Bit Shift | The resulting value is set to the first operand value, then the resulting bits are shifted to the right by the number of position indicated by the second operand. The bits on the right are lost and the new bits on the left are set to 0.

    **Note:** Taking into account only positive values, shifting to the right by N bits is the same as dividing by 2^N. | +| Bit Set | The resulting value is set to the first operand value, then the resulting bit, whose number is indicated by the second operand, is set to 1. The other bits are left unchanged. | +| Bit Clear | The resulting value is set to the first operand value, then the resulting bit, whose number is indicated by the second operand, is set to 0. The other bits are left unchanged. | +| Bit Test | Returns True if, in the first operand, the bit whose number is indicated by the second operand is equal to 1. Returns False if, in the first operand, the bit whose number is indicated by the second operand is equal to 0. | -### Exemples +### Examples -| Opération | Exemple | Résultat | -| --------------------- | ------------------------------- | ---------- | -| ET | 0x0000FFFF & 0xFF00FF00 | 0x0000FF00 | -| OU (inclusif) | 0x0000FFFF | 0xFF00FF00 | 0xFF00FFFF | -| OU (exclusif) | 0x0000FFFF \^| 0xFF00FF00 | 0xFF0000FF | -| Décaler bits à gauche | 0x0000FFFF << 8 | 0x00FFFF00 | -| Décaler bits à droite | 0x0000FFFF >> 8 | 0x000000FF | -| Mettre bit à 1 | 0x00000000 ?+ 16 | 0x00010000 | -| Mettre bit à 0 | 0x00010000 ?- 16 | 0x00000000 | -| Tester bit | 0x00010000 ?? 16 | Vrai | +| Operation | Example | Result | +| ---------------------- | ------------------------------- | ---------- | +| Bitwise AND | 0x0000FFFF & 0xFF00FF00 | 0x0000FF00 | +| Bitwise OR (inclusive) | 0x0000FFFF | 0xFF00FF00 | 0xFF00FFFF | +| Bitwise OR (exclusive) | 0x0000FFFF \^| 0xFF00FF00 | 0xFF0000FF | +| Left Bit Shift | 0x0000FFFF << 8 | 0x00FFFF00 | +| Right Bit Shift | 0x0000FFFF >> 8 | 0x000000FF | +| Bit Set | 0x00000000 ?+ 16 | 0x00010000 | +| Bit Clear | 0x00010000 ?- 16 | 0x00000000 | +| Bit Test | 0x00010000 ?? 16 | True | From a00735c2a03850378128fb4f93167293963fb738 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:39 +0100 Subject: [PATCH 030/311] New translations classes.md (French) --- .../translated_docs/fr/Concepts/classes.md | 292 +++++++----------- 1 file changed, 112 insertions(+), 180 deletions(-) diff --git a/website/translated_docs/fr/Concepts/classes.md b/website/translated_docs/fr/Concepts/classes.md index f18184247e33f5..214a362017f31a 100644 --- a/website/translated_docs/fr/Concepts/classes.md +++ b/website/translated_docs/fr/Concepts/classes.md @@ -6,13 +6,13 @@ title: Classes ## Aperçu -Le langage 4D prend en charge le concept de **classes**. Dans un langage de programmation, l'utilisation d'une classe vous permet de définir le comportement d'un objet avec des propriétés et des fonctions associées. +The 4D language supports the concept of **classes**. In a programming language, using a class allows you to define an object behaviour with associated properties and functions. -Une fois qu'une classe utilisateur (user class) est définie, vous pouvez **instancier** des objets de cette classe n'importe où dans votre code. Chaque objet est une instance de sa classe. Une classe peut s'étendre à une autre classe avec le mot-clé [`extend`](#class-extends-classname), puis hériter de ses fonctions. +Once a user class is defined, you can **instantiate** objects of this class anywhere in your code. Each object is an instance of its class. A class can [`extend`](#class-extends-classname) another class, and then inherits from its [functions](#function). -> Les modèles de classe 4D et de classe JavaScript sont similaires, et sont basés sur une chaîne de prototypes. +> The class model in 4D is similar to classes in JavaScript, and based on a chain of prototypes. -Par exemple, vous pouvez créer une classe `Person` avec la définition suivante : +For example, you could create a `Person` class with the following definition: ```4d //Class: Person.4dm @@ -21,7 +21,7 @@ Class constructor($firstname : Text; $lastname : Text) This.lastName:=$lastname ``` -Dans une méthode, créons une "Personne" : +In a method, creating a "Person": ``` var $o : cs.Person //object of Person class @@ -31,86 +31,86 @@ $o:=cs.Person.new("John";"Doe") -## Gestion des classes +## Managing classes -### Définition d'une classe +### Class definition -Une classe utilisateur dans 4D est définie par un fichier de méthode spécifique (.4dm), stocké dans le dossier `/Project/Sources/Classes/`. Le nom du fichier est le nom de la classe. +A user class in 4D is defined by a specific method file (.4dm), stored in the `/Project/Sources/Classes/` folder. The name of the file is the class name. -Lorsque vous nommez des classes, gardez à l'esprit les règles suivantes : +When naming classes, you should keep in mind the following rules: -- Le nom d'une classe doit être conforme aux [règles de nommage des propriétés](Concepts/dt_object.md#object-property-identifiers). -- Les noms de classe sont sensibles à la casse. -- Il n'est pas recommandé de donner le même nom à une classe et à une table de base de données, afin d'éviter tout conflit. +- A class name must be compliant with [property naming rules](Concepts/dt_object.md#object-property-identifiers). +- Class names are case sensitive. +- Giving the same name to a class and a database table is not recommended, in order to prevent any conflict. -Par exemple, si vous souhaitez définir une classe nommée "Polygon", vous devez créer le fichier suivant : +For example, if you want to define a class named "Polygon", you need to create the following file: -- Dossier Project +- Project folder + Project * Sources - Classes + Polygon.4dm -### Supprimer une classe +### Deleting a class -Pour supprimer une classe existante, vous pouvez : +To delete an existing class, you can: -- sur votre disque, supprimer le fichier de classe .4dm du dossier "Classes", -- dans l'Explorateur 4D, sélectionner la classe et cliquer sur ![](assets/en/Users/MinussNew.png) ou choisir **Déplacer vers la corbeille** dans le menu contextuel. +- on your disk, remove the .4dm class file from the "Classes" folder, +- in the 4D Explorer, select the class and click ![](assets/en/Users/MinussNew.png) or choose **Move to Trash** from the contextual menu. -### Utiliser l'interface 4D +### Using 4D interface -Les fichiers de classe sont automatiquement stockés à l'emplacement approprié lorsqu'ils sont créés via l'interface de 4D, soit via le menu **Fichier**, soit via l'Explorateur. +Class files are automatically stored at the appropriate location when created through the 4D interface, either via the **File** menu or the Explorer. -#### Menu Fichier et barre d'outils +#### File menu and toolbar -Vous pouvez créer un nouveau fichier de classe pour le projet en sélectionnant **Nouveau> Classe...** dans le menu **Fichier** de 4D Developer ou dans la barre d'outils. +You can create a new class file for the project by selecting **New > Class...** in the 4D Developer **File** menu or from the toolbar. -Vous pouvez également utiliser le raccourci **Ctrl+Maj+Alt+k**. +You can also use the **Ctrl+Shift+Alt+k** shortcut. -#### Explorateur +#### Explorer -Dans la page **Méthodes** de l'Explorateur, les classes sont regroupées dans la catégorie **Classes**. +In the **Methods** page of the Explorer, classes are grouped in the **Classes** category. -Pour créer une nouvelle classe, vous pouvez : +To create a new class, you can: -- sélectionnez la catégorie **Classes** et cliquez sur le bouton ![](assets/en/Users/PlussNew.png). -- sélectionnez **Nouvelle classe...** dans le menu d'actions en bas de la fenêtre de l'Explorateur ou dans le menu contextuel du groupe Classes. ![](assets/en/Concepts/newClass.png) -- sélectionnez **Nouveau> Classe...** dans le menu contextuel de la page d'accueil de l'Explorateur. +- select the **Classes** category and click on the ![](assets/en/Users/PlussNew.png) button. +- select **New Class...** from the action menu at the bottom of the Explorer window, or from the contexual menu of the Classes group. ![](assets/en/Concepts/newClass.png) +- select **New > Class...** from the contexual menu of the Explorer's Home page. -#### Prise en charge du code de classe +#### Class code support -Dans les différentes fenêtres de 4D Developer (éditeur de code, compilateur, débogueur, explorateur d'exécution), le code de classe est essentiellement géré comme une méthode projet avec quelques spécificités : +In the various 4D Developer windows (code editor, compiler, debugger, runtime explorer), class code is basically handled like a project method with some specificities: -- Dans l'éditeur de code : - - une classe ne peut pas être exécutée - - une fonction de classe est un bloc de code - - **Goto definition** sur un objet membre recherche des déclarations de fonction de classe; par exemple, "$o.f()" donnera comme résultat de recherche "Fonction f". - - **Search references** sur la déclaration de fonction de classe recherche la fonction utilisée comme membre d'objet; par exemple, "Fonction f" donnera comme résultat "$o.f()". -- Dans l'explorateur d'exécution et le Débogueur, les fonctions de classe sont affichées avec le format \ constructor ou \. \ . +- In the code editor: + - a class cannot be run + - a class function is a code block + - **Goto definition** on an object member searches for class Function declarations; for example, "$o.f()" will find "Function f". + - **Search references** on class function declaration searches for the function used as object member; for example, "Function f" will find "$o.f()". +- In the Runtime explorer and Debugger, class functions are displayed with the \ constructor or \.\ format. ## Class stores -Les classes disponibles sont accessibles depuis leurs class stores. Deux class stores sont disponibles : +Available classes are accessible from their class stores. Two class stores are available: -- `cs` pour le class store utilisateur -- `cs` pour le class store intégré +- `cs` for user class store +- `4D` for built-in class store ### cs #### cs -> classStore -| Paramètres | Type | | Description | -| ---------- | ------ | -- | ------------------------------------------------------------------- | -| classStore | object | <- | Class store utilisateur utilisateurs pour le projet ou le composant | +| Parameter | Type | | Description | +| ---------- | ------ | -- | --------------------------------------------- | +| classStore | object | <- | User class store for the project or component | -La commande `cs` retourne le class store utilisateur pour le projet ou le composant courant. La commande `cs` retourne le class store utilisateur pour le projet ou le composant courant. Par défaut, seules les [classes ORDA](ORDA/ordaClasses.md) du projet sont disponibles. +The `cs` command returns the user class store for the current project or component. It returns all user classes [defined](#class-definition) in the opened project or component. By default, only project [ORDA classes](ORDA/ordaClasses.md) are available. -#### Exemple +#### Example -Vous souhaitez créer une nouvelle instance d'un objet de `myClass` : +You want to create a new instance of an object of `myClass`: ```4d $instance:=cs.myClass.new() @@ -120,15 +120,15 @@ $instance:=cs.myClass.new() #### 4D -> classStore -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ---------- | ------ | -- | -------------- | -| classStore | object | <- | Class store 4D | +| classStore | object | <- | 4D class store | -La commande `4D` retourne le class store des classes 4D intégrées disponibles. Elle donne accès à des API spécifiques telles que [CryptoKey](API/cryptoKeyClass.md). +The `4D` command returns the class store for available built-in 4D classes. It provides access to specific APIs such as [CryptoKey](API/cryptoKeyClass.md). -#### Exemple +#### Example -Vous souhaitez créer une nouvelle clé dans la classe `CryptoKey` : +You want to create a new key in the `CryptoKey` class: ```4d $key:=4D.CryptoKey.new(New object("type";"ECDSA";"curve";"prime256v1")) @@ -136,31 +136,31 @@ $key:=4D.CryptoKey.new(New object("type";"ECDSA";"curve";"prime256v1")) -## Utiliser des classes dans votre code +## Using classes in your code -### L'objet classe +### Class object -Lorsqu'une classe est [définie](#class-definition) dans le projet, elle est chargée dans l'environnement de langage 4D. Une classe est un objet lui-même de la [classe "Class"](API/classClass.md). Un objet class possède les propriétés et fonctions suivantes : +When a class is [defined](#class-definition) in the project, it is loaded in the 4D language environment. A class is an object itself, of ["Class" class](API/classClass.md). A class object has the following properties and function: -- chaîne [`name`](API/classClass.md#name) -- objet [`superclass`](API/classClass.md#superclass) (nul si aucun) -- fonction [`new()`](API/classClass.md#new), permettant d'instancier des objets de classe. +- [`name`](API/classClass.md#name) string +- [`superclass`](API/classClass.md#superclass) object (null if none) +- [`new()`](API/classClass.md#new) function, allowing to instantiate class objects. -De plus, un objet de classe peut référencer : +In addition, a class object can reference: -- un objet [`constructor`](#class-constructor) (facultatif), -- un objet `prototype`, contenant des objets de [fonction](#function) nommés (facultatif). +- a [`constructor`](#class-constructor) object (optional), +- a `prototype` object, containing named [function](#function) objects (optional). -Un objet de classe est un [objet partagé](shared.md) et est donc accessible simultanément à partir de différents processus 4D. +A class object is a [shared object](shared.md) and can therefore be accessed from different 4D processes simultaneously. -### Recherche et prototype des propriétés +### Property lookup and prototype -Tous les objets de 4D sont liés en interne à un objet de classe. Lorsque 4D ne trouve pas de propriété dans un objet, il effectue un recherche dans l'objet prototype de sa classe; s'il ne la trouve pas, 4D poursuit sa recherche dans l'objet prototype de sa classe mère (superclass), et ainsi de suite jusqu'à ce qu'il n'y ait plus de superclass. +All objects in 4D are internally linked to a class object. When 4D does not find a property in an object, it searches in the prototype object of its class; if not found, 4D continues searching in the prototype object of its superclass, and so on until there is no more superclass. -Tous les objets héritent de la classe "Object" comme classe supérieure d'arbre d'héritage. +All objects inherit from the class "Object" as their inheritance tree top class. ```4d //Class: Polygon @@ -172,46 +172,46 @@ Class constructor($width : Integer; $height : Integer) $poly:=cs.Polygon.new(4;3) $instance:=OB Instance of($poly;cs.Polygon) - // vrai + // true $instance:=OB Instance of($poly;4D.Object) - // vrai + // true ``` -Lors de l'énumération des propriétés d'un objet, son prototype de classe n'est pas énuméré. Par conséquent, l'instruction `For each` et la commande `JSON Stringify` ne retournent pas les propriétés de l'objet du prototype de classe. La propriété d'objet prototype d'une classe est une propriété cachée interne. +When enumerating properties of an object, its class prototype is not enumerated. As a consequence, `For each` statement and `JSON Stringify` command do not return properties of the class prototype object. The prototype object property of a class is an internal hidden property. -## Mots-clés de classe +## Class keywords -Des mots-clés 4D spécifiques peuvent être utilisés dans les définitions de classe : +Specific 4D keywords can be used in class definitions: -- `Fonction ` pour définir les méthodes membres des objets. -- `Class constructor` (constructeur de classe) pour définir les propriétés des objets (c'est-à-dire le prototype). -- `Class extends ` pour définir l'héritage. +- `Function ` to define member methods of the objects. +- `Class constructor` to define the properties of the objects (i.e. the prototype). +- `Class extends ` to define inheritance. ### Function -#### Syntaxe +#### Syntax ```4d Function ({$parameterName : type; ...}){->$parameterName : type} // code ``` -Les fonctions de classe sont des propriétés de l'objet prototype de la classe propriétaire. Ce sont des objets de la classe "Function". +Class functions are properties of the prototype object of the owner class. They are objects of the "Function" class. -Dans le fichier de définition de classe, les déclarations de fonction utilisent le mot-clé `Function`, et le nom de la fonction. Le nom de la fonction doit être conforme aux [règles de nommage des propriétés](Concepts/dt_object.md#object-property-identifiers). +In the class definition file, function declarations use the `Function` keyword, and the name of the function. The function name must be compliant with [property naming rules](Concepts/dt_object.md#object-property-identifiers). -> **Astuce :** préfixer le nom de la fonction par un trait de soulignement ("_") exclura la fonction des fonctionnalités d'auto-complétion dans l'éditeur de code 4D. Par exemple, si vous déclarez `Function _myPrivateFunction` dans `MyClass`, elle ne sera pas proposée dans l'éditeur de code lorsque vous tapez `"cs.MyClass. "`. +> **Tip:** Starting the function name with an underscore character ("_") will exclude the function from the autocompletion features in the 4D code editor. For example, if you declare `Function _myPrivateFunction` in `MyClass`, it will not be proposed in the code editor when you type in `"cs.MyClass. "`. -Immédiatement après le nom de la fonction, les [paramètres](#parameters) de la fonction peuvent être déclarés avec un nom et un type de données affectés, y compris le paramètre de retour (facultatif). Par exemple: +Immediately following the function name, [parameters](#parameters) for the function can be declared with an assigned name and data type, including the return parameter (optional). For example: ```4d Function computeArea($width : Integer; $height : Integer)->$area : Integer ``` -Dans une fonction de classe, la commande `This` est utilisée comme instance d'objet. Par exemple: +Within a class function, the `This` command is used as the object instance. For example: ```4d Function setFullname($firstname : Text; $lastname : Text) @@ -222,42 +222,42 @@ Function getFullname()->$fullname : Text $fullname:=This.firstName+" "+Uppercase(This.lastName) ``` -Pour une fonction de classe, la commande `Current method name` retourne: "*\.\*", par exemple "MyClass.myMethod". +For a class function, the `Current method name` command returns: "*\.\*", for example "MyClass.myMethod". -Dans le code de l'application, les fonctions de classe sont appelées en tant que méthodes membres de l'instance d'objet et peuvent recevoir des [paramètres](#class-function-parameters) le cas échéant. Les syntaxes suivantes sont prises en charge : +In the application code, class functions are called as member methods of the object instance and can receive [parameters](#class-function-parameters) if any. The following syntaxes are supported: -- utilisation de l'opérateur `()`. Par exemple, `myObject.methodName("hello")` -- utilisations d'une méthode membre de la classe "Function" : +- use of the `()` operator. For example, `myObject.methodName("hello")` +- use of a "Function" class member method: - `apply()` - `call()` -> **Avertissement de sécurité des threads :** Si une fonction de classe n'est pas thread-safe et est appelée par une méthode avec l'attribut "Peut être exécuté en processus préemptif" : - le compilateur ne génère aucune erreur (ce qui est différent des méthodes classiques), - une erreur n'est générée par 4D qu'au moment de l'exécution. +> **Thread-safety warning:** If a class function is not thread-safe and called by a method with the "Can be run in preemptive process" attribute: - the compiler does not generate any error (which is different compared to regular methods), - an error is thrown by 4D only at runtime. -#### Paramètres +#### Parameters -Les paramètres de fonction sont déclarés à l'aide du nom et du type de paramètre, séparés par deux points. Le nom du paramètre doit être conforme aux [règles de nommage des propriétés](Concepts/dt_object.md#object-property-identifiers). Plusieurs paramètres (et types) sont séparés par des points-virgules (;). +Function parameters are declared using the parameter name and the parameter type, separated by a colon. The parameter name must be compliant with [property naming rules](Concepts/dt_object.md#object-property-identifiers). Multiple parameters (and types) are separated by semicolons (;). ```4d Function add($x; $y : Variant; $z : Integer; $xy : Object) ``` -> Si le type n'est pas indiqué, le paramètre sera défini comme `Variant`. +> If the type is not stated, the parameter will be defined as `Variant`. -Déclarez le paramètre de retour (optionnel) en ajoutant une flèche (->) et la définition du paramètre de retour après la liste de paramètre(s) d'entrée. Par exemple : +You declare the return parameter (optional) by adding an arrow (->) and the return parameter definition after the input parameter(s) list. For example: ```4d -Function add ($x : Variant; $y : Integer)->$result : Integer +Function add($x : Variant; $y : Integer)->$result : Integer ``` -Vous pouvez également déclarer le paramètre de retour uniquement en ajoutant `: type`, auquel cas il sera automatiquement disponible via $0. Par exemple : +You can also declare the return parameter only by adding `: type`, in which case it will automatically be available through $0. For example: ```4d -Function add ($x : Variant; $y : Integer): Integer - $0:=$x+$y +Function add($x : Variant; $y : Integer): Integer + $0:=$x+$y ``` -> La [syntaxe 4D classique](parameters.md#sequential-parameters) des paramètres de méthode peut être utilisée pour déclarer les paramètres des fonctions de classe. Les deux syntaxes peuvent être mélangées. Par exemple : +> The [classic 4D syntax](parameters.md#sequential-parameters) for method parameters can be used to declare class function parameters. Both syntaxes can be mixed. For example: > > ```4d Function add($x : Integer) @@ -269,7 +269,7 @@ Function add($x : Integer) -#### Exemple +#### Example ```4d // Class: Rectangle @@ -284,7 +284,7 @@ Function getArea()->$result : Integer ``` ```4d -// Dans une méthode projet +// In a project method var $rect : cs.Rectangle var $area : Real @@ -296,7 +296,7 @@ $area:=$rect.getArea() //5000 ### Class constructor -#### Syntaxe +#### Syntax ```4d // Class: MyClass @@ -306,13 +306,9 @@ Class Constructor({$parameterName : type; ...}) A class constructor function, which can accept [parameters](#parameters), can be used to define a user class. -Dans ce cas, lorsque vous appelez la méthode membre `new()` de la classe, le "class constructor" est appelé avec les paramètres éventuellement passés à la fonction `new()`. - -Pour une fonction "class constructor", la commande `Current method name` retourne : "*\.constructor*", par exemple "MyClass.constructor". +In that case, when you call the `new()` class member method, the class constructor is called with the parameters optionally passed to the `new()` function. - - -#### Exemple : +For a class constructor function, the `Current method name` command returns: "*\.constructor*", for example "MyClass.constructor". @@ -320,14 +316,14 @@ Pour une fonction "class constructor", la commande `Current method name` retourn ```4d // Class: MyClass -// Class constructor de MyClass +// Class constructor of MyClass Class Constructor ($name : Text) This.name:=$name ``` ```4d -// Dans une méthode projet -// Vous pouvez instancier un objet +// In a project method +// You can instantiate an object var $o : cs.MyClass $o:=cs.MyClass.new("HelloWorld") // $o = {"name":"HelloWorld"} @@ -338,14 +334,14 @@ $o:=cs.MyClass.new("HelloWorld") ### Class extends \ -#### Syntaxe +#### Syntax ```4d -// Class : ChildClass +// Class: ChildClass Class extends ``` -Le mot-clé `Class extends` est utilisé dans une déclaration de classe pour créer une classe utilisateur qui est elle-même enfant d'une autre classe utilisateur. The child class inherits all functions of the parent class. +The `Class extends` keyword is used in class declaration to create a user class which is a child of another user class. The child class inherits all functions of the parent class. Class extension must respect the following rules: @@ -497,76 +493,39 @@ $message:=$square.description() //I have 4 sides which are all equal | --------- | ------ | -- | -------------- | | Result | object | <- | Current object | -The `This` keyword returns a reference to the currently processed object. You created the `Rectangle` class with a function: - -```4d - //Class: Rectangle - - Function nbSides - C_TEXT($0) - $0:="I have 4 sides" -``` - -You also created the `Square` class with a function calling the superclass function: - -```4d - //Class: Square - - Class extends Rectangle - - Function description - C_TEXT($0) - $0:=Super.nbSides()+" which are all equal" -``` - -Then you can write in a project method: - -```4d - C_OBJECT($square) - C_TEXT($message) - $square:=cs.Square.new() - $message:=$square.description() //I have 4 sides which are all equal -``` - -### This - -#### This -> Object - -| Parameter | Type | | Description | -| --------- | ------ | -- | -------------- | -| Result | object | <- | Current object | - The `This` keyword returns a reference to the currently processed object. In 4D, it can be used in [different contexts](https://doc.4d.com/4Dv18/4D/18/This.301-4504875.en.html). -In most cases, the value of `This` is determined by how a function is called. It can't be set by assignment during execution, and it may be different each time the function is called. Par exemple : +In most cases, the value of `This` is determined by how a function is called. It can't be set by assignment during execution, and it may be different each time the function is called. + +When a formula is called as a member method of an object, its `This` is set to the object the method is called on. For example: ```4d $o:=New object("prop";42;"f";Formula(This.prop)) $val:=$o.f() //42 ``` -Lorsqu'une fonction de [class constructor](#class-constructor) est utilisée (avec le mot clé `new()`), son `This` est lié au nouvel objet en cours de construction. +When a [class constructor](#class-constructor) function is used (with the `new()` keyword), its `This` is bound to the new object being constructed. ```4d //Class: ob Class Constructor - // Créer des propriétés sur This, tel que - // souhaité en leur affectant + // Create properties on This as + // desired by assigning to them This.a:=42 ``` ```4d -// dans une méthode 4D +// in a 4D method $o:=cs.ob.new() $val:=$o.a //42 ``` -> Lorsque vous appelez le constructeur de superclasse dans un constructeur à l'aide du mot clé [Super](#super), gardez à l'esprit que `This` ne doit pas être appelé avant le constructeur de superclasse, sinon une erreur est générée. Prenons [cet exemple](#example-1). +> When calling the superclass constructor in a constructor using the [Super](#super) keyword, keep in mind that `This` must not be called before the superclass constructor, otherwise an error is generated. See [this example](#example-1). -Dans tous les cas, `This` fait référence à l'objet sur lequel la méthode a été appelée, comme si la méthode était sur l'objet. +In any cases, `This` refers to the object the method was called on, as if the method were on the object. ```4d //Class: ob @@ -575,26 +534,6 @@ Function f() $0:=This.a+This.b ``` -Vous pouvez donc écrire, dans une méthode projet : - -```4d -$o:=cs.ob.new() -$o.a:=5 -$o.b:=3 -$val:=$o.f() //8 -``` -Dans cet exemple, l'objet assigné à la variable $o n'a pas sa propre propriété *f*, il l'hérite de sa classe. See [this example](#example-1). - - -In any cases, `This` refers to the object the method was called on, as if the method were on the object. - -```4d - //Class: ob - - Function f - $0:=This.a+This.b -``` - Then you can write in a project method: ```4d @@ -618,13 +557,6 @@ Several commands of the 4D language allows you to handle class features. `OB Class` returns the class of the object passed in parameter. -### OB Instance of - -#### OB Instance of ( object ; class ) -> Boolean - -`OB Instance of` returns `true` if `object` belongs to `class` or to one of its inherited classes, and `false` otherwise. - - ### OB Instance of #### OB Instance of ( object ; class ) -> Boolean From 5054238fadf56d25cf3e1b3d1db04abb99fab38e Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:42 +0100 Subject: [PATCH 031/311] New translations components.md (French) --- .../translated_docs/fr/Concepts/components.md | 124 +++++++++--------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/website/translated_docs/fr/Concepts/components.md b/website/translated_docs/fr/Concepts/components.md index 87b4ef7f46c16c..0a3759b6d453ae 100644 --- a/website/translated_docs/fr/Concepts/components.md +++ b/website/translated_docs/fr/Concepts/components.md @@ -5,52 +5,52 @@ title: Composants A 4D component is a set of 4D methods and forms representing one or more functionalities that can be installed in different applications. For example, you can develop a 4D e-mail component that manages every aspect of sending, receiving and storing e-mails in 4D applications. -La création et l’installation des composants 4D s’effectuent directement depuis 4D. Schématiquement, les composants sont gérés comme des [plug-ins](Concepts/plug-ins.md). Les principes sont les suivants : +Creating and installing 4D components is carried out directly from 4D. Basically, components are managed like [plug-ins](Concepts/plug-ins.md) according to the following principles: -- Un composant est un simple fichier de structure (compilé ou non compilé) d’architecture standard ou sous forme de package (cf. paragraphe Extension .4dbase). +- A component consists of a regular structure file (compiled or not) having the standard architecture or in the form of a package (see .4dbase Extension). - To install a component in an application project, you simply need to copy it into the "Components" folder of the project, at the same level as the Project folder. -- Un composant peut appeler la plupart des éléments 4D : des méthodes projet, des formulaires projet, des barres de menus, des listes à choix multiples, des images issues de la bibliothèque, etc. Il ne peut pas appeler des méthodes base et des triggers. -- Il n’est pas possible d’exploiter des tables standard ou des fichiers de données dans les composants 4D. En revanche, un composant peut créer et/ou utiliser des tables, des champs et des fichiers de données via les mécanismes des bases externes. Les bases externes sont des bases 4D indépendantes manipulées via les commandes SQL. +- A component can call on most of the 4D elements: project methods, project forms, menu bars, choice lists, pictures from the library, and so on. It cannot call database methods and triggers. +- You cannot use standard tables or data files in 4D components. However, a component can create and/or use tables, fields and data files using mechanisms of external databases. These are separate 4D databases that you work with using SQL commands. -## Définitions +## Definitions -Les mécanismes de gestion des composants dans 4D nécessitent la mise en oeuvre des concepts et de la terminologie suivants : +The component management mechanisms in 4D require the implementation of the following terms and concepts: - **Matrix Project**: 4D project used for developing the component. The matrix project is a standard project with no specific attributes. A matrix project forms a single component. The matrix project is intended to be copied, compiled or not, into the Components folder of the project that will be using the component (host application project). - **Host Project**: Application project in which a component is installed and used. - **Component**: Matrix project, compiled or not, copied into the Components folder of the host application and whose contents are used in the host applications. -It should be noted that a project can be both a “matrix” and a “host,” in other words, a matrix project can itself use one or more components. En revanche, une base utilisée comme composant ne peut pas elle-même utiliser un composant : un seul niveau de composant est chargé. +It should be noted that a project can be both a “matrix” and a “host,” in other words, a matrix project can itself use one or more components. However, a component cannot use “sub-components” itself. -### Protection des composants : la compilation +### Protection of components: compilation -By default, all the project methods of a matrix project installed as a component are potentially visible from the host project. En particulier : +By default, all the project methods of a matrix project installed as a component are potentially visible from the host project. In particular: -- The shared project methods are found on the Methods Page of the Explorer and can be called in the methods of the host project. Leur contenu peut être sélectionné et copié dans la zone de prévisualisation de l’Explorateur. Elles peuvent également être visualisées dans le débogueur. Il n’est toutefois pas possible de les ouvrir dans l’éditeur de méthodes ni de les modifier. +- The shared project methods are found on the Methods Page of the Explorer and can be called in the methods of the host project. Their contents can be selected and copied in the preview area of the Explorer. They can also be viewed in the debugger. However, it is not possible to open them in the Method editor nor to modify them. - The other project methods of the matrix project do not appear in the Explorer but they too can be viewed in the debugger of the host project. To protect the project methods of a component effectively, simply compile the matrix project and provide it in the form of a .4dz file. When a compiled matrix project is installed as a component: -- The shared project methods are shown on the Methods Page of the Explorer and can be called in the methods of the host project. En revanche, leur contenu n’apparaît pas dans la zone de prévisualisation ni dans le débogueur. +- The shared project methods are shown on the Methods Page of the Explorer and can be called in the methods of the host project. However, their contents will not appear in the preview area nor in the debugger. - The other project methods of the matrix project will never appear. -## Partage des méthodes projet +## Sharing of project methods All the project methods of a matrix project are by definition included in the component (the project is the component), which means that they can be called and executed by the component. -On the other hand, by default these project methods will not be visible, nor can they be called in the host projects. In the matrix project, you must explicitly designate the methods that you want to share with the host project. These project methods can be called in the code of the host project (but they cannot be modified in the Method editor of the host database). Ces méthodes constituent les **points d’entrée** dans le composant. +On the other hand, by default these project methods will not be visible, nor can they be called in the host projects. In the matrix project, you must explicitly designate the methods that you want to share with the host project. These project methods can be called in the code of the host project (but they cannot be modified in the Method editor of the host database). These methods form **entry points** in the component. **Note:** Conversely, for security reasons, by default a component cannot execute project methods belonging to the host project. In certain cases, you may need to allow a component to access the project methods of your host project. To do this, you must explicitly designate the project methods of the host project that you want to make accessible to the components. ![](assets/en/Concepts/pict516563.en.png) -## Passage de variables +## Passing variables The local, process and interprocess variables are not shared between components and host projects. The only way to access component variables from the host project and vice versa is using pointers. -Exemple utilisant un tableau : +Example using an array: ```4d //In the host project: @@ -61,7 +61,7 @@ Exemple utilisant un tableau : APPEND TO ARRAY($1->;2) ``` -Exemples utilisant des variables : +Examples using variables: ```4d C_TEXT(myvariable) @@ -75,33 +75,33 @@ When you use pointers to allow components and the host project to communicate, y - The `Get pointer` command will not return a pointer to a variable of the host project if it is called from a component and vice versa. -- The component architecture allows the coexistence, within the same interpreted project, of both interpreted and compiled components (conversely, only compiled components can be used in a compiled project). L’usage de pointeurs dans ce cas doit respecter le principe suivant : l’interpréteur peut dépointer un pointeur construit en mode compilé mais à l’inverse, en mode compilé, il n’est pas possible de dépointer un pointeur construit en mode interprété. Let’s illustrate this principle with the following example: given two components, C (compiled) and I (interpreted), installed in the same host project. - - Si le composant C définit la variable `mavarC`, le composant I peut accéder à la valeur de cette variable en utilisant le pointeur `->mavarC`. - - Si le composant I définit la variable `mavarI`, le composant C ne peut pas accéder à cette variable en utilisant le pointeur `->mavarI`. Cette syntaxe provoque une erreur d’exécution. +- The component architecture allows the coexistence, within the same interpreted project, of both interpreted and compiled components (conversely, only compiled components can be used in a compiled project). In order to use pointers in this case, you must respect the following principle: the interpreter can unpoint a pointer built in compiled mode; however, in compiled mode, you cannot unpoint a pointer built in interpreted mode. Let’s illustrate this principle with the following example: given two components, C (compiled) and I (interpreted), installed in the same host project. + - If component C defines the `myCvar` variable, component I can access the value of this variable by using the pointer `->myCvar`. + - If component I defines the `myIvar` variable, component C cannot access this variable by using the pointer `->myIvar`. This syntax causes an execution error. -- The comparison of pointers using the `RESOLVE POINTER` command is not recommended with components since the principle of partitioning variables allows the coexistence of variables having the same name but with radically different contents in a component and the host project (or another component). Le type de la variable peut même être différent dans les deux contextes. Si les pointeurs `monptr1` et `monptr2` pointent chacun sur une variable, la comparaison suivante produira un résultat erroné : +- The comparison of pointers using the `RESOLVE POINTER` command is not recommended with components since the principle of partitioning variables allows the coexistence of variables having the same name but with radically different contents in a component and the host project (or another component). The type of the variable can even be different in both contexts. If the `myptr1` and `myptr2` pointers each point to a variable, the following comparison will produce an incorrect result: ```4d - RESOLVE POINTER(monptr1;vNomVar1;vnumtable1;vnumchamp1) - RESOLVE POINTER(monptr2;vNomVar2;vnumtable2;vnumchamp2) - If(vNomVar1=vNomVar2) - //Ce test retourne Vrai alors que les variables sont différentes + RESOLVE POINTER(myptr1;vVarName1;vtablenum1;vfieldnum1) + RESOLVE POINTER(myptr2;vVarName2;vtablenum2;vfieldnum2) + If(vVarName1=vVarName2) + //This test returns True even though the variables are different ``` -Dans ce cas, il est nécessaire d’utiliser la comparaison de pointeurs : +In this case, it is necessary to use the comparison of pointers: ```4d - If(monptr1=monptr2) //Ce test retourne Faux + If(myptr1=myptr2) //This test returns False ``` ## Access to tables of the host project -Although components cannot use tables, pointers can permit host projects and components to communicate with each other. Par exemple, voici une méthode pouvant être appelée depuis un composant : +Although components cannot use tables, pointers can permit host projects and components to communicate with each other. For example, here is a method that could be called from a component: ```4d -// appeler une méthode composant -methCreateRec(->[PERSONNES];->[PERSONNES]Nom;"Julie Andrews") +// calling a component method +methCreateRec(->[PEOPLE];->[PEOPLE]Name;"Julie Andrews") ``` -Dans le composant, le code de la méthode `methCreateRec` : +Within the component, the code of the `methCreateRec` method: ```4d C_POINTER($1) //Pointer on a table in host project @@ -116,22 +116,22 @@ $fieldpointer->:=$3 SAVE RECORD($tablepointer->) ``` -## Portée des commandes du langage +## Scope of language commands -Hormis les [Commandes non utilisables](#unusable-commands), un composant peut utiliser toute commande du langage 4D. +Except for [Unusable commands](#unusable-commands), a component can use any command of the 4D language. -Lorsqu’elles sont appelées depuis un composant, les commandes s’exécutent dans le contexte du composant, à l’exception de la commande `EXECUTE METHOD` qui utilise le contexte de la méthode désignée par la commande. Also note that the read commands of the “Users and Groups” theme can be used from a component but will read the users and groups of the host project (a component does not have its own users and groups). +When commands are called from a component, they are executed in the context of the component, except for the `EXECUTE METHOD` command that uses the context of the method specified by the command. Also note that the read commands of the “Users and Groups” theme can be used from a component but will read the users and groups of the host project (a component does not have its own users and groups). The `SET DATABASE PARAMETER` and `Get database parameter` commands are an exception: their scope is global to the application. When these commands are called from a component, they are applied to the host application project. -Par ailleurs, des dispositions spécifiques sont définies pour les commandes `Structure file` et `Get 4D folder` lorsqu’elles sont utilisées dans le cadre des composants. +Furthermore, specific measures have been specified for the `Structure file` and `Get 4D folder` commands when they are used in the framework of components. The `COMPONENT LIST` command can be used to obtain the list of components that are loaded by the host project. -### Commandes non utilisables +### Unusable commands -Les commandes suivantes ne sont pas compatibles avec une utilisation dans le cadre d’un composant car elles modifient le fichier de structure — ouvert en lecture. Leur exécution dans un composant provoque l’erreur -10511, “La commande NomCommande ne peut pas être appelée depuis un composant” : +The following commands are not compatible for use within a component because they modify the structure file — which is open in read-only. Their execution in a component will generate the error -10511, “The CommandName command cannot be called from a component”: - `ON EVENT CALL` - `Method called on event` @@ -151,40 +151,40 @@ Les commandes suivantes ne sont pas compatibles avec une utilisation dans le cad - `BLOB TO USERS` - `SET PLUGIN ACCESS` -**Notes :** +**Notes:** -- La commande `Table du formulaire courant` retourne `Nil` lorsqu’elle est appelée dans le contexte d’un formulaire projet. Par conséquent, elle ne peut pas être utilisée dans un composant. +- The `Current form table` command returns `Nil` when it is called in the context of a project form. Consequently, it cannot be used in a component. - SQL data definition language commands (`CREATE TABLE`, `DROP TABLE`, etc.) cannot be used on the component project. However, they are supported with external databases (see `CREATE DATABASE` SQL command). ## Gestion des erreurs An [error-handling method](Concepts/error-handling.md) installed by the `ON ERR CALL` command only applies to the running application. In the case of an error generated by a component, the `ON ERR CALL` error-handling method of the host project is not called, and vice versa. -## Utilisation de formulaires +## Use of forms -- Seuls les "formulaires projet" (formulaires non associés à une table en particulier) peuvent être exploités directement dans un composant. Any project forms present in the matrix project can be used by the component. -- A component can call table forms of the host project. A noter qu’il est nécessaire dans ce cas d’utiliser des pointeurs plutôt que des noms de table entre [] pour désigner les formulaires dans le code du composant. +- Only “project forms” (forms that are not associated with any specific table) can be used in a component. Any project forms present in the matrix project can be used by the component. +- A component can call table forms of the host project. Note that in this case it is necessary to use pointers rather than table names between brackets [] to specify the forms in the code of the component. -**Note:** If a component uses the `ADD RECORD` command, the current Input form of the host project will be displayed, in the context of the host project. Par conséquent, si le formulaire comporte des variables, le composant n’y aura pas accès. +**Note:** If a component uses the `ADD RECORD` command, the current Input form of the host project will be displayed, in the context of the host project. Consequently, if the form includes variables, the component will not have access to it. -- You can publish component forms as subforms in the host projects. Avec ce principe, vous pouvez notamment développer des composants proposant des objets graphiques. Par exemple, les Widgets proposés par 4D sont basés sur l’emploi de sous-formulaires en composants. +- You can publish component forms as subforms in the host projects. This means that you can, more particularly, develop components offering graphic objects. For example, Widgets provided by 4D are based on the use of subforms in components. -## Utilisation de tables et de champs +## Use of tables and fields -A component cannot use the tables and fields defined in the 4D structure of the matrix project. En revanche, il peut créer et utiliser des bases externes, et donc utiliser des tables et des champs en fonction de ses besoins. Les bases externes sont créées et gérées via le langage SQL. An external database is a 4D project that is independent from the main 4D project, but that you can work with from the main 4D project. Utiliser une base externe signifie désigner temporairement cette base comme base courante, c’est-à-dire comme base cible des requêtes SQL exécutées par 4D. Les bases externes sont créées à l'aide de la commande SQL `CREATE DATABASE`. +A component cannot use the tables and fields defined in the 4D structure of the matrix project. However, you can create and use external databases, and then use their tables and fields according to your needs. You can create and manage external databases using SQL. An external database is a 4D project that is independent from the main 4D project, but that you can work with from the main 4D project. Using an external database means temporarily designating this database as the current database, in other words, as the target database for the SQL queries executed by 4D. You create external databases using the SQL `CREATE DATABASE` command. -### Exemple +### Example -Le code suivant est inclus dans un composant et effectue trois actions élémentaires avec une base de données externe : +The following code is included in a component and performs three basic actions with an external database: -- création de la base de données externe si elle n'existe pas déjà, -- ajout de données dans la base de données externe, -- lecture de données depuis la base de données externe. +- creates the external database if it does not already exist, +- adds data to the external database, +- reads data from the external database. -Création de la base de données externe : +Creating the external database: ```4d -<>MyDatabase:=Get 4D folder+"\MyDB" // (Windows) stocke les données dans un répertoire autorisé +<>MyDatabase:=Get 4D folder+"\MyDB" // (Windows) stores the data in an authorized directory Begin SQL CREATE DATABASE IF NOT EXISTS DATAFILE :[<>MyDatabase]; USE DATABASE DATAFILE :[<>MyDatabase]; @@ -204,7 +204,7 @@ Création de la base de données externe : End SQL ``` -Ecriture dans la base de données externe : +Writing in the external database: ```4d $Ptr_1:=$2 // retrieves data from the host project through pointers @@ -226,7 +226,7 @@ Ecriture dans la base de données externe : End SQL ``` -Lecture dans une base de données externe : +Reading from an external database: ```4d $Ptr_1:=$2 // accesses data of the host project through pointers @@ -248,17 +248,17 @@ Lecture dans une base de données externe : End SQL ``` -## Utilisation de ressources +## Use of resources -Les composants peuvent utiliser des ressources. Si le composant est d’architecture .4dbase (architecture conseillée), le dossier Resources doit être placé à l’intérieur de ce dossier. +Components can use resources. In conformity with the resource management principle, if the component is of the .4dbase architecture (recommended architecture), the Resources folder must be placed inside this folder. -Les mécanismes automatiques sont opérationnels : les fichiers XLIFF présents dans le dossier Resources d’un composant seront chargés par ce composant. +Automatic mechanisms are operational: the XLIFF files found in the Resources folder of a component will be loaded by this component. In a host project containing one or more components, each component as well as the host projects has its own “resources string.” Resources are partitioned between the different projects: it is not possible to access the resources of component A from component B or the host project. -## Aide en ligne des composants -Un mécanisme spécifique a été mis en place afin de permettre aux développeurs d’ajouter des aides en ligne à leurs composants. The principle is the same as that provided for 4D projects: +## On-line help for components +A specific mechanism has been implemented in order to allow developers to add on-line help to their components. The principle is the same as that provided for 4D projects: -- L’aide du composant doit être fournie sous le forme d’un fichier suffixé .htm, .html ou (Windows uniquement) .chm, -- Le fichier d’aide doit être placé à côté du fichier de structure du composant et porter le même nom que le fichier de structure, -- L’aide est alors automatiquement chargée dans le menu Aide de l’application avec le libellé “Aide de...” suivi du nom du fichier d’aide. \ No newline at end of file +- The component help must be provided as a file suffixed .htm, .html or (Windows only) .chm, +- The help file must be put next to the structure file of the component and have the same name as the structure file, +- This file is then automatically loaded into the Help menu of the application with the title “Help for...” followed by the name of the help file. \ No newline at end of file From fae129775d8d17aff64563b335d71fc9390ac151 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:45 +0100 Subject: [PATCH 032/311] New translations data-types.md (French) --- .../translated_docs/fr/Concepts/data-types.md | 158 +++++++++--------- 1 file changed, 79 insertions(+), 79 deletions(-) diff --git a/website/translated_docs/fr/Concepts/data-types.md b/website/translated_docs/fr/Concepts/data-types.md index 6c5f2bbfe38568..0c01445da49138 100644 --- a/website/translated_docs/fr/Concepts/data-types.md +++ b/website/translated_docs/fr/Concepts/data-types.md @@ -3,82 +3,82 @@ id: data-types title: Types de données --- -Dans 4D, les données sont gérées selon leur type à deux endroits : dans les champs de la base et dans le langage 4D. - -Bien qu'ils soient généralement équivalents, certains types de données de la base ne sont pas disponibles dans le langage et sont automatiquement convertis. A l'inverse, certains types de données sont gérés uniquement par le langage. Le tableau suivant liste tous les types de données disponibles, leur prise en charge et leur déclaration : - -| Types de données | Pris en charge par la base(1) | Pris en charge par le langage | [déclaration `var`](variables.md#using-the-var-keyword) | [déclaration `C_` ou `ARRAY`](variables.md#using-a-c_-directive) | -| -------------------------------------------- | ----------------------------- | ----------------------------- | ------------------------------------------------------- | ---------------------------------------------------------------- | -| [Alphanumérique](dt_string.md) | Oui | Converti en texte | - | - | -| [Texte](Concepts/dt_string.md) | Oui | Oui | Texte | `C_TEXT`, `ARRAY TEXT` | -| [Date](Concepts/dt_date.md) | Oui | Oui | Date | `C_DATE`, `ARRAY DATE` | -| [Heure](Concepts/dt_time.md) | Oui | Oui | Heure | `C_TIME`, `ARRAY TIME` | -| [Booléen](Concepts/dt_boolean.md) | Oui | Oui | Booléen | `C_BOOLEAN`, `ARRAY BOOLEAN` | -| [Entier long](Concepts/dt_number.md) | Oui | Converti en entier long | Entier long | `ARRAY INTEGER` | -| [Entier long](Concepts/dt_number.md) | Oui | Oui | Entier long | `C_LONGINT`, `ARRAY LONGINT` | -| [Entier long 64 bits](Concepts/dt_number.md) | Oui (SQL) | Converti en réel | - | - | -| [Réel](Concepts/dt_number.md) | Oui | Oui | Réel | `C_REAL`, `ARRAY REAL` | -| [Indéfini](Concepts/dt_null_undefined.md) | - | Oui | - | - | -| [Null](Concepts/dt_null_undefined.md) | - | Oui | - | - | -| [Pointeur](Concepts/dt_pointer.md) | - | Oui | Pointeur | `C_POINTER`, `ARRAY POINTER` | -| [Image](Concepts/dt_picture.md) | Oui | Oui | Image | `C_PICTURE`, `ARRAY PICTURE` | -| [BLOB](Concepts/dt_blob.md) | Oui | Oui | Blob | `C_BLOB`, `ARRAY BLOB` | -| [Objet](Concepts/dt_object.md) | Oui | Oui | Objet | `C_OBJECT`, `ARRAY OBJECT` | -| [Collection](Concepts/dt_collection.md) | - | Oui | Collection | `C_COLLECTION` | -| [Variant](Concepts/dt_variant.md)(2) | - | Oui | Variant | `C_VARIANT` | - -(1) A noter que ORDA gère les champs de la base via des objets (entités). Par conséquent, seuls les types de données disponibles pour ces objets sont pris en charge. Pour plus d'informations, veuillez vous reporter à la description du type [Objet](Concepts/dt_object.md). - -(2) Le variant n'est pas un type de *données* un type de *variable* qui peut contenir une valeur de n'importe quel autre type. - -## Valeurs par défaut - -Au moment de leur typage via une directive de compilation, les variables reçoivent une valeur par défaut, qu'elles conserveront au cours de la session tant qu'elles n'auront pas été affectées. - -La valeur par défaut dépend du type et de la catégorie de la variable, du contexte d'exécution (interprété ou compilé), ainsi que, pour le mode compilé, des options de compilation définies dans la Page Compilateur des Propriétés de la base : - -- Les variables process et interprocess sont toujours positionnées "à zéro" (qui signifie selon les cas 0, chaîne vide, blob vide, pointeur nil, date 00-00-00…) -- Les variables locales sont positionnées : - - en mode interprété : à zéro - - en mode compilé, dépendant de l'option **Initialiser les variables locales** des Propriétés de la base : - - à zéro lorsque "à zéro" est sélectionné, - - à une valeur arbitraire fixe lorsque "à une valeur aberrante" est sélectionné (0x72677267 pour les numériques et les heures, toujours vrai pour les booléens), équivalent de "à zéro" pour les autres, - - à "non" : pas d'initialisation, c'est-à-dire que tout ce qui est dans la RAM est utilisé pour les variables; c'est le cas des valeurs déjà utilisées pour les autres variables. **Note :** Il est recommandé d'utiliser "à zéro". - -Le tableau suivant illustre ces valeurs par défaut : - -| Type | Interprocess/Process (interprété/compilé), Local (interprété/compilé "à zéro") | Local compilé "aberrant" | Local compilé "non" | -| ----------- | ------------------------------------------------------------------------------ | ------------------------ | --------------------------- | -| Booléen | Faux | Vrai | True (varie) | -| Date | 00-00-00 | 00-00-00 | 00-00-00 | -| Entier long | 0 | 1919382119 | 909540880 (varie) | -| Heure | 00:00:00 | 533161:41:59 | 249345:34:24 (varie) | -| Image | picture size=0 | picture size=0 | picture size=0 | -| Réel | 0 | 1.250753659382e+243 | 1.972748538022e-217 (varie) | -| Pointeur | Nil=true | Nil=true | Nil=true | -| Texte | "" | "" | "" | -| Blob | Blob size=0 | Blob size=0 | Blob size=0 | -| Objet | null | null | null | -| Collection | null | null | null | -| Variant | indéfini | indéfini | indéfini | - - -## Convertir les types de données - -Le langage de 4D comporte des fonctions et des opérateurs vous permettant de convertir des types de données en d’autres types, dans la mesure où de telles conversions ont un sens. 4D assure la vérification des types de données. Ainsi, vous ne pouvez pas écrire : "abc"+0.5+!25/12/96!-?00:30:45?, car cette opération génère une erreur de syntaxe. - -Le tableau ci-dessous liste les types de données pouvant être convertis, le type dans lequel ils peuvent être convertis, ainsi que les fonctions 4D à utiliser : - -| Types à convertir | en Chaîne | en Numérique | en Date | en Heure | en Booléen | -| ----------------- | --------- | ------------ | ------- | -------- | ---------- | -| Chaîne (1) | | Num | Date | Heure | Bool | -| Numérique (2) | Chaine | | | | Bool | -| Date | Chaine | | | | Bool | -| Heure | Chaine | | | | Bool | -| Booléen | | Num | | | | - -(1) Les chaînes formatées en JSON peuvent être converties en données scalaires, objets ou collections à l'aide de la commande `JSON Parse`. - -(2) Les valeurs de type Heure peuvent être utilisées en tant que numériques. - -**Note :** Ce tableau ne traite pas les conversions de données plus complexes obtenues à l'aide d'une combinaison d'opérateurs et d'autres commandes. +In 4D, data are handled according to their type in two places: database fields and the 4D language. + +Although they are usually equivalent, some data types available at the database level are not directly available in the language and are automatically converted. Conversely, some data types can only be handled through the language. The following table lists all available data types and how they are supported/declared: + +| Data Types | Database support(1) | Language support | [`var` declaration](variables.md#using-the-var-keyword) | [`C_` or `ARRAY` declaration](variables.md#using-a-c_-directive) | +| ------------------------------------------ | ------------------- | -------------------- | ------------------------------------------------------- | ---------------------------------------------------------------- | +| [Alphanumeric](dt_string.md) | Yes | Converted to text | - | - | +| [Text](Concepts/dt_string.md) | Yes | Yes | Text | `C_TEXT`, `ARRAY TEXT` | +| [Date](Concepts/dt_date.md) | Yes | Yes | Date | `C_DATE`, `ARRAY DATE` | +| [Heure](Concepts/dt_time.md) | Yes | Yes | Heure | `C_TIME`, `ARRAY TIME` | +| [Booléen](Concepts/dt_boolean.md) | Yes | Yes | Booléen | `C_BOOLEAN`, `ARRAY BOOLEAN` | +| [Integer](Concepts/dt_number.md) | Yes | Converted to longint | Integer | `ARRAY INTEGER` | +| [Longint](Concepts/dt_number.md) | Yes | Yes | Integer | `C_LONGINT`, `ARRAY LONGINT` | +| [Longint 64 bits](Concepts/dt_number.md) | Yes (SQL) | Converted to real | - | - | +| [Real](Concepts/dt_number.md) | Yes | Yes | Real | `C_REAL`, `ARRAY REAL` | +| [Undefined](Concepts/dt_null_undefined.md) | - | Yes | - | - | +| [Null](Concepts/dt_null_undefined.md) | - | Yes | - | - | +| [Pointeur](Concepts/dt_pointer.md) | - | Yes | Pointeur | `C_POINTER`, `ARRAY POINTER` | +| [Image](Concepts/dt_picture.md) | Yes | Yes | Image | `C_PICTURE`, `ARRAY PICTURE` | +| [BLOB](Concepts/dt_blob.md) | Yes | Yes | Blob | `C_BLOB`, `ARRAY BLOB` | +| [Objet](Concepts/dt_object.md) | Yes | Yes | Objet | `C_OBJECT`, `ARRAY OBJECT` | +| [Collection](Concepts/dt_collection.md) | - | Yes | Collection | `C_COLLECTION` | +| [Variant](Concepts/dt_variant.md)(2) | - | Yes | Variant | `C_VARIANT` | + +(1) Note that ORDA handles database fields through objects (entities) and thus, only supports data types available to these objects. For more information, see the [Object](Concepts/dt_object.md) data type description. + +(2) Variant is actually not a *data* type but a *variable* type that can contain a value of any other data type. + +## Default values + +When variables are typed by means of a compiler directive, they receive a default value, which they will keep during the session as long as they have not been assigned. + +The default value depends on the variable type and category, its execution context (interpreted or compiled), as well as, for compiled mode, the compilation options defined on the Compiler page of the Database settings: + +- Process and interprocess variables are always set "to zero" (which means, depending on the case, "0", an empty string, an empty Blob, a Nil pointer, a blank date (00-00-00), etc.) +- Local variables are set: + - in interpreted mode: to zero + - in compiled mode, depending on the **Initialize local variables** option of the Database settings: + - "to zero": to zero (see above), + - "to a random value": 0x72677267 for numbers and times, always True for Booleans, the same as "to zero" for the others, + - "no": no initialization, meaning whatever is in RAM is used for the variables, like values used before for other variables. **Note:** 4D recommends to use "to zero". + +The following table illustrates these default values: + +| Type | Interprocess/Process (interpreted/compiled), Local (interpreted/compiled "to zero") | Local compiled "random" | Local compiled "no" | +| ---------- | ----------------------------------------------------------------------------------- | ----------------------- | ---------------------------- | +| Booleen | False | True | True (varies) | +| Date | 00-00-00 | 00-00-00 | 00-00-00 | +| Longint | 0 | 1919382119 | 909540880 (varies) | +| Heure | 00:00:00 | 533161:41:59 | 249345:34:24 (varies) | +| Image | picture size=0 | picture size=0 | picture size=0 | +| Real | 0 | 1.250753659382e+243 | 1.972748538022e-217 (varies) | +| Pointeur | Nil=true | Nil=true | Nil=true | +| Text | "" | "" | "" | +| Blob | Blob size=0 | Blob size=0 | Blob size=0 | +| Objet | null | null | null | +| Collection | null | null | null | +| Variant | undefined | undefined | undefined | + + +## Converting data types + +The 4D language contains operators and commands to convert between data types, where such conversions are meaningful. The 4D language enforces data type checking. For example, you cannot write: "abc"+0.5+!12/25/96!-?00:30:45?. This will generate syntax errors. + +The following table lists the basic data types, the data types to which they can be converted, and the commands used to do so: + +| Data Type to Convert | to String | to Number | to Date | to Time | to Boolean | +| -------------------- | --------- | --------- | ------- | ------- | ---------- | +| String (1) | | Num | Date | Heure | Bool | +| Number (2) | Chaine | | | | Bool | +| Date | Chaine | | | | Bool | +| Heure | Chaine | | | | Bool | +| Booléen | | Num | | | | + +(1) Strings formatted in JSON can be converted into scalar data, objects, or collections, using the `JSON Parse` command. + +(2) Time values can be treated as numbers. + +**Note:** In addition to the data conversions listed in this table, more sophisticated data conversions can be obtained by combining operators and other commands. From a11a57d9d0174bd33c04fa8efee24a7f2a995c39 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:47 +0100 Subject: [PATCH 033/311] New translations dt_blob.md (French) --- .../translated_docs/fr/Concepts/dt_blob.md | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/website/translated_docs/fr/Concepts/dt_blob.md b/website/translated_docs/fr/Concepts/dt_blob.md index 110a4ee4a77a65..37a7c3940c0df2 100644 --- a/website/translated_docs/fr/Concepts/dt_blob.md +++ b/website/translated_docs/fr/Concepts/dt_blob.md @@ -3,61 +3,61 @@ id: blob title: BLOB --- -Un champ, une variable ou une expression de type BLOB (Binary Large OBjects) est une série contiguë d'octets qui peut être traitée comme un seul objet ou dont les octets peuvent être adressés individuellement. Un BLOB peut être vide (longueur nulle) ou contenir jusqu'à 2147483647 octets (2 Go). +A BLOB (Binary Large OBjects) field, variable or expression is a contiguous series of bytes which can be treated as one whole object or whose bytes can be addressed individually. A BLOB can be empty (null length) or can contain up to 2147483647 bytes (2 GB). -Lorsque vous travaillez avec un BLOB, il est stocké entièrement en mémoire. Si vous travaillez avec une variable, le BLOB n'existe qu'en mémoire. Si vous travaillez avec un champ de type BLOB, il est chargé en mémoire à partir du disque, comme le reste de l'enregistrement auquel il appartient. +A BLOB is loaded into memory in its entirety. A BLOB variable is held and exists in memory only. A BLOB field is loaded into memory from the disk, like the rest of the record to which it belongs. -A l'instar des autres types de champs pouvant contenir une grande quantité de données (comme les champs de type Image), les champs de type BLOB ne sont pas dupliqués en mémoire lorsque vous modifiez un enregistrement. Par conséquent, les résultats renvoyés par `Ancien` et `Modifie` ne sont pas significatifs lorsque ces fonctions sont appliquées à des champs de type BLOB. +Like the other field types that can retain a large amount of data (such as the Picture field type), BLOB fields are not duplicated in memory when you modify a record. Consequently, the result returned by the `Old` and `Modified` commands is not significant when applied to a BLOB field. -## Passage des paramètres, pointeurs et résultats de fonctions +## Parameter passing, Pointers and function results -Les BLOBs dans 4D peuvent être passés comme paramètres aux commandes 4D ou aux routines des plug-ins qui attendent un paramètre de type BLOB. Les BLOBs peuvent également être passés aux méthodes que vous créez ou être retournés comme résultats de fonctions. +4D BLOBs can be passed as parameters to 4D commands or plug-in routines that expect BLOB parameters. BLOBS can also be passed as parameters to a user method or be returned as a function result. -Pour passer un BLOB à une de vos méthodes, vous pouvez aussi définir un pointeur vers le BLOB et passer le pointeur comme paramètre. +To pass a BLOB to your own methods, you can also define a pointer to the BLOB and pass the pointer as parameter. -**Voici quelques exemples :** +**Examples:** ```4d - // Déclarer une variable de type BLOB - C_BLOB(touteVarBLOB) - // Le BLOB est passé comme paramètre à une commande 4D - SET BLOB SIZE(touteVarBLOB;1024*1024) - // Le BLOB est passé comme paramètre à une routine externe - $CodeErr:=Faites_Quelque_chose_avec_ce_BLOB(touteVarBLOB) - // Le BLOB est passé comme paramètre à une méthode qui retourne un BLOB - C_BLOB(recupBlob) - recupBlob:=Remplir_Blob(touteVarBLOB) - // Un pointeur vers le BLOB est passé comme paramètre à une de vos méthodes - COMPUTE BLOB(->touteVarBLOB) + ` Declare a variable of type BLOB + C_BLOB(anyBlobVar) + ` The BLOB is passed as parameter to a 4D command + SET BLOB SIZE(anyBlobVar;1024*1024) + ` The BLOB is passed as parameter to an external routine + $errCode:=Do Something With This BLOB(anyBlobVar) + ` The BLOB is passed as a parameter to a method that returns a BLOB + C_BLOB(retrieveBlob) + retrieveBlob:=Fill_Blob(anyBlobVar) + ` A pointer to the BLOB is passed as parameter to a user method + COMPUTE BLOB(->anyBlobVar) ``` -**Note pour les développeurs de plug ins 4D :** Un paramètre de type BLOB se déclare “&O” (la lettre “O” et non le chiffre “0”). +**Note for Plug-in developers:** A BLOB parameter is declared as “&O” (the letter “O”, not the digit “0”). -## Assignation +## Assignment operator -Vous pouvez assigner la valeur d'un BLOB à d'autres BLOBs, comme dans l'exemple suivant. +You can assign BLOBs to each other. -**Exemple :** +**Example:** ```4d - // Déclarer deux variables de type BLOB + ` Declare two variables of type BLOB C_BLOB(vBlobA;vBlobB) - // Fixer la taille du premier BLOB à 10Ko + ` Set the size of the first BLOB to 10K SET BLOB SIZE(vBlobA;10*1024) - // Assigner le premier BLOB au second + ` Assign the first BLOB to the second one vBlobB:=vBlobA ``` -En revanche, il n'existe pas d'opérateur pouvant être utilisé avec des BLOB. +However, no operator can be applied to BLOBs. -## Adresser le contenu d'un BLOB +## Addressing BLOB contents -Chaque octet d'un BLOB peut être adressé individuellement, à l'aide des accolades {...}. Dans un BLOB, les octets sont numérotés de 0 à N-1, N étant la taille du BLOB. Exemple : +You can address each byte of a BLOB individually using the curly brackets symbols {...}. Within a BLOB, bytes are numbered from 0 to N-1, where N is the size of the BLOB. Example: ```4d - // Déclarer une variable de type BLOB + ` Declare a variable of type BLOB C_BLOB(vBlob) - // Fixer la taille du BLOB à 256 octets + ` Set the size of the BLOB to 256 bytes SET BLOB SIZE(vBlob;256) - // La boucle suivante initialise les 256 octets du BLOB à zéro - Boucle(vOctet;0;Taille BLOB(vBlob)-1) - vBlob{vOctet}:=0 - Fin de boucle + ` The loop below initializes the 256 bytes of the BLOB to zero + For(vByte;0;BLOB size(vBlob)-1) + vBlob{vByte}:=0 + End for ``` -Comme vous pouvez adresser individuellement tous les octets d'un BLOB, vous pouvez littéralement stocker tout ce que vous voulez dans une variable ou un champ de type BLOB. +Because you can address all the bytes of a BLOB individually, you can actually store whatever you want in a BLOB field or variable. From 23c3dec23fe57f3498523e15a37f3d57e34c2b9d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:49 +0100 Subject: [PATCH 034/311] New translations dt_boolean.md (French) --- .../translated_docs/fr/Concepts/dt_boolean.md | 64 +++++++++---------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/website/translated_docs/fr/Concepts/dt_boolean.md b/website/translated_docs/fr/Concepts/dt_boolean.md index 9786533bfe5194..33aa818a241718 100644 --- a/website/translated_docs/fr/Concepts/dt_boolean.md +++ b/website/translated_docs/fr/Concepts/dt_boolean.md @@ -3,62 +3,62 @@ id: boolean title: Booléen --- -Un champ, une variable ou une expression de type booléen peut être soit VRAI soit FAUX. +A boolean field, variable or expression can be either TRUE or FALSE. -## Fonctions booléennes +## Boolean functions -Les fonctions booléennes de 4D traitent des valeurs telles que `Vrai`, `Faux` et `Non` dans le thème **Booléens** consacré. Pour plus d'informations, veuillez vous reporter à la description de ces commandes. +4D provides the Boolean functions `True`, `False`, and `Not` in the dedicated **Boolean** theme. For more information, see the descriptions of these commands -### Exemple +### Example -L'exemple suivant retourne Vrai dans la variable monBooléen si l'utilisateur a cliqué sur le bouton monBouton et Faux s'il n'a pas cliqué dessus. . Lorsqu'un bouton reçoit un clic, la variable du bouton prend la valeur 1. +This example sets a Boolean variable based on the value of a button. It returns True in myBoolean if the myButton button was clicked and False if the button was not clicked. When a button is clicked, the button variable is set to 1. ```4d - If(monBouton=1) // Si le bouton a reçu un clic - monBooléen:=True// monBooléen prend la valeur True - Else // Si le bouton n'a pas reçu de clic, - monBooléen:=False //monBooléen prend la valeur False + If(myButton=1) //If the button was clicked + myBoolean:=True //myBoolean is set to True + Else //If the button was not clicked, + myBoolean:=False //myBoolean is set to False End if ``` -L'exemple ci-dessus peut être simplifié et écrit en une seule ligne . +The previous example can be simplified into one line. ```4d -monBooléen:=(monBouton=1) +myBoolean:=(myButton=1) ``` -## Opérateurs logiques +## Logical operators -4D supporte deux opérateurs logiques : l'opérateur d'intersection (AND) et l'opérateur de réunion inclusive (OR). Le AND logique retourne TRUE si les deux expressions sont VRAIES. Le OR logique retourne TRUE si au moins une des expressions est VRAIE. Le tableau suivant décrit les opérateurs logiques : +4D supports two logical operators that work on Boolean expressions: conjunction (AND) and inclusive disjunction (OR). A logical AND returns TRUE if both expressions are TRUE. A logical OR returns TRUE if at least one of the expressions is TRUE. The following table shows the logical operators: -| Opération | Syntaxe | Retourne | Expression | Valeur | -| --------- | ----------------- | -------- | ---------------------------- | ------ | -| AND | Booléen & Booléen | Booléen | ("A" = "A") & (15 # 3) | Vrai | -| | | | ("A" = "B") & (15 # 3) | Faux | -| | | | ("A" = "B") & (15 = 3) | Faux | -| OU | Booléen & Booléen | Booléen | ("A" = "A") | (15 # 3) | Vrai | -| | | | ("A" = "B") | (15 # 3) | Vrai | -| | | | ("A" = "B") | (15 = 3) | Faux | +| Operation | Syntax | Returns | Expression | Value | +| --------- | ----------------------- | ------- | ---------------------------- | ----- | +| AND | Boolean & Boolean | Booléen | ("A" = "A") & (15 # 3) | True | +| | | | ("A" = "B") & (15 # 3) | False | +| | | | ("A" = "B") & (15 = 3) | False | +| OR | Boolean | Boolean | Booléen | ("A" = "A") | (15 # 3) | True | +| | | | ("A" = "B") | (15 # 3) | True | +| | | | ("A" = "B") | (15 = 3) | False | -Voici la "table de vérité" pour l'opérateur logique "AND" : +The following is the truth table for the AND logical operator: | Expr1 | Expr2 | Expr1 & Expr2 | | ----- | ----- | ------------- | -| Vrai | Vrai | Vrai | -| Vrai | Faux | Faux | -| Faux | Vrai | Faux | -| Faux | Faux | Faux | +| True | True | True | +| True | False | False | +| False | True | False | +| False | False | False | -Voici la "table de vérité" pour l'opérateur logique "OR" : +The following is the truth table for the OR logical operator: | Expr1 | Expr2 | Expr1 | Expr2 | | ----- | ----- | ------------------ | -| Vrai | Vrai | Vrai | -| Vrai | Faux | Vrai | -| Faux | Vrai | Vrai | -| Faux | Faux | Faux | +| True | True | True | +| True | False | True | +| False | True | True | +| False | False | False | -**Astuce :** Si vous devez calculer une réunion exclusive (le "Ou" exclusif) entre Expr1 et Expr2, écrivez : +**Tip:** If you need to calculate the exclusive disjunction between Expr1 and Expr2, evaluate: ```4d (Expr1|Expr2) & Not(Expr1 & Expr2) From 8dbba4acfed3145e2f5af157a7aabe3e865a9e71 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:51 +0100 Subject: [PATCH 035/311] New translations dt_collection.md (French) --- .../fr/Concepts/dt_collection.md | 63 ++++++++++--------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/website/translated_docs/fr/Concepts/dt_collection.md b/website/translated_docs/fr/Concepts/dt_collection.md index 354655b09e7d40..38d7c194d5b9cb 100644 --- a/website/translated_docs/fr/Concepts/dt_collection.md +++ b/website/translated_docs/fr/Concepts/dt_collection.md @@ -3,33 +3,33 @@ id: collection title: Collection --- -Les collections sont des listes ordonnées de valeurs de types similaires ou différents (texte, nombre, date, objet, booléen, collection ou null). +Collections are ordered lists of values of similar or mixed types (text, number, date, object, boolean, collection, or null). -Pour manipuler les variables de type Collection, vous devez utiliser la notation objet (voir [Les bases de la syntaxe](Concepts/dt_object.md#syntax-basics)). +Collection type variables are managed using object notation (see [Syntax basics](Concepts/dt_object.md#syntax-basics)). -Pour des informations complémentaires sur les collections 4D, passez le numéro (l'indice) de l'élément entre crochets : +To access a collection element, you need to pass the element number inside square brackets: ```4d collectionRef[expression] ``` -Vous pouvez passer toute expression 4D valide qui retourne un nombre entier positif dans *expression*. Voici quelques exemples : +You can pass any valid 4D expression which returns a positive integer in *expression*. Examples: ```4d - myCollection[5] //accès au 6e élément de la collection + myCollection[5] //access to 6th element of the collection myCollection[$var] ``` -**Attention :** N'oubliez pas que la numérotation des éléments de collection débute à 0. +**Warning:** Collection elements are numbered from 0. -Vous pouvez assigner une valeur à un élément de collection ou lire une valeur d'élément de collection : +You can assign a value to a collection element or get a collection element value: ```4d - myCol[10]:="Mon nouvel élément" + myCol[10]:="My new element" $myVar:=myCol[0] ``` -Si vous assignez un numéro d'élément plus grand que celui du dernier élément existant dans la collection, la collection est automatiquement redimensionnée et les nouveaux éléments intermédiaires prennent la valeur null : +If you assign an element's index that surpasses the last existing element of the collection, the collection is automatically resized and all new intermediary elements are assigned a null value: ```4d var myCol : Collection @@ -40,37 +40,38 @@ Si vous assignez un numéro d'élément plus grand que celui du dernier élémen //myCol[4]=null ``` -## Initialisation +## Initialization -Les collections doivent être initialisées à l'aide, par exemple, de la commande `Creer collection`, sinon une erreur de syntaxe sera générée à la suite d'une lecture ou d'une modification d'un ou plusieurs élements de la collection. +Collections must have been initialized, for example using the `New collection` command, otherwise trying to read or modify their elements will generate a syntax error. -Exemple : +Example: ```4d - var $colVar : Collection //création d'une variable 4D de type collection. $colVar:=New $colVar:=New collection //initialisation de la collection et assignation à la variable 4D + var $colVar : Collection //creation of collection type 4D variable + $colVar:=New collection //initialization of the collection and assignment to the 4D variable ``` -### Collection standard ou collection partagée +### Regular or shared collection -Vous pouvez créer deux types de collections : +You can create two types of collections: -- standard (non partagées), à l'aide de la commande [`New collection`](API/collectionClass.md#new-collection). Ces collections peuvent être modifiées sans contrôle d'accès spécifique mais ne peuvent pas être partagées entre les process. -- partagées, à l'aide de la commande [`New shared collection`](API/collectionClass.md#new-shared-collection). Le contenu de ces collections peut être partagé entre les process, y compris des process (thread) préemptifs. L'accès à ces collections doit être contrôlé via des structures [`Use...End use`](Concepts/shared.md#useend-use). +- regular (non-shared) collections, using the [`New collection`](API/collectionClass.md#new-collection) command. These collections can be edited without any specific access control but cannot be shared between processes. +- shared collections, using the [`New shared collection`](API/collectionClass.md#new-shared-collection) command. These collections can be shared between processes, including preemptive threads. Access to these collections is controlled by [`Use...End use`](Concepts/shared.md#useend-use) structures. -Pour plus d'informations, veuillez vous reporter à la page [Objets partagés et collections partagées](Concepts/shared.md). +For more information, refer to the [Shared objects and collections](Concepts/shared.md) section. -## Fonctions de collection +## Collection functions -Les références de collections 4D bénéficient de fonctions de classe spécifiques (souvent appelées *fonctions méthodes*). Les fonctions de collection sont répertoriées dans la section [Class API Reference](API/collectionClass.md). +4D collection references benefit from special class functions (sometimes named *member functions*). Collection functions are listed in the [Class API Reference](API/collectionClass.md) section. -Par exemple: +For example: ```4d -$newCol:=$col.copy() //copie de $col vers $newCol - $col.push(10;100) //ajout de 10 et 100 à la collection +$newCol:=$col.copy() //deep copy of $col to $newCol +$col.push(10;100) //add 10 and 100 to the collection ``` -Certaines fonctions retournent la collection d'origine après modification, de manière à ce que vous puissiez enchaîner les appels dans une même séquence : +Some functions return the original collection after modification, so that you can run the calls in a sequence: ```4d $col:=New collection(5;20) @@ -78,17 +79,17 @@ Certaines fonctions retournent la collection d'origine après modification, de m ``` -### paramètre cheminPropriété +### propertyPath parameter -Plusieurs fonctions admettent un paramètre nommé _cheminPropriété_. Ce paramètre peut contenir : +Several functions accept a _propertyPath_ as parameter. This parameter stands for: -- soit un nom de propriété d'objet, par exemple "nomComplet" -- soit un chemin de propriété d'objet, c'est-à-dire une séquence hiérarchique de sous-propriétés reliées par des points, par exemple "employé.enfant.prénom". +- either an object property name, for example "lastName" +- or an object property path, i.e. a hierarchical sequence of sub-properties linked with dot characters, for example "employee.children.firstName". -**Attention :** Lorsque des fonctions ou un paramètre cheminPropriété sont attendus, l'utilisation de noms de propriétés contenant ".", "[ ]", ou des espaces n'est pas prise en charge car cela empêcherait 4D d'analyser correctement le chemin : +**Warning:** When using functions and propertyPath parameters, you cannot use ".", "[ ]", or spaces in property names since it will prevent 4D from correctly parsing the path: ```4d - $vmin:=$col.min("My.special.property") //indéfini - $vmin:=$col.min(["My.special.property"]) //erreur + $vmin:=$col.min("My.special.property") //undefined + $vmin:=$col.min(["My.special.property"]) //error ``` \ No newline at end of file From 9aa59015e444d1a3c1c961a087a66ea6261af7f1 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:53 +0100 Subject: [PATCH 036/311] New translations dt_date.md (French) --- .../translated_docs/fr/Concepts/dt_date.md | 66 +++++++++---------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/website/translated_docs/fr/Concepts/dt_date.md b/website/translated_docs/fr/Concepts/dt_date.md index aa61545205952f..e575fe71595ddb 100644 --- a/website/translated_docs/fr/Concepts/dt_date.md +++ b/website/translated_docs/fr/Concepts/dt_date.md @@ -3,15 +3,15 @@ id: date title: Date --- -Les variables, champs ou expressions de type Date peuvent être compris entre 1/1/100 et 31/12/32767. +A Date field, variable or expression can be in the range of 1/1/100 to 12/31/32,767. -Bien que le mode de représentation des dates par C_DATE permette de manipuler des dates allant jusqu'à l'année 32 767, certaines opérations passant par le système imposent une limite plus basse. +Although the representation mode for dates by can work with dates up to the year 32 767, certain operations passing through the system impose a lower limit. -**Note :** Dans ce manuel de référence du langage 4D, les paramètres de type Date dans les descriptions des commandes sont appelés Date, sauf spécification explicite. +**Note:** In the 4D Language Reference manual, Date parameters in command descriptions are denoted as Date, except when marked otherwise. -## Constantes littérales de type date +## Date literals -Une constante littérale de type date est comprise entre deux points d'exclamation (!…!). Une date doit être structurée avec le format ISO (!YYYY-MM-DD!). Voici quelques exemples de constantes dates : +A date literal constant is enclosed by exclamation marks (!…!). A date must be structured using the ISO format (!YYYY-MM-DD!). Here are some examples of date constants: ```4d !1976-01-01! @@ -19,31 +19,31 @@ Une constante littérale de type date est comprise entre deux points d'exclamati !2015-12-31! ``` -Une date nulle s’écrit _!00-00-00!_. - -**Astuce :** L'éditeur de méthodes dispose d'un raccourci pour entrer une date nulle. Pour cela, tapez un point d’exclamation (!) et appuyez sur la touche Entrée. - -**Notes :** - -- Pour des raisons de compatibilité, 4D accepte que l'année soit saisie sur deux chiffres. Dans ce cas, le programme considère qu’elle appartient au XXe ou au XXIe siècle selon qu'elle est supérieure ou inférieure à 30, sauf si ce fonctionnement par défaut a été modifié à l'aide de la commande `SET DEFAULT CENTURY`. -- Si vous avez coché l'option "Utiliser langage français et paramètres régionaux système" (cf. Page Méthodes), vous devez utiliser le format de date défini dans votre système. Généralement dans un environnement français, une date est saisie sous la forme jour/mois/année, une barre oblique "/" séparant les valeurs. - -## Opérateurs sur les dates - -| Opération | Syntaxe | Retourne | Expression | Valeur | -| ------------------- | ---------------- | -------- | ---------------------------- | ------------ | -| Différence | Date - Date | Nombre | !2017-01-20! - !2017-01-01! | 19 | -| Addition | Date + Numérique | Date | !2017-01-20! !2017-01-20! | !2017-01-29! | -| Soustraction | Date - Numérique | Date | !2017-01-20! !2017-01-01! | !2017-01-11! | -| Egalité | Date = Date | Booléen | !2017-01-20! = !2017-01-01! | Vrai | -| | | | !2017-01-20! !2017-01-20! | Faux | -| Inégalité | Date # Date | Booléen | !2017-01-20! !2017-01-01! | Vrai | -| | | | !2017-01-20! !2017-01-20! | Faux | -| Supérieur à | Date > Date | Booléen | !2017-01-20! !2017-01-20! | Vrai | -| | | | !2017-01-20! !2017-01-20! | Faux | -| Inférieur à | Date < Date | Booléen | !2017-01-20! !2017-01-20! | Vrai | -| | | | !2017-01-20! !2017-01-20! | Faux | -| Supérieur ou égal à | Date >= Date | Booléen | !2017-01-20! !2017-01-20! | Vrai | -| | | | !2017-01-01!>=!2017-01-20! | Faux | -| Inférieur ou égal à | Date \<= Date | Booléen | !2017-01-01!\<=!2017-01-20! | Vrai | -| | | | !2017-01-20!\<=!2017-01-01! | Faux | +A null date is specified by _!00-00-00!_. + +**Tip:** The Method Editor includes a shortcut for entering a null date. To type a null date, enter the exclamation (!) character and press Enter. + +**Notes:** + +- For compatibility reasons, 4D accepts two-digit years to be entered. A two-digit year is assumed to be in the 20th or 21st century based on whether it is greater or less than 30, unless this default setting has been changed using the `SET DEFAULT CENTURY` command. +- If you have checked the "Use regional system settings" option (see Methods Page), you must use the date format defined in your system. Generally, in a US environment, dates are entered in the form month/day/year, with a slash "/" separating the values. + +## Date operators + +| Operation | Syntax | Returns | Expression | Value | +| ------------------------ | -------------- | ------- | ---------------------------- | ------------ | +| Date difference | Date – Date | Number | !2017-01-20! - !2017-01-01! | 19 | +| Day addition | Date + Number | Date | !2017-01-20! + 9 | !2017-01-29! | +| Day subtraction | Date – Number | Date | !2017-01-20! - 9 | !2017-01-11! | +| Equality | Date = Date | Booléen | !2017-01-01! =!2017-01-01! | True | +| | | | !2017-01-20! = !2017-01-01! | False | +| Inequality | Date # Date | Booléen | !2017-01-20! # !2017-01-01! | True | +| | | | !2017-01-20! # !2017-01-20! | False | +| Greater than | Date > Date | Booléen | !2017-01-20! > !2017-01-01! | True | +| | | | !2017-01-20! > !2017-01-20! | False | +| Less than | Date < Date | Booléen | !2017-01-01! < !2017-01-20! | True | +| | | | !2017-01-20! < !2017-01-20! | False | +| Greater than or equal to | Date >= Date | Booléen | !2017-01-20! >=!2017-01-01! | True | +| | | | !2017-01-01!>=!2017-01-20! | False | +| Less than or equal to | Date \<= Date | Booléen | !2017-01-01!\<=!2017-01-20! | True | +| | | | !2017-01-20!\<=!2017-01-01! | False | From 1cd5440d14c801e9f6ebf714c4f341da945484dc Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:56 +0100 Subject: [PATCH 037/311] New translations dt_null_undefined.md (French) --- .../fr/Concepts/dt_null_undefined.md | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/website/translated_docs/fr/Concepts/dt_null_undefined.md b/website/translated_docs/fr/Concepts/dt_null_undefined.md index 9647c28135fad6..2267003da0ddb8 100644 --- a/website/translated_docs/fr/Concepts/dt_null_undefined.md +++ b/website/translated_docs/fr/Concepts/dt_null_undefined.md @@ -3,25 +3,25 @@ id: null-undefined title: Null et Indefinie --- -Null et Undefined sont des types de données qui gèrent les cas où la valeur d'une expression n'est pas connue. +Null and Undefined are data types that handle cases where the value of an expression is not known. ## Null -Null est un type de données particulier avec une seule valeur possible : **null**. Cette valeur est retournée par une expression qui ne contient aucune valeur. +Null is a special data type with only one possible value: **null**. This value is returned by an expression that does not contain any value. -Dans le langage de 4D et pour les attributs des champs objets, les valeurs null sont gérées via la commande `Null`. Cette commande peut être utilisée avec les expressions suivantes pour fixer ou comparer la valeur null : +In the 4D language and for object field attributes, null values are managed through the `Null` function. This function can be used with the following expressions for setting or comparing the null value: -- attributs d'objets -- éléments de collections -- variables de type objet, collection, pointeur, image ou variant. +- object attributes +- collection elements +- variables of the object, collection, pointer, picture, or variant type. -## Indéfini +## Undefined -Indéfinie n'est pas véritablement un type de données. Une variable dite "indéfinie" est une variable n'ayant pas encore été définie. Une fonction utilisateur (c'est-à-dire une méthode projet qui retourne une valeur) peut retourner une valeur indéfinie si, à l'intérieur de la méthode, le résultat de la fonction ($0) est assigné à une expression indéfinie (une expression issue d'un calcul effectué avec au moins une variable indéfinie). Un champ ne peut pas être indéfini (la commande `Indefinie` retourne toujours Faux pour un champ). Une variable variant porte la valeur par défaut **indéfini**. +Undefined is not actually a data type. It denotes a variable that has not yet been defined. A function (a project method that returns a result) can return an undefined value if, within the method, the function result ($0) is assigned an undefined expression (an expression calculated with at least one undefined variable). A field cannot be undefined (the `Undefined` command always returns False for a field). A variant variable has **undefined** as default value. -## Exemples +## Examples -Cet exemple compare les différents résultats de la commande `Indefinie` et de la commande `Null` appliquées aux propriétés d'objets, en fonction du contexte : +Here are the different results of the `Undefined` command as well as the `Null` command with object properties, depending on the context: ```4d C_OBJECT($vEmp) @@ -29,12 +29,12 @@ $vEmp:=New object $vEmp.name:="Smith" $vEmp.children:=Null -$undefined:=Undefined($vEmp.name) // Faux -$null:=($vEmp.name=Null) //Faux +$undefined:=Undefined($vEmp.name) // False +$null:=($vEmp.name=Null) //False -$undefined:=Undefined($vEmp.children) // Faux -$null:=($vEmp.children=Null) //Vrai +$undefined:=Undefined($vEmp.children) // False +$null:=($vEmp.children=Null) //True -$undefined:=Undefined($vEmp.parent) // Vrai -$null:=($vEmp.parent=Null) //Vrai +$undefined:=Undefined($vEmp.parent) // True +$null:=($vEmp.parent=Null) //True ``` From 67c64a50984577af34ac8543bf7ad6c3433d9cd4 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:58 +0100 Subject: [PATCH 038/311] New translations dt_object.md (French) --- .../translated_docs/fr/Concepts/dt_object.md | 239 +++++++++--------- 1 file changed, 120 insertions(+), 119 deletions(-) diff --git a/website/translated_docs/fr/Concepts/dt_object.md b/website/translated_docs/fr/Concepts/dt_object.md index f02240d75c091f..8ed017d2858f4f 100644 --- a/website/translated_docs/fr/Concepts/dt_object.md +++ b/website/translated_docs/fr/Concepts/dt_object.md @@ -3,98 +3,99 @@ id: object title: Objet --- -Les variables, champs ou expressions de type objet peuvent contenir des données de divers types. La structure des objets "natifs" 4D est basée sur le principe classique des paires "propriété/valeur" (aussi appelées "attribut/valeur). La syntaxe de ces objets s’inspire du JSON : +Variables, fields or expressions of the Object type can contain various types of data. The structure of "native" 4D objects is based on the classic principle of "property/value" pairs. The syntax of these objects is based on JSON notation: -- Un nom de propriété est toujours un texte, par exemple "Nom". +- A property name is always a text, for example "Name". -- Une valeur de propriété peut être du type suivant : - - Nombre (réel, entier long, etc.) - - Texte +- A property value can be of the following type: + - number (Real, Integer, etc.) + - text - null - Booléen - - Pointeur (stocké tel quel, évalué à l’aide de la commande `JSON Stringify` ou lors d’une copie), - - Date (type date ou chaîne au format date ISO) - - Objet (les objets peuvent être imbriqués sur plusieurs niveaux) - - Image(*) + - pointer (stored as such, evaluated using the `JSON Stringify` command or when copying), + - date (date type or ISO date format string) + - object (objects can be nested on several levels) + - picture(*) - collection -(*)Lorsqu'elles sont exposées sous forme de texte dans le débogueur ou exportées en JSON, les propriétés d'objet de type image indiquent "[objet Image]". +(*)When exposed as text in the debugger or exported to JSON, picture object properties print "[object Picture]". -**Attention :** N'oubliez pas que les noms d'attributs tiennent compte des majuscules/minuscules. +**Warning:** Keep in mind that attribute names differentiate between upper and lower case. -Pour gérer les variables, champs ou expressions de type objet, vous pouvez utiliser la notation objet (cf. [Utiliser la notation objet](Concepts/dt_object.md#syntax-basics)) ou les commandes 4D du thème **Objets (Langage)**. A noter que des commandes spécifiques du thème Requêtes, telles que `CHERCHER PAR ATTRIBUT`, `CHERCHER PAR ATTRIBUT DANS SELECTION` ou `TRIER PAR ATTRIBUT` peuvent être utilisées pour traiter des champs objets. +You manage Object type variables, fields or expressions using the commands available in the **Objects (Language)** theme or through the object notation (see [Syntax basics](Concepts/dt_object.md#syntax-basics)). Note that specific commands of the Queries theme such as `QUERY BY ATTRIBUTE`, `QUERY SELECTION BY ATTRIBUTE`, or `ORDER BY ATTRIBUTE` can be used to carry out processing on object fields. -Chaque valeur de propriété accessible par la notation objet est considérée comme une expression. You can use such values wherever 4D expressions are expected: +Each property value accessed through the object notation is considered an expression. You can use such values wherever 4D expressions are expected: -- Dans le code 4D, soit écrites dans les méthodes (éditeur de méthodes) soit externalisées (formules, fichiers d'étiquettes traités par la commande PROCESS 4D TAGS ou le Serveur Web, fichiers d'export, documents 4D Write Pro, etc.), -- Dans les zones d'expressions du débogueur et l'explorateur d'exécution, -- Dans la liste de propriétés de l'éditeur de formulaires pour les objets formulaires : champ Variable ou Expression et plusieurs expressions de list box et colonnes (source de données, couleur de fond, style ou couleur de police). +- in 4D code, either written in the methods (Method editor) or externalized (formulas, 4D tags files processed by PROCESS 4D TAGS or the Web Server, export files, 4D Write Pro documents...), +- in the Expression areas of the Debugger and the Runtime explorer, +- in the Property list of the Form editor for form objects: Variable or Expression field as well as various selection list box and columns expressions (Data Source, background color, style, or font color). -## Initialisation +## Initialization -Les objets doivent être initialisés à l'aide, par exemple, de la commande `New object`, sinon une erreur de syntaxe sera générée à la suite d'une lecture ou d'une modification de leurs propriétés. +Objects must have been initialized, for example using the `New object` command, otherwise trying to read or modify their properties will generate a syntax error. -Exemple : +Example: ```4d - C_OBJET($obVar) //création d'une variable 4D de type objet. $obVar:=Creer objet//initialisation de l'objet et assignation à la variable 4D + C_OBJECT($obVar) //creation of an object type 4D variable + $obVar:=New object //initialization of the object and assignment to the 4D variable ``` -### Objet standard ou partagé +### Regular or shared object -Vous pouvez créer deux types d'objets : +You can create two types of objects: -- standard (non partagés), à l'aide de la commande `Creer objet`. Ces objets peuvent être modifiés sans contrôle d'accès spécifique mais ne peuvent pas être partagés entre les process. -- partagés, à l'aide de la commande `New shared object`. Le contenu de ces objets peut être partagé entre les process, y compris des process (thread) préemptifs. L'accès à ces objets doit être contrôlé via des structures `Use...End use`. Pour plus d'informations, veuillez vous reporter à la page [Objets partagés et collections partagées](Concepts/shared.md). +- regular (non-shared) objects, using the `New object` command. These objects can be edited without any specific access control but cannot be shared between processes. +- shared objects, using the `New shared object` command. These objects can be shared between processes, including preemptive threads. Access to these objects is controlled by `Use...End use` structures. For more information, refer to the [Shared objects and collections](Concepts/shared.md) section. -## Principes de syntaxe +## Syntax basics -La notation objet est utilisée pour accéder aux valeurs de propriétés d'objets via des séquences de symboles et de propriétés référencées (tokens). +Object notation can be used to access object property values through a chain of tokens. -### Propriétés des objets +### Object properties -Avec la notation objet, il est possible d'accéder aux propriétés d'objets (aussi appelées attributs d'objets) de deux façons : +With object notation, object properties can be accessed in two ways: -- à l'aide du symbole "point" : > objet.NomPropriété +- using a "dot" symbol: > object.propertyName -Exemple : +Example: ```4d employee.name:="Smith" ``` -- à l'aide d'une chaîne entre crochets : > objet["NomPropriété"] +- using a string within square brackets: > object["propertyName"] -Voici quelques exemples : +Examples: ```4d $vName:=employee["name"] - //ou : + //or also: $property:="name" $vName:=employee[$property] ``` -Comme la valeur d'une propriété d'objet peut elle-même être un objet ou une collection, la notation objet requiert une séquence de symboles pour accéder aux sous-propriétés, par exemple : +Since an object property value can be an object or a collection, object notation accepts a sequence of symbols to access sub-properties, for example: ```4d $vAge:=employee.children[2].age ``` -La notation objet est utilisable avec tout élément de langage qui contient ou retourne un objet, c'est-à-dire : +Object notation is available on any language element that can contains or returns an object, i.e: -- avec les **objets** eux-mêmes (stockés dans des variables, champs, propriétés d'objets, tableaux d'objets ou éléments de collections). Voici quelques exemples : +- **Objects** themselves (stored in variables, fields, object properties, object arrays, or collection elements). Examples: ```4d $age:=$myObjVar.employee.age //variable - $addr:=[Emp]data_obj.address //champ - $city:=$addr.city //propriété d'un objet - $pop:=$aObjCountries{2}.population //tableau d'objets - $val:=$myCollection[3].subvalue //élément de collection + $addr:=[Emp]data_obj.address //field + $city:=$addr.city //property of an object + $pop:=$aObjCountries{2}.population //object array + $val:=$myCollection[3].subvalue //collection element ``` -- avec les **commandes 4D** qui retournent des objets. Exemple : +- **4D commands** that return objects. Example: ```4d - $measures:=Lire mesures base.DB.tables + $measures:=Get database measures.DB.tables ``` -- avec les **méthodes projet** qui retournent des objets. Exemple : +- **Project methods** that return objects. Example: ```4d // MyMethod1 @@ -105,25 +106,25 @@ La notation objet est utilisable avec tout élément de langage qui contient ou $result:=MyMethod1.a //10 ``` -- **Collections** Exemple : +- **Collections** Example: ```4d - myColl.length //taille de la collection + myColl.length //size of the collection ``` -### Pointeurs +### Pointers -**Note :** Les objets étant toujours passés par référence, l'utilisation de pointeurs n'est généralement pas nécessaire. En passant un objet, 4D utilise automatiquement, en interne, un mécanisme similaire à un pointeur pour minimiser la mémoire nécessaire, pour vous permettre de modifier le paramètre et de retourner les modifications. Par conséquent, vous n'aurez pas besoin d'utiliser des pointeurs. Cependant, si vous souhaitez utiliser des pointeurs, il est possible d'accéder aux valeurs de propriétés via des pointeurs. +**Preliminary Note:** Since objects are always passed by reference, there is usually no need to use pointers. While just passing the object, internally 4D automatically uses a mechanism similar to a pointer, minimizing memory need and allowing you to modify the parameter and to return modifications. As a result, you should not need to use pointers. However, in case you want to use pointers, property values can be accessed through pointers. -La notation objet pour les pointeurs est semblable à la notation objet standard, à la seule différence que le symbole "point" doit être omis. +Using object notation with pointers is very similar to using object notation directly with objects, except that the "dot" symbol must be omitted. -- Accès direct : -> pointeurObjet->nomPropriété +- Direct access: +> pointerOnObject->propertyName -- Accès par le nom : -> pointeurObjet-> nomPropriété"] +- Access by name: +> pointerOnObject->["propertyName"] -Exemple : +Example: ```4d C_OBJECT(vObj) @@ -134,149 +135,149 @@ Exemple : x:=vPtr->a //x=10 ``` -### Valeur Null +### Null value -Lorsque la notation objet est utilisée, la valeur **null** est prise en charge via la commande **Null**. Cette commande peut être utilisée pour affecter ou comparer la valeur null aux propriétés d'objets ou aux éléments de collections, par exemple : +When using the object notation, the **null** value is supported though the **Null** command. This command can be used to assign or compare the null value to object properties or collection elements, for example: ```4d myObject.address.zip:=Null If(myColl[2]=Null) ``` -Pour plus d'informations, veuillez vous reporter à la description de la commande `Null`. +For more information, please refer to the `Null` command description. -### Valeur Indéfinie +### Undefined value -L'évaluation d'une propriété d'objet peut parfois produire une valeur indéfinie (undefined). En règle générale, lorsque le code tente de lire ou d'affecter des expressions indéfinies, 4D génère des erreurs, hormis dans les cas décrits ci-dessous : +Evaluating an object property can sometimes produce an undefined value. Typically when trying to read or assign undefined expressions, 4D will generate errors. This does not happen in the following cases: -- La lecture d'une propriété d'un objet ou d'une valeur indéfini(e) retourne Indéfini ; l'affectation d'une valeur indéfinie à des variables (hors tableaux) a le même effet qu'appeler `CLEAR VARIABLE` avec elles : +- Reading a property of an undefined object or value returns undefined; assigning an undefined value to variables (except arrays) has the same effect as calling `CLEAR VARIABLE` with them: ```4d - C_OBJET($o) - C_ENTIER Long($val) - $val:=10 //$val=10 - $val:=$o.a //$o.a est indéfini (pas d'erreur), et affecter cette valeur efface la variable - //$val=0 + C_OBJECT($o) + C_LONGINT($val) + $val:=10 //$val=10 + $val:=$o.a //$o.a is undefined (no error), and assigning this value clears the variable + //$val=0 ``` -- La lecture de la propriété **length** d'une collection indéfinie renvoie 0 : +- Reading the **length** property of an undefined collection produces 0: ```4d - C_COLLECTION($c) //variable créée mais pas de collection définie - $size:=$c.length //$size = 0 + C_COLLECTION($c) //variable created but no collection is defined + $size:=$c.length //$size = 0 ``` -- Une valeur indéfinie passée en paramètre à une méthode projet est automatiquement convertie en 0 ou en "" en fonction de la déclaration du type du paramètre. +- An undefined value passed as parameter to a project method is automatically converted to 0 or "" according to the declared parameter type. ```4d C_OBJECT($o) - mymethod($o.a) //passage d'un paramètre indéfini + mymethod($o.a) //pass an undefined parameter - //Dans la méthode mymethod - C_TEXT($1) //Paramètre de type texte - // $1 contient "" + //In mymethod method + C_TEXT($1) //parameter type is text + // $1 contains "" ``` -- Une expression de condition est automatiquement convertie à Faux lorsque son évaluation donne Indéfinie avec les mots-clés Si et Au cas ou : +- A condition expression is automatically converted to false when evaluating to undefined with the If and Case of keywords: ```4d C_OBJECT($o) - If($o.a) // faux + If($o.a) // false End if Case of - :($o.a) // faux + :($o.a) // false End case ``` -- L'affectation d'une valeur indéfinie à une propriété d'objet existante réinitialise ou efface sa valeur, selon son type : - - Objet, collection, pointeur : Null - - Image : image vide - - Booléen : False - - Chaîne : "" - - Numérique : 0 - - Date : !00-00-00! si la base utilise le type date pour les objets, sinon "" - - Heure : 0 (nombre de ms) - - Indéfini, Null : pas de changement +- Assigning an undefined value to an existing object property reinitializes or clears its value, depending on its type: + - Object, collection, pointer: Null + - Picture: Empty picture + - Boolean: False + - String: "" + - Number: 0 + - Date: !00-00-00! if "Use date type instead of ISO date format in objects" setting is enabled, otherwise "" + - Time: 0 (number of ms) + - Undefined, Null: no change ```4d C_OBJECT($o) - $o:=New object("a";2) - $o.a:=$o.b //$o.a=0 + $o:=New object("a";2) + $o.a:=$o.b //$o.a=0 ``` -- L'affectation d'une valeur indéfinie à une propriété d'objet inexistante ne fait rien. +- Assigning an undefined value to a non existing object property does nothing. -Lorsque des expressions d'un type donné sont attendues dans votre code 4D, vous pouvez vous assurer qu'elles auront le type souhaité même en cas de valeur Indéfinie en les encadrant avec la commande de transtypage 4D appropriée : `String`, `Num`, `Time`, `Date`, `Bool`. Ces commandes retournent une valeur vide du type spécifié lorsque l'expression est évaluée à Indéfinie. Par exemple: +When expressions of a given type are expected in your 4D code, you can make sure they have the correct type even when evaluated to undefined by surrounding them with the appropriate 4D cast command: `String`, `Num`, `Date`, `Time`, `Bool`. These commands return an empty value of the specified type when the expression evaluates to undefined. For example: ```4d - $myString:=Lowercase(String($o.a.b)) //pour être sûr d'obtenir une valeur texte même si indéfinie - //afin d'éviter des erreurs dans le code + $myString:=Lowercase(String($o.a.b)) //make sure you get a string value even if undefined + //to avoid errors in the code ``` -## Identifiants de propriétés d'objets +## Object property identifiers -Les règles de nommage des tokens (noms des propriétés d'objets auxquelles on accède via la notation objet) sont plus restrictives que celles qui s'appliquent aux [noms d'objets 4D standard](identifiers.md). Ils doivent se conformer à la grammaire des identificateurs JavaScript (voir [la norme ECMA Script](https://www.ecma-international.org/ecma-262/5.1/#sec-7.6)): +Token member names (i.e., object property names accessed using the object notation) are more restrictive than [standard 4D object names](identifiers.md). They must comply with JavaScript Identifier Grammar (see [ECMA Script standard](https://www.ecma-international.org/ecma-262/5.1/#sec-7.6)): -- le premier caractère doit être une lettre, un trait de soulignement (_) ou le symbole dollar ($), -- les autres caractères peuvent être des lettres, des chiffres, des traits de soulignement ou des symboles dollar (les espaces sont proscrits), -- ils différencient les caractères majuscules/minuscules. +- the first character must be a letter, an underscore (_), or a dollar sign ($), +- subsequent characters may be any letter, digit, an underscore or dollar sign (space characters are NOT allowed), +- they are case sensitive. -**Notes :** +**Note:** -- L'utilisation d'un champ comme indice de collection, par exemple a.b[[Table1]Id], n'est pas autorisé. Vous devez utiliser une variable intermédiaire. -- La création d'attributs d'objets à l'aide d'une chaîne entre crochets permet de s'affranchir des règles d'ECMA Script. Par exemple, l'attribut `$o["My Att"]` est valide dans 4D, malgré l'espace. Dans ce cas cependant, il ne sera pas possible d'utiliser la notation à points et l'autocomplétion avec cet attribut. +- Using a table field as a collection index, for example a.b[[Table1]Id], is not allowed. You must use an intermediary variable. +- Creating object attributes using a string in square brackets allows you to override the ECMA Script rules. For example, the `$o["My Att"]` attribute is valid in 4D, despite the space. In this case, however, it will not be possible to use dot notation and autocomplete features with this attribute. -## Exemples +## Examples -L'utilisation de la notation objet simplifie grandement le code 4D de manipulation des objets. A noter toutefois que la notation utilisant les commandes "OB" reste entièrement prise en charge. +Using object notation simplifies the 4D code while handling objects. Note however that the command-based notation is still fully supported. -- Ecriture et lecture de propriétés d'objets (cet exemple compare la notation objet et la syntaxe avec commandes) : +- Writing and reading objects (this example compares object notation and command notation): ```4d - // Utilisation de la notation objet - C_OBJECT($myObj) //déclaration d'une variable objet 4D - $myObj:=New object //création d'un objet et affectation à la variable + // Using the object notation + C_OBJECT($myObj) //declares a 4D variable object + $myObj:=New object //creates an object and assigns to the variable $myObj.age:=56 $age:=$myObj.age //56 - // Utilisation de la syntaxe par commande - C_OBJECT($myObj2) //déclaration d'une variable objet 4D - OB SET($myObj2;"age";42) //création d'un objet et création de la propriété age + // Using the command notation + C_OBJECT($myObj2) //declares a 4D variable object + OB SET($myObj2;"age";42) //creates an object and adds the age property $age:=OB Get($myObj2;"age") //42 - // Bien entendu, les deux notations peuvent être utilisées simultanément + // Of course, both notations can be mixed C_OBJECT($myObj3) OB SET($myObj3;"age";10) $age:=$myObj3.age //10 ``` -- Création de propriétés et affectation de valeurs, y compris d'autres objets : +- Create a property and assign values, including objects: ```4d C_OBJECT($Emp) $Emp:=New object - $Emp.city:="London" //crée la propriété city avec la valeur "London" - $Emp.city:="Paris" //modifie la propriété city + $Emp.city:="London" //creates the city property and sets its value to "London" + $Emp.city:="Paris" //modifies the city property $Emp.phone:=New object("office";"123456789";"home";"0011223344") - //crée la propriété phone avec un autre objet comme valeur + //creates the phone property and sets its value to an object ``` -- Lire une valeur dans un sous-objet est très simple avec la notation objet : +- Get a value in a sub-object is very simple using the object notation: ```4d $vCity:=$Emp.city //"Paris" $vPhone:=$Emp.phone.home //"0011223344" ``` -- Vous pouvez accéder aux propriétés d'objets via des chaînes grâce à l'opérateur [ ] +- You can access properties as strings using the [ ] operator ```4d - $Emp["city"]:="Berlin" //modification de la propriété city - //cette syntaxe est utile pour créer des propriétés à l'aide de variables + $Emp["city"]:="Berlin" //modifies the city property + //this can be useful for creating properties through variables C_TEXT($addr) $addr:="address" For($i;1;4) - $Emp[$addr+Chaine($i)]:="" -End for - // crée 4 propriétés vides "address1...address4" dans l'objet $Emp + $Emp[$addr+String($i)]:="" + End for + // creates 4 empty properties "address1...address4" in the $Emp object ``` From 83ca1cfa7b19602d7a5c67997be96652af561beb Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:01 +0100 Subject: [PATCH 039/311] New translations methods.md (French) --- .../translated_docs/fr/Concepts/methods.md | 228 +++++++++--------- 1 file changed, 113 insertions(+), 115 deletions(-) diff --git a/website/translated_docs/fr/Concepts/methods.md b/website/translated_docs/fr/Concepts/methods.md index 7b28a8f9b0198e..613babe3a77664 100644 --- a/website/translated_docs/fr/Concepts/methods.md +++ b/website/translated_docs/fr/Concepts/methods.md @@ -4,143 +4,143 @@ title: Méthodes --- -Une méthode est un morceau de code qui exécute une ou plusieurs actions. Une méthode est composée de plusieurs lignes d’instructions. Une ligne d’instructions effectue une action. Cette ligne d’instruction peut être simple ou complexe. Cette ligne peut être aussi longue que vous voulez (elle peut comporter jusqu’à 32 000 caractères, ce qui est normalement suffisant pour la plupart des instructions). +A method is basically a piece of code that executes one or several actions. A method is composed of statements; each statement consists of one line in the method. A statement performs an action, and may be simple or complex. Although a statement is always one line, that one line can be as long as needed (up to 32,000 characters, which is probably enough for most tasks). -La taille maximale d’une méthode est limitée à 2 Go de texte ou 32 000 lignes de code. +The maximum size of a method is limited to 2 GB of text or 32,000 lines of code. -## Types de méthodes +## Method Types -Dans le langage 4D, il existe plusieurs catégories de méthodes : La catégorie dépend de la façon dont elle a été appelée : La catégorie dépend de la façon dont elle a été appelée : La catégorie dépend de la façon dont elle a été appelée : +In the 4D Language, there are several categories of methods. The category depends on how they can be called: -| Type | Contexte d'appel | Accepte les paramètres | Description | -| -------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Méthode** | À la demande, lorsque le nom de la méthode projet est appelé (voir [Appel de méthodes de projet](#calling-project-methods)) | Oui | Peut contenir du code pour exécuter des actions personnalisées. Une fois que votre méthode projet est créée, elle devient partie intégrante du langage du projet. | -| **Méthode objet (widget)** | Automatique, lorsqu'un événement implique l'objet auquel la méthode est associée | Non | Propriété d'un objet formulaire (également appelé widget) | -| **Méthode formulaire** | Automatique, lorsqu'un événement implique le formulaire auquel la méthode est associée | Non | Propriété d'un formulaire. Vous pouvez utiliser une méthode formulaire pour gérer les données et les objets, mais il est généralement plus simple et plus efficace d'utiliser une méthode objet dans ces cas de figure. | -| **Trigger** (ou *méthode table*) | Automatique, chaque fois que vous manipulez les enregistrements d'une table (Ajouter, Supprimer, Modifier) | Non | Propriété d'une table. Les triggers sont des méthodes qui peuvent éviter les opérations 'illégales' effectuées avec les enregistrements de votre base. | -| **Méthode base** | Automatique, lorsqu'un événement se produit sur la session de travail | Oui (prédéfini) | Il existe 16 méthodes base dans 4D. Voir la section Méthodes bases | +| Type | Calling context | Accepts parameters | Description | +| -------------------------------- | ----------------------------------------------------------------------------------------------------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Project method** | On demand, when the project method name is called (see [Calling project methods](#calling-project-methods)) | Yes | Can contain any code to execute any custom actions. Once a project method is created, it becomes part of the language of the project. | +| **Object (widget) method** | Automatic, when an event involves the object to which the method is attached | No | Property of a form object (also called widget) | +| **Form method** | Automatic, when an event involves the form to which the method is attached | No | Property of a form. You can use a form method to manage data and objects, but it is generally simpler and more efficient to use an object method for these purposes. | +| **Trigger** (aka *Table method*) | Automatic, each time that you manipulate the records of a table (Add, Delete and Modify) | No | Property of a table. Triggers are methods that can prevent “illegal” operations with the records of your database. | +| **Database method** | Automatic, when a working session event occurs | Yes (predefined) | There are 16 database methods in 4D. See Database methods section | > The 4D Language also supports **Class functions**, that can be called in the context of an object instance. Class functions can be built-in (*e.g.* `collection.orderBy()` or `entity.save()`), or [created by the 4D developer](classes.md#class-function). -## Méthodes projet +## Calling Project Methods -Une méthode projet peut tenir les rôles suivants, en fonction de la manière dont elle est exécutée et utilisée : +A project method can have one of the following roles, depending on how it is executed and used: -- Sous-routine -- Objet formule -- Méthode de menu -- Méthode de gestion de process -- Méthode de gestion d’événements et d'erreurs +- Subroutine +- Object formula +- Menu method +- Process method +- Event or Error catching method -### Sous-routines +### Subroutines -Une sous-routine est une méthode projet qui peut être considérée comme une méthode asservie. D’autres méthodes lui demandent d’effectuer des tâches. Une sous-routine qui retourne une valeur est appelée une fonction. +A subroutine is a project method that can be thought of as a servant. It performs those tasks that other methods request it to perform. A function is a subroutine that returns a value to the method that called it. -Lorsque vous créez une méthode projet, elle devient partie intégrante du langage du prjoet dans lequel elle a été créée. Vous pouvez alors l'appeler à partir d'autres méthodes (méthode projet, méthode objet, etc.) de la même manière que vous appelez les commandes intégrées de 4D. Une méthode projet utilisée de cette manière est appelée une sous-routine. +When you create a project method, it becomes part of the language of the project in which you create it. You can then call the project method from another method (project method, object method...) in the same way that you call 4D’s built-in commands. A project method used in this way is called a subroutine. -L'utilisation de sous-routines procure les avantages suivants : +You use subroutines to: -- Réduction du code répétitif, -- Clarification des méthodes, -- Modification plus facile des méthodes, -- Création de code modulaire +- Reduce repetitive coding +- Clarify your methods +- Facilitate changes to your methods +- Modularize your code -Imaginons par exemple que vous travaillez sur un projet de clients. A mesure que vous construisez le projet, vous vous apercevez que vous répétez souvent certaines tâches, telles que la recherche d’un client et la modification de son enregistrement. Le code nécessaire à l’accomplissement de cette opération pourrait être : +For example, let’s say you have a project of customers. As you customize the project, you find that there are some tasks that you perform repeatedly, such as finding a customer and modifying his or her record. The code to do this might look like this: ```4d - // Recherche d'un client - QUERY BY EXAMPLE([Clients]) - // Sélection du formulaire entrée - FORM SET INPUT([Clients];"Saisie de données") - // Modification de l'enregistrement du client - MODIFY RECORD([Clients]) + // Look for a customer + QUERY BY EXAMPLE([Customers]) + // Select the input form + FORM SET INPUT([Customers];"Data Entry") + // Modify the customer's record + MODIFY RECORD([Customers]) ``` -Si vous n’utilisez pas de sous-routines, vous devrez écrire ce code à chaque fois que vous voudrez modifier l’enregistrement d’un client. Si cette opération peut être réalisée dans dix endroits différents de votre projet, vous devrez la réécrire dix fois. Grâce aux sous-routines, vous ne l’écrirez qu’une seule fois en tout. C’est le premier avantage des sous-routines : réduire la quantité de code à écrire. +If you do not use subroutines, you will have to write the code each time you want to modify a customer’s record. If there are ten places in your project where you need to do this, you will have to write the code ten times. If you use subroutines, you will only have to write it once. This is the first advantage of subroutines—to reduce the amount of code. -Si le code ci-dessus était une méthode projet appelée `MODIFY_CUSTOMER`, vous l’exécuteriez simplement en inscrivant son nom dans une autre méthode. Par exemple, pour modifier l’enregistrement d’un client puis l’imprimer, vous n’auriez qu’à écrire : +If the previously described code was a method called `MODIFY_CUSTOMER`, you would execute it simply by using the name of the method in another method. For example, to modify a customer’s record and then print the record, you would write this method: ```4d MODIFY_CUSTOMER PRINT SELECTION([Customers]) ``` -Cette possibilité simplifie énormément vos méthodes. Dans l’exemple ci-dessus, il n’est pas nécessaire de savoir comment fonctionne la méthode `MODIFY_CUSTOMER`, mais uniquement ce qu’elle fait. C’est le deuxième avantage que vous pouvez tirer de l’utilisation de sous-routines : la clarification de votre code. Ainsi, ces méthodes deviennent en quelque sorte des extensions du langage de 4D. +This capability simplifies your methods dramatically. In the example, you do not need to know how the `MODIFY_CUSTOMER` method works, just what it does. This is the second reason for using subroutines—to clarify your methods. In this way, your methods become extensions to the 4D language. -Si vous devez modifier votre mode de recherche des clients, comme dans notre exemple, il vous suffit de modifier une seule méthode, et non dix. C’est un autre avantage des sous-routines : faciliter les modifications de votre code. +If you need to change your method of finding customers in this example project, you will need to change only one method, not ten. This is the next reason to use subroutines—to facilitate changes to your methods. -Avec les sous-routines, vous rendez votre code modulaire. Cela signifie simplement que vous dissociez votre code en modules (sous-routines), chacun d’entre eux effectuant une tâche logique. Examinez le code suivant, tiré d’un projet de gestion de compte courant : +Using subroutines, you make your code modular. This simply means dividing your code into modules (subroutines), each of which performs a logical task. Consider the following code from a checking account project: ```4d - FIND_CLEARED _CHECKS // Rechercher les chèques émis - RECONCILE_ACCOUNT // Rapprocher le compte -PRINT_CHECK_BOOK_REPORT // Imprimer un relevé + FIND_CLEARED_CHECKS //Find the cleared checks + RECONCILE_ACCOUNT //Reconcile the account + PRINT_CHECK_BOOK_REPORT //Print a checkbook report ``` -Même pour quelqu’un qui ne connaît pas le projet, le code est clair. Il n’est pas nécessaire d’examiner chaque sous-routine. Elles peuvent contenir de nombreuses lignes d’instructions et effectuer des opérations complexes, mais l’important est ce qu’elles font. Nous vous conseillons de découper votre code en tâches logiques, ou modules, à chaque fois que c’est possible. +Even for someone who doesn’t know the project, it is clear what this code does. It is not necessary to examine each subroutine. Each subroutine might be many lines long and perform some complex operations, but here it is only important that it performs its task. We recommend that you divide your code into logical tasks, or modules, whenever possible. -### Objet formule +### Object formulas -Vous pouvez encapsuler vos méthodes projets dans les objets **formule** et les appeler à partir de vos objets. +You can encapsulate your project methods in **formula** objects and call them from your objects. -The `Formula` or `Formula from string` commands allow you to create native formula objects that you can encapsulate in object properties. Vous pouvez ainsi appliquer vos méthodes objets personnalisées. +The `Formula` or `Formula from string` commands allow you to create native formula objects that you can encapsulate in object properties. It allows you to implement custom object methods. -To execute a method stored in an object property, use the **( )** operator after the property name. Par exemple: +To execute a method stored in an object property, use the **( )** operator after the property name. For example: ```4d //myAlert ALERT("Hello world!") ``` -`myAlert` peut ensuite être encapsulé dans n'importe quel objet et peut être appelé : +Then `myAlert` can be encapsulated in any object and called: ```4d C_OBJECT($o) $o:=New object("custom_Alert";Formula(myAlert)) -$o.custom_Alert() //affiche "Hello world!" +$o.custom_Alert() //displays "Hello world!" ``` -La syntaxe avec des crochets est également prise en charge : +Syntax with brackets is also supported: ```4d -$o["custom_Alert"]() //affiche "Hello world!" +$o["custom_Alert"]() //displays "Hello world!" ``` -Vous pouvez appeler votre formule en lui [passant des paramètres](Concepts/parameters.md) $1, $2, etc., tout comme pour les méthodes projet de 4D : +You can also [pass parameters](Concepts/parameters.md) to your formula when you call it by using $1, $2… just like with 4D project methods: ```4d -//méthode fullName +//fullName method C_TEXT($0;$1;$2) $0:=$1+" "+$2 ``` -Vous pouvez encapsuler `fullName` dans un objet : +You can encapsulate `fullName` in an object: ```4d C_OBJECT($o) $o:=New object("full_name";Formula(fullName)) $result:=$o.full_name("John";"Smith") //$result = "John Smith" -// équivalent à $result:=fullName("param1";"param2") +// equivalent to $result:=fullName("param1";"param2") ``` -Lorsqu'elles sont associées à la fonction `This`, ces méthodes objets vous permettent d'écrire du code générique très puissant. Par exemple: +Combined with the `This`function, such object methods allow writing powerful generic code. For example: ```4d -//méthode fullName2 +//fullName2 method C_TEXT($0) $0:=This.firstName+" "+This.lastName ``` -La méthode agit ensuite comme un nouvel attribut calculé qui peut être ajoutée aux autres attributs : +Then the method acts like a new, calculated attribute that can be added to other attributes: ```4d C_OBJECT($o) $o:=New object("firstName";"Jim";"lastName";"Wesson") -$o.fullName:=Formula(fullName2) //ajouter la méthode +$o.fullName:=Formula(fullName2) //add the method $result:=$o.fullName() //$result = "Jim Wesson" @@ -148,103 +148,101 @@ $result:=$o.fullName() -A note que même si elle n'a pas de paramètres, une méthode objet devant être exécutée doit être appelée avec des parenthèses ( ). En appelant uniquement une seule propriété, une nouvelle référence à la formule sera retournée (et ne sera pas exécutée) : +Note that, even if it does not have parameters, an object method to be executed must be called with ( ) parenthesis. Calling only the object property will return a new reference to the formula (and will not execute it): ```4d -$o:=$f.message //retourne l'objet formule en $o +$o:=$f.message //returns the formula object in $o ``` -### Méthodes de menu -Une méthode de menu est appelée lorsque la commande de menu personnalisé à laquelle elle est associée est sélectionnée. Vous assignez la méthode à la commande de menu dans l’éditeur de menus de 4D. Lorsque l’utilisateur sélectionne la commande de menu, la méthode est exécutée. En créant des menus personnalisés qui appellent des méthodes de menu qui exécutent des actions spécifiques, vous créez des interfaces personnalisées pour vos applications de bureau. +### Menu Methods +A menu method is invoked when you select the custom menu command to which it is attached. You assign the method to the menu command using the Menu editor or a command of the "Menus" theme. The method executes when the menu command is chosen. By creating custom menus with menu methods that perform specific actions, you create custom interfaces for your desktop applications. -Les commandes de menus personnalisés peuvent déclencher une ou plusieurs actions. Par exemple, une commande de menu de saisie d’enregistrements peut appeler une méthode effectuant deux actions : afficher le formulaire entrée approprié et appeler la commande `AJOUTER ENREGISTREMENT` jusqu’à ce que l’utilisateur annule la saisie de nouveaux enregistrements. +Custom menu commands can cause one or more activities to take place. For example, a menu command for entering records might call a method that performs two tasks: displaying the appropriate input form, and calling the `ADD RECORD` command until the user cancels the data entry activity. -L’automatisation de séquences d’actions est une possibilité très puissante du langage de programmation de 4D. A l’aide des menus personnalisés, vous pouvez automatiser des séquences de tâches, vous permettez aux utilisateurs de naviguer plus facilement dans votre application. +Automating sequences of activities is a very powerful capability of the programming language. Using custom menus, you can automate task sequences and thus provide more guidance to users of the application. -### Méthodes de gestion de process +### Process Methods -Une **méthode projet** est une méthode projet appelée lorsqu’un process est démarré. Le process existera tant que la méthode sera en cours d'exécution. A noter qu'une méthode de menu associée à une commande de menu pour laquelle la propriété *Démarrer un nouveau process* est sélectionnée, est aussi la méthode de gestion de process pour le process créé. +A **process method** is a project method that is called when a process is started. The process lasts only as long as the process method continues to execute, except if it is a Worker process. Note that a menu method attached to a menu command with *Start a New Process* property is also the process method for the newly started process. -### Méthodes de gestion d’événements et d'erreurs -Une **méthode de gestion d’événements** est une méthode dédiée à la gestion des événements, qui s'exécute dans un process différent de celui de la méthode de gestion des process. Généralement, pour la gestion des événements, vous pouvez laisser 4D faire le gros du travail. Par exemple, lors de la saisie de données, 4D détecte les clics souris et les touches enfoncées, puis appelle les méthodes objet et formulaire correspondantes, vous permettant ainsi de prévoir dans ces méthodes les traitements appropriés aux événements. Pour plus d'informations, reportez-vous à la description de la commande `APPELER SUR EVENEMENT`. +### Event and Error catching Methods +An **event catching method** runs in a separate process as the process method for catching events. Usually, you let 4D do most of the event handling for you. For example, during data entry, 4D detects keystrokes and clicks, then calls the correct object and form methods so you can respond appropriately to the events from within these methods. For more information, see the description of the command `ON EVENT CALL`. -Une **méthode de gestion d’erreurs** est une méthode projet d'interruption. Elle s'exécute à l'intérieur du process dans lequel elle a été installée à chaque fois qu'une erreur se produit. Pour plus d'informations, reportez-vous à la description de la commande `APPELER SUR ERREUR`. +An **error catching method** is an interrupt-based project method. Each time an error or an exception occurs, it executes within the process in which it was installed. For more information, see the description of the command `ON ERR CALL`. -## Méthode projet récursives +## Recursive Project Methods -Des méthodes projet peuvent s'appeler les unes les autres. Par exemple: +Project methods can call themselves. For example: -- Une méthode A peut appeler une méthode B, qui appelle A, donc A appelle B de nouveau, etc. -- Une méthode peut s'appeler elle-même. +- The method A may call the method B which may call A, so A will call B again and so on. +- A method can call itself. -Cela s'appelle la récursivité. Le langage de 4D supporte pleinement la récursivité. +This is called recursion. The 4D language fully supports recursion. -Examinons l'exemple suivant : Examinons l'exemple suivant : vous disposez d'une table `[Amis et relations]` composée de l'ensemble de champs suivant (très simplifié) : -- `[Amis et parents]Nom` -- `[Amis et parents]Enfant'Nom` +Here is an example. Let’s say you have a `[Friends and Relatives]` table composed of this extremely simplified set of fields: +- `[Friends and Relatives]Name` +- `[Friends and Relatives]ChildrensName` -Pour cet exemple, nous supposons que les valeurs des champs sont uniques (il n'existe pas deux personnes avec le même nom). A partir d'un nom, vous voulez écrire la phrase “Un de mes amis, Pierre, qui est le rejeton de Paul qui est le rejeton de Martine qui est le rejeton de Robert qui est le rejeton de Gertrude, fait cela pour gagner sa vie !” : +For this example, we assume the values in the fields are unique (there are no two persons with the same name). Given a name, you want to build the sentence “A friend of mine, John who is the child of Paul who is the child of Jane who is the child of Robert who is the child of Eleanor, does this for a living!”: -1. Vous pouvez procéder de la manière suivante : +1. You can build the sentence in this way: ```4d - $vsName:=Request("Saisissez le nom :";"Pierre") - Si(OK=1) - QUERY([Amis et parents];[Amis et parents]Nom=$vsNom) - If(Records in selection([Amis et parents])>0) - $vtHistoireComplète:="Un de mes amis, "+$vsNom + $vsName:=Request("Enter the name:";"John") + If(OK=1) + QUERY([Friends and Relatives];[Friends and Relatives]Name=$vsName) + If(Records in selection([Friends and Relatives])>0) + $vtTheWholeStory:="A friend of mine, "+$vsName Repeat - QUERY([Amis et parents];[Amis et parents]Enfant'Nom=$vsNom) - $vlResultRecherche:=Records in selection([Amis et parents]) - If($vlResultRecherche>0) - $vtHistoireComplète:=$vtHistoireComplète+" qui est le rejeton de "+[Amis et parents]Nom - $vsNom:=[Amis et parents]Nom + QUERY([Friends and Relatives];[Friends and Relatives]ChildrensName=$vsName) + $vlQueryResult:=Records in selection([Friends and Relatives]) + If($vlQueryResult>0) + $vtTheWholeStory:=$vtTheWholeStory+" who is the child of "+[Friends and Relatives]Name + $vsName:=[Friends and Relatives]Name End if - Until($vlResultRecherche=0) - $vtHistoireComplète:=$vtHistoireComplète+", fait cela pour gagner sa vie !" - ALERT($vtHistoireComplète) + Until($vlQueryResult=0) + $vtTheWholeStory:=$vtTheWholeStory+", does this for a living!" + ALERT($vtTheWholeStory) End if End if ``` -2. Vous pouvez également procéder ainsi : +2. You can also build it this way: ```4d - $vsNom:=Request("Saisissez le nom :";"Pierre") - If(OK=1) - QUERY([Amis et parents];[Amis et parents]Nom=$vsNom) - If(Records in selection([Amis et parents])>0) - ALERT("Un de mes amis, "+Généalogie de($vsNom)+", fait cela pour gagner sa vie !") - End if - End if + $vsName:=Request("Enter the name:";"John") + If(OK=1) + QUERY([Friends and Relatives];[Friends and Relatives]Name=$vsName) + If(Records in selection([Friends and Relatives])>0) + ALERT("A friend of mine, "+Genealogy of($vsName)+", does this for a living!") End if End if ``` -en utilisant la fonction récursive `Généalogie de` suivante : +with the recursive function `Genealogy of` listed here: ```4d - // Méthode projet Généalogie de - // Généalogie de ( Chaîne ) -> Texte - // Généalogie de ( Nom ) -> Partie de la phrase + ` Genealogy of project method + ` Genealogy of ( String ) -> Text + ` Genealogy of ( Name ) -> Part of sentence $0:=$1 - QUERY([Amis et parents];[Amis et parents]Enfant'Nom=$1) -If(Enregistrements trouves([Amis et parents])>0) - $0:=$0+" qui est le rejeton de "+Généalogie de([Amis et parents]Nom) -End if + QUERY([Friends and Relatives];[Friends and Relatives]ChildrensName=$1) + If(Records in selection([Friends and Relatives])>0) + $0:=$0+" who is the child of "+Genealogy of([Friends and Relatives]Name) + End if ``` -Vous notez que la méthode `Généalogie de` s'appelle elle-même. +Note the `Genealogy of` method which calls itself. -La première manière de procéder utilise un **algorithme itératif**. La seconde manière utilise un **algorithme récursif**. +The first way is an **iterative algorithm**. The second way is a **recursive algorithm**. -Lorsque vous implémentez du code pour traiter des cas comme celui décrit ci-dessus, vous aurez toujours le choix entre écrire des méthodes utilisant des algorithmes itératifs ou récursifs. Typiquement, la récursivité fournit un code plus concis, plus facile à lire et à maintenir, mais elle est facultative. +When implementing code for cases like the previous example, it is important to note that you can always write methods using iteration or recursion. Typically, recursion provides more concise, readable, and maintainable code, but using it is not mandatory. -Dans 4D, la récursivité est typiquement utilisée pour : +Some typical uses of recursion in 4D are: -- Traiter les enregistrements de tables liées les unes aux autres de la même manière que décrit dans l'exemple ci-dessus. -- Naviguer parmi les documents et les dossiers de votre disque à l'aide des commandes `LISTE DES DOSSIERS` et `LISTE DES DOCUMENTS`. Un dossier peut contenir des dossiers et des documents, les sous-dossiers peuvent eux-mêmes contenir des dossiers et des documents, etc. +- Treating records within tables that relate to each other in the same way as in the example. +- Browsing documents and folders on your disk, using the commands `FOLDER LIST` and `DOCUMENT LIST`. A folder may contain folders and documents, the subfolders can themselves contain folders and documents, and so on. -**Important :** Les appels récursifs doivent toujours se terminer à un moment donné. Dans l'exemple ci-dessus, la méthode `Généalogie de` cesse de s'appeler elle-même lorsque la recherche ne trouve plus d'enregistrement. Sans ce test conditionnel, la méthode s'appellerait indéfiniment et 4D pourrait au bout d'un certain temps retourner l'erreur “La pile est pleine” car le programme n'aurait plus assez de place pour "empiler" les appels (ainsi que les paramètres et les variables locales utilisés dans la méthode). +**Important:** Recursive calls should always end at some point. In the example, the method `Genealogy of` stops calling itself when the query returns no records. Without this condition test, the method would call itself indefinitely; eventually, 4D would return a “Stack Full” error becuase it would no longer have space to “pile up” the calls (as well as parameters and local variables used in the method). From c5f8695aa8284bd5434e8ee24f13444c947640c1 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:03 +0100 Subject: [PATCH 040/311] New translations dt_picture.md (French) --- .../translated_docs/fr/Concepts/dt_picture.md | 102 +++++++++--------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/website/translated_docs/fr/Concepts/dt_picture.md b/website/translated_docs/fr/Concepts/dt_picture.md index 2f64925569e2aa..fec043511c0b84 100644 --- a/website/translated_docs/fr/Concepts/dt_picture.md +++ b/website/translated_docs/fr/Concepts/dt_picture.md @@ -3,117 +3,117 @@ id: picture title: Image --- -Un champ, une variable ou expression de type image peut constituer une image Windows ou Macintosh. En règle générale, n'importe quelle image peut être mise sur le conteneur de données ou lue à partir du disque, à l'aide des commandes 4D telles que `READ PICTURE FILE`. +A Picture field, variable or expression can be any Windows or Macintosh picture. In general, this includes any picture that can be put on the pasteboard or read from the disk using 4D commands such as `READ PICTURE FILE`. -4D utilise des API natives pour encoder (écrire) et décoder (lire) les champs et les variables des images sous Windows et macOS. Ces implémentations donnent accès à de nombreux formats natifs, dont le format RAW, couramment utilisé par les appareils photo numériques. +4D uses native APIs to encode (write) and decode (read) picture fields and variables under both Windows and macOS. These implementations provide access to numerous native formats, including the RAW format, currently used by digital cameras. -* sous Windows, 4D utilise WIC (Windows Imaging Component). -* sous macOS, 4D utilise ImageIO. +* on Windows, 4D uses WIC (Windows Imaging Component). +* on macOS, 4D uses ImageIO. -WIC et ImageIO permettent l’utilisation de métadonnées dans les images. Deux commandes, `SET PICTURE METADATA` et `GET PICTURE METADATA`, vous permettent d'en bénéficier dans vos développements. +WIC and ImageIO permit the use of metadata in pictures. Two commands, `SET PICTURE METADATA` and `GET PICTURE METADATA`, let you benefit from metadata in your developments. -## Identifiants de codecs d'images +## Picture Codec IDs 4D supports natively a wide set of [picture formats](FormEditor/pictures.md#native-formats-supported), such as .jpeg, .png, or .svg. -Les formats d'images reconnus par 4D sont retournés par la commande `PICTURE CODEC LIST` sous forme d'identifiants de codecs d'images. Ces identifiants peuvent être : +Picture formats recognized by 4D are returned by the `PICTURE CODEC LIST` command as picture Codec IDs. They can be returned in the following forms: -* une extension (par exemple “.gif”) -* Un type Mime (par exemple “image/jpg”) +* As an extension (for example “.gif”) +* As a MIME type (for example “image/jpeg”) -La forme utilisée pour chaque format dépend du mode de déclaration du codec au niveau du système d’exploitation. Notez que les listes de codecs disponibles pour la lecture et pour l'écriture peuvent différer, étant donné que les codecs d'encodage peuvent nécessiter des licences spécifiques. +The form returned for each format will depend on the way the Codec is recorded at the operating system level. Note that the list of available codecs for reading and writing can be different since encoding codecs may require specific licenses. -Most of the [4D picture management commands](https://doc.4d.com/4Dv18/4D/18/Pictures.201-4504337.en.html) can receive a Codec ID as a parameter. Il est donc impératif d'utiliser l'identifiant système retourné par la commande `PICTURE CODEC LIST`. Les formats d'images reconnus par 4D sont retournés par la commande `PICTURE CODEC LIST`. +Most of the [4D picture management commands](https://doc.4d.com/4Dv18/4D/18/Pictures.201-4504337.en.html) can receive a Codec ID as a parameter. It is therefore imperative to use the system ID returned by the `PICTURE CODEC LIST` command. Picture formats recognized by 4D are returned by the `PICTURE CODEC LIST` command. -## Opérateurs sur les images +## Picture operators -| Opération | Syntaxe | Retourne | Action | -| ------------------------- | --------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Concaténation horizontale | Image1 + Image2 | Image | Place Image2 à la droite d'Image1 | -| Concaténation verticale | Image1 / Image2 | Image | Place Image2 au-dessous d'Image1 | -| Superposition exclusive | Image1 & Image2 | Image | Superpose Image2 à Image1 (Image2 est au premier plan). Donne le même résultat que `COMBINE PICTURES(pict3;pict1;Superposition;pict2)` | -| Superposition inclusive | Image1 | Image | Image | Superpose Image2 à Image1 et retourne le masque résultant si les deux images sont de même taille. Donne le même résultat que `$equal:=Equal pictures(Pict1;Pict2;Pict3)` | -| Déplacement horizontal | Image + Nombre | Image | Déplace l'image horizontalement d'un nombre de pixels égal à Nombre | -| Déplacement vertical | Image / Nombre | Image | Déplace l'image verticalement d'un nombre de pixels égal à Nombre | -| Redimensionnement | Image * Nombre | Image | Redimensionne l'image au pourcentage Nombre | -| Extension horizontale | Image *+ Nombre | Image | Redimensionne l'image horizontalement au pourcentage Nombre | -| Extension verticale | Image * | Image | Image | Redimensionne l'image verticalement au pourcentage Nombre | +| Operation | Syntax | Returns | Action | +| ------------------------- | ---------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Horizontal concatenation | Pict1 + Pict2 | Image | Add Pict2 to the right of Pict1 | +| Vertical concatenation | Pict1 / Pict2 | Image | Add Pict2 to the bottom of Pict1 | +| Exclusive superimposition | Pict1 & Pict2 | Image | Superimposes Pict2 on top of Pict1 (Pict2 in foreground). Produces the same result as `COMBINE PICTURES(pict3;pict1;Superimposition;pict2)` | +| Inclusive superimposition | Pict1 | Pict2 | Image | Superimposes Pict2 on Pict1 and returns resulting mask if both pictures are the same size. Produces the same result as `$equal:=Equal pictures(Pict1;Pict2;Pict3)` | +| Horizontal move | Picture + Number | Image | Move Picture horizontally Number pixels | +| Vertical move | Picture / Number | Image | Move Picture vertically Number pixels | +| Resizing | Picture * Number | Image | Resize Picture by Number ratio | +| Horizontal scaling | Picture *+ Number | Image | Resize Picture horizontally by Number ratio | +| Vertical scaling | Picture *| Number | Image | Resize Picture vertically by Number ratio | **Notes :** -- A noter que pour que l'opérateur | puisse être utilisé, Image1 et Image2 doivent être strictement de la même dimension. Si les deux images sont de taille différente, l’opération Image1 | Image2 produit une image vide. -- La commande `COMBINE PICTURES` permet d'effectuer des superpositions en conservant les caractéristiques de chaque image source dans l'image résultante. -- Des opération supplémentaires peuvent être réalisées sur des images à l'aide de la commande `TRANSFORM PICTURE`. -- Il n'existe pas d'opérateurs de comparaison pour les images; en revanche 4D propose d'utiliser la commande `Images egales` pour comparer deux images. +- In order to use the | operator, Pict1 and Pict2 must have exactly the same dimension. If both pictures are a different size, the operation Pict1 | Pict2 produces a blank picture. +- The `COMBINE PICTURES` command can be used to superimpose pictures while keeping the characteristics of each source picture in the resulting picture. +- Additional operations can be performed on pictures using the `TRANSFORM PICTURE` command. +- There is no comparison operators on pictures, however 4D proposes the `Equal picture` command to compare two pictures. -### Exemples +### Examples -Concaténation horizontale +Horizontal concatenation ```4d - cercle+rectangle // Place le rectangle à droite du cercle -rectangle+cercle // Place le cercle à droite du rectangle + circle+rectangle //Place the rectangle to the right of the circle + rectangle+circle //Place the circle to the right of the rectangle ``` ![](assets/en/Concepts/concatHor.en.png) ![](assets/en/Concepts/concatHor2.en.png) -Concaténation verticale +Vertical concatenation ```4d circle/rectangle //Place the rectangle under the circle rectangle/circle //Place the circle under the rectangle ``` ![](assets/en/Concepts/concatVer.en.png) ![](assets/en/Concepts/concatVer2.en.png) -Superposition exclusive +Exclusive superimposition ```4d -Pict3:=Pict1 & Pict2 // Superposer Pict2 à Pict1 +Pict3:=Pict1 & Pict2 // Superimposes Pict2 on top of Pict1 ``` ![](assets/en/Concepts/superimpoExc.fr.png) -Superposition inclusive +Inclusive superimposition ```4d -Pict3:=Pict1|Pict2 // Récupérer le masque résultant de la superposition de deux images de même taille +Pict3:=Pict1|Pict2 // Recovers resulting mask from superimposing two pictures of the same size ``` ![](assets/en/Concepts/superimpoInc.fr.png) -Déplacement horizontal +Horizontal move ```4d -rectangle+50 // Déplace le rectangle 50 pixels vers la droite -rectangle-50 // Déplace le rectangle 50 pixels vers la gauche +rectangle+50 //Move the rectangle 50 pixels to the right +rectangle-50 //Move the rectangle 50 pixels to the left ``` ![](assets/en/Concepts/hormove.en.png) -Déplacement vertical +Vertical move ```4d -rectangle/50 // Déplace le rectangle 50 pixels vers le bas -rectangle/-20 // Déplace le rectangle 20 pixels vers le haut +rectangle/50 //Move the rectangle down by 50 pixels +rectangle/-20 //Move the rectangle up by 20 pixels ``` ![](assets/en/Concepts/vertmove.en.png)![](assets/en/Concepts/vertmove2.en.png) -Redimensionnement +Resize ```4d -rectangle*1.5 // Augmente la taille du rectangle de 50% - rectangle*0.5 // Réduit la taille du rectangle de 50% +rectangle*1.5 //The rectangle becomes 50% bigger +rectangle*0.5 //The rectangle becomes 50% smaller ``` ![](assets/en/Concepts/resize.en.png)![](assets/en/Concepts/resisze2.en.png) -Extension horizontale +Horizontal scaling ```4d -cercle*+3 // Multiplie par 3 la largeur du cercle - cercle*+0,25 // La largeur du cercle est réduite à un quart de sa taille originale +circle*+3 //The circle becomes 3 times wider +circle*+0.25 //The circle's width becomes a quarter of what it was ``` ![](assets/en/Concepts/Horscaling.en.png)![](assets/en/Concepts/Horscaling2.en.png) -Extension verticale +Vertical scaling ```4d -cercle*/2 // Double la hauteur du cercle - cercle*/0.25 // La hauteur du cercle est réduite à un quart de sa taille originale +circle*|2 //The circle becomes twice as tall +circle*|0.25 //The circle's height becomes a quarter of what it was ``` ![](assets/en/Concepts/vertscaling.en.png)![](assets/en/Concepts/veticalscaling2.en.png) From 3dea61af7eb7ea69d2dfa5508b402383ca22768d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:06 +0100 Subject: [PATCH 041/311] New translations dt_pointer.md (French) --- .../translated_docs/fr/Concepts/dt_pointer.md | 226 +++++++++--------- 1 file changed, 113 insertions(+), 113 deletions(-) diff --git a/website/translated_docs/fr/Concepts/dt_pointer.md b/website/translated_docs/fr/Concepts/dt_pointer.md index 882ef996e806e5..50a303c7183563 100644 --- a/website/translated_docs/fr/Concepts/dt_pointer.md +++ b/website/translated_docs/fr/Concepts/dt_pointer.md @@ -3,211 +3,211 @@ id: pointer title: Pointeur --- -Les variables ou expressions de type Pointeur sont des références à d'autres variables (y compris des tableaux et des éléments de tableaux), à des tables, des champs ou des objets. Il n'existe pas de champ de type Pointeur. +A Pointer variable or expression is a reference to another variable (including arrays and array elements), table, field, or object. There is no field of type Pointer. -Les pointeurs sont des outils de programmation avancée. Lorsque vous utilisez le langage de 4D, vous vous référez aux différents objets par l’intermédiaire de leur nom — en particulier les tables, champs, variables et tableaux. Pour appeler l’un d’entre eux, vous écrivez simplement son nom. Cependant, il est parfois utile de pouvoir appeler ou référencer ces éléments sans nécessairement connaître leur nom. C’est ce que permettent les pointeurs. +Pointers provide an advanced way (in programming) to refer to data. When you use the language, you access various objects—in particular, tables, fields, variables, objects, and arrays—by simply using their names. However, it is often useful to refer to these elements and access them without knowing their names. This is what pointers let you do. -Le concept de pointeur n’est pas tellement éloigné de la vie courante. Vous vous référez souvent à des choses sans connaître leur identité exacte. Par exemple, vous pourriez dire à un ami : «Allons faire un tour en voiture» au lieu de «Allons faire un tour en voiture avec la plaque d’immatriculation 123ABD» Dans ce cas, vous faites référence à la voiture avec la plaque d'immatriculation 123ABD en utilisant l'expression «votre voiture» L'expression «voiture avec plaque d'immatriculation 123ABD» est comme le nom d'un objet, et l'utilisation de l'expression «votre voiture» revient à utiliser un pointeur pour référencer l'objet. Dans ce cas, vous faites référence à la voiture avec la plaque d'immatriculation 123ABD en utilisant l'expression «votre voiture» L'expression «voiture avec plaque d'immatriculation 123ABD» est comme le nom d'un objet, et l'utilisation de l'expression «votre voiture» revient à utiliser un pointeur pour référencer l'objet. +The concept behind pointers is not that uncommon in everyday life. You often refer to something without knowing its exact identity. For example, you might say to a friend, “Let’s go for a ride in your car” instead of “Let’s go for a ride in the car with license plate 123ABD.” In this case, you are referencing the car with license plate 123ABD by using the phrase “your car.” The phrase “car with license plate 123ABD” is like the name of an object, and using the phrase “your car” is like using a pointer to reference the object. -La capacité de se référer à quelque chose sans connaître son identité exacte est très utile. Si votre ami s’achetait une nouvelle voiture, l’expression “ta voiture” serait toujours exacte — ce serait toujours une voiture et vous pourriez toujours aller quelque part avec. Les pointeurs fonctionnent de la même manière. Par exemple, un pointeur peut pointer à un moment donné vers un champ numérique appelé Age, et plus tard vers une variable numérique appelée Ancien âge. Dans les deux cas, le pointeur référence des données numériques pouvant être utilisée dans des calculs. +Being able to refer to something without knowing its exact identity is very useful. In fact, your friend could get a new car, and the phrase “your car” would still be accurate—it would still be a car and you could still take a ride in it. Pointers work the same way. For example, a pointer could at one time refer to a numeric field called Age, and later refer to a numeric variable called Old Age. In both cases, the pointer references numeric data that could be used in a calculation. -Vous pouvez utiliser des pointeurs pour référencer des tables, des champs, des variables, des tableaux et des éléments de tableaux. Le tableau suivant vous fournit un exemple de chaque type : +You can use pointers to reference tables, fields, variables, arrays, array elements, and objects. The following table gives an example of each data type: -| Type | Référencement | Référencement | Affectation | -| ----------- | ----------------------- | ------------------------ | ------------------------ | -| Table | vpTable:=->[Table] | DEFAULT TABLE(vpTable->) | n/a | -| Champ | vpField:=->[Table]Field | ALERT(vpField->) | vpField->:="John" | -| Variable | vpVar:=->Variable | ALERT(vpVar->) | vpVar->:="John" | -| Tableau | vpArr:=->Array | SORT ARRAY(vpArr->;>) | COPY ARRAY (Arr;vpArr->) | -| Elém. tabl. | vpElem:=->Array{1} | ALERT (vpElem->) | vpElem->:="John" | -| Objet | vpObj:=->myObject | ALERT (vpObj->myProp) | vpObj->myProp:="John" | +| Type | To Reference | To Use | To Assign | +| ------------- | ----------------------- | ------------------------ | ------------------------ | +| Table | vpTable:=->[Table] | DEFAULT TABLE(vpTable->) | n/a | +| Field | vpField:=->[Table]Field | ALERT(vpField->) | vpField->:="John" | +| Variable | vpVar:=->Variable | ALERT(vpVar->) | vpVar->:="John" | +| Array | vpArr:=->Array | SORT ARRAY(vpArr->;>) | COPY ARRAY (Arr;vpArr->) | +| Array element | vpElem:=->Array{1} | ALERT (vpElem->) | vpElem->:="John" | +| Objet | vpObj:=->myObject | ALERT (vpObj->myProp) | vpObj->myProp:="John" | -## Utiliser des pointeurs : un exemple +## Using a pointer: Basic example -Il est plus facile d’expliquer l’utilisation des pointeurs au travers d’un exemple. Cet exemple vous montre comment accéder à une variable par l’intermédiaire d’un pointeur. Nous commençons par créer la variable : +It is easiest to explain the use of pointers through an example. This example shows how to access a variable through a pointer. We start by creating a variable: ```4d -MaVar:="Bonjour" +$MyVar:="Hello" ``` -$MyVar is now a variable containing the string “Hello.” We can now create a pointer to $MyVar: We can now create a pointer to $MyVar: +$MyVar is now a variable containing the string “Hello.” We can now create a pointer to $MyVar: ```4d -C_POINTER($MonPointeur) -$MonPointeur:=->MaVar +C_POINTER($MyPointer) +$MyPointer:=->$MyVar ``` -The -> symbol means “get a pointer to.” The -> symbol means “get a pointer to.” This symbol is formed by a dash followed by a “greater than” sign. Dans ce cas, il crée un pointeur qui référence ou “pointe vers” $MaVar. Ce pointeur est assigné à MonPointeur via l’opérateur d’assignation. +The -> symbol means “get a pointer to.” This symbol is formed by a dash followed by a “greater than” sign. In this case, it gets the pointer that references or “points to” $MyVar. This pointer is assigned to MyPointer with the assignment operator. -$MonPointeur est désormais une variable qui contient un pointeur vers $MaVar. $MonPointeur ne contient pas “Bonjour”, la valeur de $MaVar, mais vous pouvez utiliser $MonPointeur pour obtenir cette valeur. L’expression suivante retourne la valeur de $MaVar : +$MyPointer is now a variable that contains a pointer to $MyVar. $MyPointer does not contain “Hello”, which is the value in $MyVar, but you can use $MyPointer to get this value. The following expression returns the value in $MyVar: ```4d -$MonPointeur-> +$MyPointer-> ``` -Dans ce cas, la chaîne “Bonjour” est retournée. Lorsque le symbole -> est placé derrière un pointeur, la valeur de l’objet vers lequel pointe le pointeur est récupérée. On dit alors qu’on dépointe le pointeur. +In this case, it returns the string “Hello”. The -> symbol, when it follows a pointer, references the object pointed to. This is called dereferencing. -Il est important de comprendre que vous pouvez utiliser un pointeur suivi du symbole -> partout où vous auriez pu utiliser l’objet pointé lui-même. Vous pouvez placer l’expression $MonPointeur-> partout où vous pourriez utiliser la variable originale $MaVar. Par exemple, l'instruction suivante affiche une boîte de dialogue d’alerte comportant le mot Bonjour : +It is important to understand that you can use a pointer followed by the -> symbol anywhere that you could have used the object that the pointer points to. This means that you could use the expression $MyPointer-> anywhere that you could use the original $MyVar variable. For example, the following line displays an alert box with the word Hello in it: ```4d -ALERTE($MonPointeur->) +ALERT($MyPointer->) ``` -Vous pouvez également utiliser $MonPointeur pour modifier la valeur de $MaVar. Par exemple, l’instruction suivante stocke la chaîne “Au revoir” dans la variable $MaVar : +You can also use $MyPointer to change the data in $MyVar. For example, the following statement stores the string "Goodbye" in the variable $MyVar: ```4d -$MonPointeur->:="Au revoir" +$MyPointer->:="Goodbye" ``` -Si vous examinez les deux utilisations de l’expression $MonPointeur-> ci-dessus, vous constatez que cette expression se comporte exactement comme si vous aviez utilisé $MaVar à sa place. En résumé : les deux lignes suivantes effectuent la même opération — elles affichent une boîte de dialogue d’alerte contenant la valeur courante de la variable $MaVar : +If you examine the two uses of the expression $MyPointer->, you will see that it acts just as if you had used $MyVar instead. In summary, the following two lines perform the same action—both display an alert box containing the current value in the variable $MyVar: ```4d -ALERT($MonPointeur->) - ALERT($MaVar) +ALERT($MyPointer->) +ALERT($MyVar) ``` -Les deux lignes suivantes effectuent la même opération ; elles assignent la chaîne "Au revoir" à $MaVar : +The following two lines perform the same action— both assign the string "Goodbye" to $MyVar: ```4d -$MonPointeur->:="Au revoir" -$MaVar:="Au revoir" +$MyPointer->:="Goodbye" +$MyVar:="Goodbye" ``` -## Opérateurs sur les pointeurs +## Pointer operators -Avec : +With: ```4d - // vPtrA et vPtrB pointent sur le même objet - vPtrA:=->unObjet - vPtrB:=->unObjet - // vPtrC pointe sur un autre objet - vPtrC:=->autreObjet + ` vPtrA and vPtrB point to the same object + vPtrA:=->anObject + vPtrB:=->anObject + ` vPtrC points to another object + vPtrC:=->anotherObject ``` -| Opération | Syntaxe | Retourne | Expression | Valeur | -| --------- | ------------------- | -------- | ------------- | ------ | -| Egalité | Pointeur = Pointeur | Booléen | vPtrA = vPtrB | Vrai | -| | | | vPtrA = vPtrB | Faux | -| Inégalité | Pointeur # Pointeur | Booléen | vPtrA # vPtrC | Vrai | -| | | | vPtrA # vPtrB | Faux | +| Operation | Syntax | Returns | Expression | Value | +| ---------- | ----------------- | ------- | ------------- | ----- | +| Equality | Pointer = Pointer | Booléen | vPtrA = vPtrB | True | +| | | | vPtrA = vPtrC | False | +| Inequality | Pointer # Pointer | Booléen | vPtrA # vPtrC | True | +| | | | vPtrA # vPtrB | False | -## Principales utilisations -### Utiliser des pointeurs vers des tables -Partout où le langage requiert un nom de table, vous pouvez utiliser un pointeur dépointé vers une table. Pour créer un pointeur vers une table, écrivez une instruction du type : +## Main usages +### Pointers to tables +Anywhere that the language expects to see a table, you can use a dereferenced pointer to the table. You create a pointer to a table by using a line like this: ```4d -$TablePtr:=->[touteTable] +$TablePtr:=->[anyTable] ``` -Vous pouvez également récupérer un pointeur vers une table à l’aide de la fonction Table. Par exemple : +You can also get a pointer to a table by using the `Table` command: ```4d $TablePtr:=Table(20) ``` -Vous pouvez utiliser le pointeur dépointé dans vos commandes, comme ceci : +You can use the dereferenced pointer in commands, like this: ```4d DEFAULT TABLE($TablePtr->) ``` -### Utiliser des pointeurs vers des champs -Partout où le langage requiert un nom de champ, vous pouvez utiliser un pointeur dépointé vers un champ. Pour créer un pointeur vers un champ, écrivez une ligne d'instruction du type : +### Pointers to fields +Anywhere that the language expects to see a field, you can use a dereferenced pointer to reference the field. You create a pointer to a field by using a line like this: ```4d -$ChampPtr:=->[uneTable]CeChamp +$FieldPtr:=->[aTable]ThisField ``` -Vous pouvez également récupérer un pointeur vers un champ à l’aide de la fonction `Champ`. Par exemple : +You can also get a pointer to a field by using the `Field` command, for example: ```4d -$ChampPtr:=Champ(1;2) +$FieldPtr:=Field(1;2) ``` -Vous pouvez utiliser le pointeur dépointé dans vos commandes, comme ceci : +You can use the dereferenced pointer in commands, like this: ```4d OBJECT SET FONT($FieldPtr->;"Arial") ``` -### Utiliser des pointeurs vers des variables +### Pointers to local variables -Lorsque vous utilisez des pointeurs vers des variables locales ou des variables process, vous devez veiller à ce que la variable pointée soit bien définie au moment de l’utilisation du pointeur. Rappelons que les variables locales sont supprimées à la fin de l’exécution de la méthode qui les a créées et les variables process à la fin du process dans lequel elles ont été créées. L’appel d’un pointeur vers une variable qui n’existe plus provoque une erreur de syntaxe en mode interprété (variable indéfinie) mais peut générer une erreur plus conséquente en mode compilé. +When you use pointers to process or local variables, you must be sure that the variable pointed to is already set when the pointer is used. Keep in mind that local variables are deleted when the method that created them has completed its execution and process variables are deleted at the end of the process that created them. When a pointer calls a variable that no longer exists, this causes a syntax error in interpreted mode (variable not defined) but it can generate a more serious error in compiled mode. -Les pointeurs vers des variables locales permettent dans de nombreux cas d’économiser des variables process. Les pointeurs vers des variables locales peuvent être utilisés uniquement à l’intérieur d’un même process. Dans le débogueur, lorsque vous affichez un pointeur vers une variable locale déclarée dans une autre méthode, le nom de la méthode d’origine est indiquée entre parenthèses, derrière le pointeur. Par exemple, si vous écrivez dans Méthode1 : +Pointers to local variables allow you to save process variables in many cases. Pointers to local variables can only be used within the same process. In the debugger, when you display a pointer to a local variable that has been declared in another method, the original method name is indicated in parentheses, after the pointer. For example, if you write in Method1: ```4d - $MaVar:="Bonjour" - Méthode2(->$MaVar) + $MyVar:="Hello world" + Method2(->$MyVar) ``` -Dans Méthode2, le débogueur affichera $1 de la façon suivante : +In Method2, the debugger will display $1 as follows: -| $1 | ->$MaVar (Méthode1) | -| -- | ------------------- | -| | | +| $1 | ->$MyVar (Method1) | +| -- | ------------------ | +| | | -La valeur de $1 sera : +The value of $1 will be: -| $MaVar(Méthode1) | "Bonjour" | -| ---------------- | --------- | -| | | +| $MyVar (Method1) | "Hello world" | +| ---------------- | ------------- | +| | | -### Utiliser des pointeurs vers des éléments de tableau -Vous pouvez créer un pointeur vers un élément de tableau. Par exemple, les lignes d'instruction suivantes créent un tableau et assignent à une variable appelée $ElémPtr un pointeur vers le premier élément : +### Pointers to array elements +You can create a pointer to an array element. For example, the following lines create an array and assign a pointer to the first array element to a variable called $ElemPtr: ```4d -ARRAY REAL($unTableau;10) // Créer un tableau - $ElémPtr:=->$unTableau{1} // Créer un pointeur vers l’élément de tableau +ARRAY REAL($anArray;10) //Create an array +$ElemPtr:=->$anArray{1} //Create a pointer to the array element ``` -Vous pouvez alors utiliser le pointeur dépointé pour assigner une valeur à l’élément, comme ceci : +You could use the dereferenced pointer to assign a value to the element, like this: ```4d -$ElémPtr->:=8 +$ElemPtr->:=8 ``` -### Utiliser des pointeurs vers des tableaux -Vous pouvez créer un pointeur vers un tableau. Par exemple, les lignes d'instruction suivantes créent un tableau et assignent à la variable nommée $TabPtr un pointeur vers le tableau : +### Pointers to arrays +You can create a pointer to an array. For example, the following lines create an array and assign a pointer to the array to a variable called $ArrPtr: ```4d -ARRAY REAL($unTableau;10) // Créer un tableau -$TabPtr:=->$unTableau // Créer un pointeur vers le tableau +ARRAY REAL($anArray;10) //Create an array +$ArrPtr:=->$anArray //Create a pointer to the array ``` -Il est important de comprendre que ce pointeur pointe vers le tableau, et non vers un élément du tableau. Par exemple, vous pourriez utiliser le pointeur dépointé de la manière suivante : +It is important to understand that the pointer points to the array; it does not point to an element of the array. For example, you can use the dereferenced pointer from the preceding lines like this: ```4d -SORT ARRAY(TabPtr->;>) // Tri du tableau +SORT ARRAY($ArrPtr->;>) //Sort the array ``` -Si vous devez vous référer au quatrième élément du tableau à l’aide du pointeur, vous pouvez écrire : +If you need to refer to the fourth element in the array by using the pointer, you do this: ```4d - TabPtr->{4}:=84 + ArrPtr->{4}:=84 ``` -### Passer des pointeurs aux méthodes -Vous pouvez passer un pointeur en tant que paramètre d’une méthode. A l’intérieur de la méthode, vous pouvez modifier l’objet référencé par le pointeur. Par exemple, la méthode suivante, `Recoit Deux`, reçoit deux paramètres qui sont des pointeurs. Elle passe l’objet référencé par le premier paramètre en caractères majuscules, et l’objet référencé par le second paramètre en caractères minuscules. +### Pointers as parameters to methods +You can pass a pointer as a parameter to a method. Inside the method, you can modify the object referenced by the pointer. For example, the following method, `takeTwo`, takes two parameters that are pointers. It changes the object referenced by the first parameter to uppercase characters, and the object referenced by the second parameter to lowercase characters. Here is the project method: ```4d - // Méthode projet Recoit Deux - // $1 – Pointeur vers un champ ou une variable de type Chaîne. Passe la chaîne en majuscules. - // $2 – Pointeur vers un champ ou une variable de type Chaîne. Passe la chaîne en minuscules. + //takeTwo project method + //$1 – Pointer to a string field or variable. Change this to uppercase. + //$2 – Pointer to a string field or variable. Change this to lowercase. $1->:=Uppercase($1->) $2->:=Lowercase($2->) ``` -L'instruction suivante emploie la méthode `Recoit Deux` pour passer un champ en caractères majuscules et une variable en caractères minuscules : +The following line uses the `takeTwo` method to change a field to uppercase characters and to change a variable to lowercase characters: ``` -takeTwo(->[MaTable]MonChamp;->$MaVar) +takeTwo(->[myTable]myField;->$MyVar) ``` -Si le champ, [MaTable]MonChamp, contenait la chaîne "dupont", celle-ci deviendrait "DUPONT". Si la variable $MaVar contenait la chaîne "BONJOUR", celle-ci deviendrait "bonjour". +If the field [myTable]myField contained the string "jones", it would be changed to the string "JONES". If the variable $MyVar contained the string "HELLO", it would be changed to the string "hello". -Dans la méthode Recoit Deux (et, en fait, à chaque fois que vous utilisez des pointeurs), il est important que les types de données des objets référencés soient corrects. Dans l’exemple précédent, les pointeurs doivent pointer vers des objets contenant une chaîne ou un texte. +In the takeTwo method, and in fact, whenever you use pointers, it is important that the data type of the object being referenced is correct. In the previous example, the pointers must point to something that contains a string or text. -### Pointeurs vers des pointeurs -Si vous aimez compliquer les choses à l'extrême (bien que cela ne soit pas nécessaire dans 4D), vous pouvez utiliser des pointeurs pour référencer d'autres pointeurs. Examinons l’exemple suivant : +### Pointers to pointers +If you really like to complicate things, you can use pointers to reference other pointers. Consider this example: ```4d - $MaVar:="Bonjour" -$PointeurUn:=->$MaVar -$PointeurDeux:=->$PointeurUn -($PointeurDeux->)->:="Au revoir" -ALERT(($PointeurDeux->)->) + $MyVar:="Hello" + $PointerOne:=->$MyVar + $PointerTwo:=->$PointerOne + ($PointerTwo->)->:="Goodbye" + ALERT(($PointerTwo->)->) ``` -Cet exemple affiche une boîte de dialogue d’alerte contenant “Au revoir”. +It displays an alert box with the word “Goodbye” in it. -Voici la description de chaque ligne de l’exemple : +Here is an explanation of each line of the example: -- $MaVar := "Bonjour" --> Cette ligne place simplement la chaîne "Bonjour" dans la variable $MaVar. -- $PointeurUn := ->$MaVar --> $PointeurUn contient désormais un pointeur vers $MaVar. -- $PointeurDeux :=->$PointeurUn --> $PointeurDeux (une nouvelle variable) contient un pointeur vers $PointeurUn, qui, elle, pointe vers $MaVar. -- ($PointeurDeux->)-> := "Au revoir" --> $PointeurDeux-> référence le contenu de $PointeurUn, qui elle-même référence $MaVar. Par conséquent, ($PointeurDeux->)-> référence le contenu de $MaVar. Donc, dans ce cas, la valeur "Au revoir" est assignée à la $MaVar. -- ALERT (($PointeurDeux->)->) --> C'est ici la même chose que précédemment : $PointeurDeux-> référence le contenu de $PointeurUn, qui elle-même référence $MaVar. Par conséquent, ($PointeurDeux->)-> référence le contenu de $MaVar. Donc, dans ce cas, la boîte de dialogue d'alerte affiche le contenu de $MaVar. +- $MyVar:="Hello" --> This line puts the string "Hello" into the variable $MyVar. +- $PointerOne:=->$MyVar --> $PointerOne now contains a pointer to $MyVar. +- $PointerTwo:=->$PointerOne --> $PointerTwo (a new variable) contains a pointer to $PointerOne, which in turn points to $MyVar. +- ($PointerTwo->)->:="Goodbye" --> $PointerTwo-> references the contents of $PointerOne, which in turn references $MyVar. Therefore ($PointerTwo->)-> references the contents of $MyVar. So in this case, $MyVar is assigned "Goodbye". +- ALERT (($PointerTwo->)->) --> Same thing: $PointerTwo-> references the contents of $PointerOne, which in turn references $MyVar. Therefore ($PointerTwo->)-> references the contents of $MyVar. So in this case, the alert box displays the contents of $MyVar. -La ligne suivante place la valeur "Bonjour" dans $MaVar : +The following line puts "Hello" into $MyVar: ```4d -($PointeurDeux->)->:="Bonjour" +($PointerTwo->)->:="Hello" ``` -La ligne suivante récupère "Bonjour" à partir de $MaVar et la place dans $NouvelleVar : +The following line gets "Hello" from $MyVar and puts it into $NewVar: ``` -$NouvelleVar:=($PointeurDeux->)-> +$NewVar:=($PointerTwo->)-> ``` -**Important :** Vous devez utiliser des parenthèses lors des déréférencements multiples. +**Important:** Multiple dereferencing requires parentheses. From 731b72ea0c5099c096735c48a12a4ea7ffbd1857 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:09 +0100 Subject: [PATCH 042/311] New translations dt_string.md (French) --- .../translated_docs/fr/Concepts/dt_string.md | 204 +++++++++--------- 1 file changed, 102 insertions(+), 102 deletions(-) diff --git a/website/translated_docs/fr/Concepts/dt_string.md b/website/translated_docs/fr/Concepts/dt_string.md index c641a1028ae41f..7d767710b708f5 100644 --- a/website/translated_docs/fr/Concepts/dt_string.md +++ b/website/translated_docs/fr/Concepts/dt_string.md @@ -3,94 +3,94 @@ id: string title: Chaine --- -Chaîne est un terme générique utilisé pour : +String is a generic term that stands for: -- Les variables ou champs de type Texte : un champ, une variable ou une expression de type Texte peut contenir de 0 à 2 Go de texte. -- Les variables ou champs de type alphanumérique : un champ alphanumérique peut contenir de 0 à 255 caractères (la limite est fixée lors de la définition du champ). +- Text fields or variables: a Text field, variable, or expression may contain from 0 to 2 GB of text. +- Alphanumeric fields: an Alphanumeric field may contain from 0 to 255 characters (limit set when field is defined). -## Constantes littérales de type chaîne +## String literals -Une constante littérale de type chaîne est incluse entre des guillemets droits ("…"). En voici quelques exemples : +A string literal is enclosed in double, straight quotation marks ("..."). Here are some examples of string literals: ```4d -"Ajouter Enregistrements" -"Aucun enregistrement trouvé." -"Facture" -``` - -Une chaîne vide est spécifiée par la succession de deux guillemets (""). - -### Séquences d’échappement -Les séquences d’échappement suivantes peuvent être utilisées dans les chaînes : - -| Séquence d’échappement | Caractère remplacé | -| ---------------------- | --------------------------- | -| \n | LF (Retour ligne) | -| \t | HT (Tabulation) | -| \r | CR (Retour chariot) | -| \\\ | \ (Barre oblique inversée) | -| \\" | " (Guillemets) | - -**Note:** Le caractère \ est utilisé comme séparateur dans les chemins d’accès sous Windows. Vous devez donc saisir un double \\ lorsque vous souhaitez insérer une barre oblique inversée devant un caractère utilisé dans une des séquences d’échappement reconnues par 4D (ex : “C:\\MesDocuments\\Nouveaux.txt”). - -## Opérateurs sur les chaînes - -| Opération | Syntaxe | Retourne | Expression | Valeur | -| ------------------- | ---------------- | -------- | ----------------------- | -------- | -| Concaténation | Chaîne + Chaîne | Chaine | "abc" + "def" | "abcdef" | -| Répétition | Chaîne * Nombre | Chaine | "ab" * 3 | "ababab" | -| Egalité | Chaîne = Chaîne | Booléen | "abc" = "abc" | Vrai | -| | | | "abc" = "abd" | Faux | -| Inégalité | Chaîne # Chaîne | Booléen | "abc" # "abd" | Vrai | -| | | | "abc" # "abc" | Faux | -| Supérieur à | Chaîne > Chaîne | Booléen | "abd" > "abc" | Vrai | -| | | | "abc" > "abc" | Faux | -| Inférieur à | Chaîne < Chaîne | Booléen | "abc" < "abd" | Vrai | -| | | | "abc" < "abc" | Faux | -| Supérieur ou égal à | Chaîne >= Chaîne | Booléen | "abd" >= "abc" | Vrai | -| | | | "abc" >= "abd" | Faux | -| Inférieur ou égal à | Chaîne <= Chaîne | Booléen | "abc" <= "abd" | Vrai | -| | | | "abd" <= "abc" | Faux | -| Contient mot-clé | Chaîne % Chaîne | Booléen | "Alpha Bravo" % "Bravo" | Vrai | -| | | | "Alpha Bravo" % "ravo" | Faux | -| | Image % Chaîne | Booléen | Expr_image % "Mer" | True (*) | - -(*) Si le mot-clé "Mer" a été associé à l'image stockée dans l'expression image (champ ou variable). - -## Comparaisons de chaînes - -- Les chaînes sont toujours comparées caractère par caractère (hormis en cas de recherche par [mot-clé](dt_string.md#keywords), cf. ci-dessous). -- Lors d'une comparaison de chaînes, 4D ne tient pas compte de la casse des caractères ; par exemple, "a"="A" retourne `VRAI`. Pour savoir si des caractères sont en majuscules ou en minuscules, vous devez comparer leurs codes de caractères. Par exemple, l'expression suivante retourne `FAUX` : +"Add Records" +"No records found." +"Invoice" +``` + +An empty string is specified by two quotation marks with nothing between them (""). + +### Escape sequences +The following escape sequences can be used within strings: + +| Escape sequence | Character replaced | +| --------------- | -------------------- | +| \n | LF (Line feed) | +| \t | HT (Tab) | +| \r | CR (Carriage return) | +| \\\ | \ (Backslash) | +| \\" | " (Quotation marks) | + +**Note:** The \ (backslash) character is used as a separator in pathnames under Windows. You must therefore use a double backslash \\\ in paths when you want to have a backslash in front of a character used in one of the escape sequences recognized by 4D (e.g. "C:\\\MyDocuments\\\New.txt"). + +## String operators + +| Operation | Syntax | Returns | Expression | Value | +| ------------------------ | ---------------- | ------- | ----------------------- | -------- | +| Concatenation | String + String | Chaine | "abc" + "def" | "abcdef" | +| Repetition | String * Number | Chaine | "ab" * 3 | "ababab" | +| Equality | String = String | Booléen | "abc" = "abc" | True | +| | | | "abc" = "abd" | False | +| Inequality | String # String | Booléen | "abc" # "abd" | True | +| | | | "abc" # "abc" | False | +| Greater than | String > String | Booléen | "abd" > "abc" | True | +| | | | "abc" > "abc" | False | +| Less than | String < String | Booléen | "abc" < "abd" | True | +| | | | "abc" < "abc" | False | +| Greater than or equal to | String >= String | Booléen | "abd" >= "abc" | True | +| | | | "abc" >= "abd" | False | +| Less than or equal to | String <= String | Booléen | "abc" <= "abd" | True | +| | | | "abd" <= "abc" | False | +| Contains keyword | String % String | Booléen | "Alpha Bravo" % "Bravo" | True | +| | | | "Alpha Bravo" % "ravo" | False | +| | Picture % String | Booléen | Picture_expr % "Mer" | True (*) | + +(*) If the keyword "Mer" is associated with the picture stored in the picture expression (field or variable). + +## String comparisons + +- Strings are compared on a character-by-character basis (except in the case of searching by [keywords](dt_string.md#keywords), see below). +- When strings are compared, the case of the characters is ignored; thus, "a"="A" returns `TRUE`. To test if the case of two characters is different, compare their character codes. For example, the following expression returns `FALSE`: ```4d -Code de caractere("A")=Code de caractere("a") // 65 n'est pas égal à 97 +Character code("A")=Character code("a") // because 65 is not equal to 97 ``` -- Lors d'une comparaison de chaînes, les caractères diacritiques sont comparés à l'aide de la table de comparaison des caractères de votre machine. Par exemple, les expressions suivantes retournent `VRAI` : +- When strings are compared, diacritical characters are taken into account. For example, the following expressions return `TRUE`: ```4d "n"="ñ" "n"="Ñ" "A"="å" - // etc + // and so on ``` -**Note :** Les comparaisons de chaîne tiennent compte des spécificités du langage **défini pour le fichier de données 4D** (qui n'est pas toujours identique au langage défini pour le système). +**Note:** String comparison takes into account specificities of the language **defined for the 4D data file** (which is not always the same as the language defined for the system). -### Le joker (@) +### Wilcard character (@) -Le langage 4D prend en charge **@** en tant que joker. Ce caractère peut être utilisé dans toute comparaison de chaînes. Ainsi, par exemple, l'expression suivante est évaluée à `TRUE` : +The 4D language supports **@** as a wildcard character. This character can be used in any string comparison to match any number of characters. For example, the following expression is `TRUE`: ```4d "abcdefghij"="abc@" ``` -Le joker doit être utilisé dans le second opérande (la chaîne qui se trouve à droite de l'opérateur). L'expression suivante est évaluée à `FAUX` car le joker est alors considéré en tant que caractère : +The wildcard character must be used within the second operand (the string on the right side) in order to match any number of characters. The following expression is `FALSE`, because the @ is considered only as a one character in the first operand: ```4d "abc@"="abcdefghij" ``` -Le joker signifie “un ou plusieurs caractères sinon rien”. Les expressions suivantes sont évaluées à `VRAI` : +The wildcard means "one or more characters or nothing". The following expressions are `TRUE`: ```4d "abcdefghij"="abcdefghij@" @@ -100,69 +100,69 @@ Le joker signifie “un ou plusieurs caractères sinon rien”. Les expressions "abcdefghij"="@abcde@fghij@" ``` -En revanche, dans tous les cas, lorsque deux jokers consécutifs sont placés dans une comparaison de chaînes, celle-ci sera évaluée à `FAUX`. L'expression suivante est à `FAUX` : +On the other hand, whatever the case, a string comparison with two consecutive wildcards will always return `FALSE`. The following expression is `FALSE`: ```4d "abcdefghij"="abc@@fg" ``` -Lorsque l'opérateur de comparaison est ou contient un symbole < ou >, seule la comparaison avec un seul joker situé en fin d'opérande est prise en charge : +When the comparison operator is or contains a < or > symbol, only comparison with a single wildcard located at the end of the operand is supported: ```4d - "abcd"<="abc@" //Comparaison valide - "abcd"<="abc@ef" //Comparaison non valide + "abcd"<="abc@" // Valid comparison + "abcd"<="abc@ef" //Not a valid comparison ``` -Si vous souhaitez effectuer des comparaisons ou des recherches utilisant @ en tant que caractère (et non en tant que joker), vous devez utiliser l'instruction `Code de caractere(Arobase)`. Imaginons par exemple que vous souhaitiez savoir si une chaîne se termine par le caractère @. L’expression suivante (si $vaValeur n'est pas vide) retourne toujours `VRAI` : +If you want to execute comparisons or queries using @ as a character (and not as a wildcard), you need to use the `Character code(At sign)` instruction. Imagine, for example, that you want to know if a string ends with the @ character. The following expression (if $vsValue is not empty) is always `TRUE`: ```4d -($vaValeur[[Longueur($vaValeur)]]="@") +($vsValue[[Length($vsValue)]]="@") ``` -L'expression suivante sera correctement évaluée : +The following expression will be evaluated correctly: ```4d -(Code de caractere($vaValeur[[Longueur($vaValeur)]])#64) +(Character code($vsValue[[Length($vsValue)]])#64) ``` -**Note :** Une option 4D du mode Développement vous permet de paramétrer le mode d’interprétation du caractère @ lorsque celui-ci est inclus dans une chaîne de caractères. +**Note:** A 4D option in the Design environment allows you to define how the @ character is interpreted when it is included in a character string. -### Mots-clés +### Keywords -A la différence des autres comparaisons de chaîne, les recherches par mots-clés recherchent des “mots” dans des “textes” : les mots sont évalués individuellement et dans leur globalité. L’opérateur **%** retournera toujours `Faux` si la recherche porte sur plusieurs mots ou une partie de mot (par exemple une syllabe). Les “mots” sont des chaînes de caractères encadrées par des “séparateurs”, qui sont les espaces, les caractères de ponctuation et les tirets. Une apostrophe, comme dans “aujourd'hui”, est généralement considérée comme partie du mot, mais sera ignorée dans certains cas (cf. règles ci-dessous). Les nombres peuvent être recherchés car ils sont évalués dans leur ensemble (incluant les symboles décimaux). Les autres symboles (monnaie, température, etc.) seront ignorés. +Unlike other string comparisons, searching by keywords looks for "words" in "texts": words are considered both individually and as a whole. The **%** operator always returns `False` if the query concerns several words or only part of a word (for example, a syllable). The “words” are character strings surrounded by “separators,” which are spaces and punctuation characters and dashes. An apostrophe, like in “Today's”, is usually considered as part of the word, but will be ignored in certain cases (see the rules below). Numbers can be searched for because they are evaluated as a whole (including decimal symbols). Other symbols (currency, temperature, and so on) will be ignored. ```4d - "Alpha Bravo Charlie"%"Bravo" // Retourne Vrai - "Alpha Bravo Charlie"%"vo" // Retourne Faux - "Alpha Bravo Charlie"%"Alpha Bravo" // Retourne Faux - "Alpha,Bravo,Charlie"%"Alpha" // Retourne Vrai - "Software and Computers"%"comput@" // Retourne Vrai + "Alpha Bravo Charlie"%"Bravo" // Returns True + "Alpha Bravo Charlie"%"vo" // Returns False + "Alpha Bravo Charlie"%"Alpha Bravo" // Returns False + "Alpha,Bravo,Charlie"%"Alpha" // Returns True + "Software and Computers"%"comput@" // Returns True ``` -> **Notes :** - 4D utilise la librairie ICU pour la comparaison des chaînes (à l'aide des opérateurs <>=#) et la détection des mots-clés. Pour plus d'informations sur les règles mises en oeuvre, reportez-vous à l'adresse http://www.unicode.org/unicode/reports/tr29/#Word_Boundaries. En version japonaise, 4D utilise par défaut la librairie Mecab en lieu et place de ICU pour la détection des mots-clés. +> **Notes:** - 4D uses the ICU library for comparing strings (using <>=# operators) and detecting keywords. For more information about the rules implemented, please refer to the following address: http://www.unicode.org/unicode/reports/tr29/#Word_Boundaries. - In the Japanese version, instead of ICU, 4D uses Mecab by default for detecting keywords. -## Symboles d'indice de chaîne -Les symboles d'indice de chaîne sont les suivants : [[...]] +## Character Reference Symbols +The character reference symbols: [[...]] -Ces symboles sont utilisés pour désigner un caractère particulier dans une chaîne. Cette syntaxe vous permet de référencer un caractère dans un champ ou une variable de type Alpha ou Texte. +These symbols are used to refer to a single character within a string. This syntax allows you to individually address the characters of a text variable, string variable, or field. -Lorsque les symboles d'indice de chaîne sont placés à gauche de l'opérateur d'affectation (:=), un caractère est affecté à la position référencée dans la chaîne. Par exemple, en postulant que la chaîne vsNom n'est pas une chaîne vide, le code suivant passe le premier caractère de la chaîne vsNom en majuscule : +If the character reference symbols appear on the left side of the assignment operator (:=), a character is assigned to the referenced position in the string. For example, if vsName is not an empty string, the following line sets the first character of vsName to uppercase: ```4d -If(vsNom#"") - vsNom[[1]]:=Uppercase(vsNom[[1]]) +If(vsName#"") + vsName[[1]]:=Uppercase(vsName[[1]]) End if ``` -Lorsque les symboles d'indice de chaîne apparaissent dans une expression, ils retournent le caractère auquel ils font référence sous la forme d'une chaîne d'un caractère. Par exemple: +Otherwise, if the character reference symbols appear within an expression, they return the character (to which they refer) as a 1-character string. For example: ```4d -//L'exemple suivant teste si le dernier caractère de vtText est le caractère "@" +//The following example tests if the last character of vtText is an At sign "@" If(vtText#"") If(Character code(Substring(vtText;Length(vtText);1))=At sign) //... End if End if - //En utilisant la syntaxe des caractères d'indice de chaîne, vous écririez plus simplement : + //Using the character reference syntax, you would write in a simpler manner: If(vtText#"") If(Character code(vtText[[Length(vtText)]])=At sign) // ... @@ -170,33 +170,33 @@ Lorsque les symboles d'indice de chaîne apparaissent dans une expression, ils r End if ``` -### Note avancée sur la référence à des caractères invalides +### Advanced note about invalid character reference -Lorsque vous utilisez les symboles d'indice de chaîne, il est de votre responsabilité de vous référer à des caractères existant dans la chaîne, de la même manière que pour les éléments d'un tableau. Si, par exemple, vous référencez le 20e caractère d'une chaîne, cette chaîne doit contenir au moins 20 caractères. +When you use the character reference symbols, you must address existing characters in the string in the same way you address existing elements of an array. For example if you address the 20th character of a string variable, this variable MUST contain at least 20 characters. -- Ne pas respecter cette condition en mode interprété n'est pas signalé comme une erreur par 4D. -- Ne pas respecter cette condition en mode compilé (sans options) peut entraîner une "corruption" de la mémoire, si, par exemple, vous écrivez un caractère au-delà de la fin d'une chaîne ou d'un texte. -- Ne pas respecter cette condition en mode compilé est signalé lorsque le contrôle d'exécution est activé. Si, par exemple, vous exécutez le code suivant : +- Failing to do so, in interpreted mode, does not cause a syntax error. +- Failing to do so, in compiled mode (with no options), may lead to memory corruption, if, for instance, you write a character beyond the end of a string or a text. +- Failing to do so, in compiled mode, causes an error with the option Range Checking On. For example, executing the following code: ``` -//Ne pas faire ça ! +//Very bad and nasty thing to do, boo! vsAnyText:="" vsAnyText[[1]]:="A" ``` -L'alerte suivante s'affichera en mode compilé : +will trigger the Runtime Error shown here: ![alt-text](assets/en/Concepts/Syntax_Error.en.png) -### Exemple +### Example -La méthode projet suivante ajoute une lettre capitale à tous les mots du texte passé en paramètre et retourne le texte modifié : +The following project method capitalizes the first character of each word of the text received as parameter and returns the resulting capitalized text: ```4d - // Méthode projet de passage en capitale - // PasserEnCap ( Texte ) -> Texte - // PasserEnCap ( Texte source ) -> Texte avec des lettres capitales + //Capitalize_text project method + //Capitalize_text ( Text ) -> Text + //Capitalize_text ( Source text ) -> Capitalized text $0:=$1 $vlLen:=Length($0) @@ -210,12 +210,12 @@ La méthode projet suivante ajoute une lettre capitale à tous les mots du texte End if ``` -Une fois cette méthode placée dans la base, la ligne : +For example, the line: ```4d -ALERT(Capitalize_text("Bonjour, mon nom est Jean Bon et je me présente aux présidentielles !")) +ALERT(Capitalize_text("hello, my name is jane doe and i'm running for president!")) ``` -affiche l'alerte suivante : +displays the alert shown here: ![alt-text](assets/en/Concepts/Jane_doe.en.png) From ab04a3857ac7af0b7f559207a1b970aa872056bc Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:12 +0100 Subject: [PATCH 043/311] New translations dt_time.md (French) --- .../translated_docs/fr/Concepts/dt_time.md | 117 +++++++++--------- 1 file changed, 59 insertions(+), 58 deletions(-) diff --git a/website/translated_docs/fr/Concepts/dt_time.md b/website/translated_docs/fr/Concepts/dt_time.md index 5b2a79f71e970f..e1a2e0018f84e2 100644 --- a/website/translated_docs/fr/Concepts/dt_time.md +++ b/website/translated_docs/fr/Concepts/dt_time.md @@ -3,86 +3,87 @@ id: time title: Heure --- -Les variables, champs ou expressions de type Heure peuvent être compris entre 00:00:00 et 596,000:00:00. +A Time field, variable or expression can be in the range of 00:00:00 to 596,000:00:00. -Les heures sont stockées dans un format de 24 heures. +Times are in 24-hour format. -Une valeur de type Heure peut être utilisée en tant que numérique. Le nombre correspondant est le nombre de secondes que cette valeur représente à partir de minuit (00:00:00). +A time value can be treated as a number. The number returned from a time is the number of seconds since midnight (00:00:00) that time represents. -**Note :** Dans le manuel de *référence du langage 4D*, les paramètres de type Heure dans les descriptions des commandes sont appelés Heure, sauf spécification explicite. +**Note:** In the *4D Language Reference* manual, Time parameters in command descriptions are denoted as Time, except when marked otherwise. -## Constantes littérales de type heure +## Time literals -Une constante heure est incluse entre deux points d’interrogation (?...?). +A time literal constant is enclosed by question marks (?...?). -Avec une version française de 4D, une heure est structurée sous la forme heure:minute:seconde, deux points (:) séparant les valeurs. Les heures sont stockées dans un format de 24 heures. +A time literal constant is ordered hour:minute:second, with a colon (:) setting off each part. Times are specified in 24-hour format. -Voici quelques exemples de constantes littérales de type heure : +Here are some examples of time literals: ```4d -?00:00:00? // minuit -?09:30:00? // 9:30 du matin -?13:01:59? // 13 heures, 1 minute et 59 secondes +?00:00:00? ` midnight +?09:30:00? ` 9:30 am +?13:01:59? ` 1 pm, 1 minute, and 59 seconds ``` -Une heure nulle s’écrit ?00:00:00? - -**Astuce :** L'éditeur de méthodes dispose d'un raccourci pour saisir une heure nulle. Pour cela, tapez un point d'interrogation (?) et appuyez sur la touche Entrée. - -## Opérateurs sur les heures - -| Opération | Syntaxe | Retourne | Expression | Valeur | -| ------------------- | --------------- | -------- | ----------------------- | ---------- | -| Addition | Heure + Heure | Heure | ?02:03:04? + ?01:02:03? | ?03:05:07? | -| Soustraction | Heure – Heure | Heure | ?02:03:04? ?01:02:03? | ?01:01:01? | -| Addition | Heure + Nombre | Nombre | ?02:03:04? ?01:02:03? | 7449 | -| Soustraction | Heure – Nombre | Nombre | ?02:03:04? ?01:02:03? | 7319 | -| Multiplication | Heure * Nombre | Nombre | ?02:03:04? ?01:02:03? | 14768 | -| Division | Heure / Nombre | Nombre | ?02:03:04? ?02:03:04? | 3692 | -| Division entière | Heure \ Nombre | Nombre | ?02:03:04? ?01:02:03? | 3692 | -| Modulo | Heure % Heure | Heure | ?20:10:00? % ?04:20:00? | ?02:50:00? | -| Modulo | Heure % Nombre | Nombre | ?02:03:04? % 2 | 0 | -| Egalité | Heure = Heure | Booléen | ?01:02:03? >=?01:02:03? | Vrai | -| | | | ?01:02:03? ?01:02:04? | Faux | -| Inégalité | Heure # Heure | Booléen | ?01:02:03? ?01:02:03? | Vrai | -| | | | ?01:02:03? ?01:02:03? | Faux | -| Supérieur à | Heure > Heure | Booléen | ?01:02:03? < ?01:02:04? | Vrai | -| | | | ?01:02:03? < ?01:02:04? | Faux | -| Inférieur à | Heure < Heure | Booléen | ?01:02:03? ?01:02:04? | Vrai | -| | | | ?01:02:03? ?01:02:03? | Faux | -| Supérieur ou égal à | Heure >= Heure | Booléen | ?01:02:03? >=?01:02:03? | Vrai | -| | | | ?01:02:03? >=?01:02:04? | Faux | -| Inférieur ou égal à | Heure <= Heure | Booléen | ?01:02:03? <=?01:02:03? | Vrai | -| | | | ?01:02:03? <=?01:02:03? | Faux | - -### Exemple 1 - -Vous pouvez combiner des expressions de type heure et de type numérique à l'aide des fonctions `Time` et `Time string`. - -Vous pouvez combiner des expressions Time et Number à l'aide des fonctions `Time` ou `Current time`: +A null time is specified by ?00:00:00? + +**Tip:** The Method Editor includes a shortcut for entering a null time. To type a null time, enter the question mark (?) character and press Enter. + +## Time operators + +| Operation | Syntax | Returns | Expression | Value | +| ------------------------ | -------------- | ------- | ----------------------- | ---------- | +| Addition | Time + Time | Heure | ?02:03:04? + ?01:02:03? | ?03:05:07? | +| Subtraction | Time – Time | Heure | ?02:03:04? – ?01:02:03? | ?01:01:01? | +| Addition | Time + Number | Number | ?02:03:04? + 65 | 7449 | +| Subtraction | Time – Number | Number | ?02:03:04? – 65 | 7319 | +| Multiplication | Time * Number | Number | ?02:03:04? * 2 | 14768 | +| Division | Time / Number | Number | ?02:03:04? / 2 | 3692 | +| Longint division | Time \ Number | Number | ?02:03:04? \ 2 | 3692 | +| Modulo | Time % Time | Heure | ?20:10:00? % ?04:20:00? | ?02:50:00? | +| Modulo | Time % Number | Number | ?02:03:04? % 2 | 0 | +| Equality | Time = Time | Booléen | ?01:02:03? = ?01:02:03? | True | +| | | | ?01:02:03? = ?01:02:04? | False | +| Inequality | Time # Time | Booléen | ?01:02:03? # ?01:02:04? | True | +| | | | ?01:02:03? # ?01:02:03? | False | +| Greater than | Time > Time | Booléen | ?01:02:04? > ?01:02:03? | True | +| | | | ?01:02:03? > ?01:02:03? | False | +| Less than | Time < Time | Booléen | ?01:02:03? < ?01:02:04? | True | +| | | | ?01:02:03? < ?01:02:03? | False | +| Greater than or equal to | Time >= Time | Booléen | ?01:02:03? >=?01:02:03? | True | +| | | | ?01:02:03? >=?01:02:04? | False | +| Less than or equal to | Time <= Time | Booléen | ?01:02:03? <=?01:02:03? | True | +| | | | ?01:02:04? <=?01:02:03? | False | + +### Example 1 + +To obtain a time expression from an expression that combines a time expression with a number, use the commands `Time` and `Time string`. + +You can combine expressions of the time and number types using the `Time` or `Current time` functions: ```4d - // La ligne suivante assigne à la variable $vlSecondes le nombre de secondes qui, dans une heure à partir de maintenant, se seront écoulées depuis minuit - $vlSeconds:=Current time+3600 - // La ligne suivante assigne à la variable $vhBientôt l'heure qu'il sera dans une heure - $vhSoon:=Time(Current time+3600) + //The following line assigns to $vlSeconds the number of seconds + //that will be elapsed between midnight and one hour from now +$vlSeconds:=Current time+3600 + //The following line assigns to $vHSoon the time it will be in one hour +$vhSoon:=Time(Current time+3600) ``` -La seconde ligne peut également être écrite de la façon suivante : +The second line could be written in a simpler way: ```4d - // La ligne suivante assigne à la variable $vhBientôt l'heure qu'il sera dans une heure + // The following line assigns to $vHSoon the time it will be in one hour $vhSoon:=Current time+?01:00:00? ``` -### Exemple 2 +### Example 2 -L'opérateur Modulo permet notamment d'ajouter des heures en tenant compte du format sur 24 heures d'une journée : +The Modulo operator can be used, more specifically, to add times that take the 24-hour format into account: ```4d -$t1:=?23:00:00? // Il est 23 heures. - //On souhaite ajouter 2 heures 30 - $t2:=$t1 +?02:30:00? // avec une addition simple, $t2 vaut ?25:30:00? -$t2:=($t1 +?02:30:00?)%?24:00:00? // $t2 vaut ?01:30:00? et il est 1h 30 du matin le matin suivant le matin suivant +$t1:=?23:00:00? // It is 23:00 p.m. + // We want to add 2 and a half hours +$t2:=$t1 +?02:30:00? // With a simple addition, $t2 is ?25:30:00? +$t2:=($t1 +?02:30:00?)%?24:00:00? // $t2 is ?01:30:00? and it is 1:30 a.m. the next morning ``` From 7fb9d2f385e2c43251bb1e1c2a0590f3fe15cc04 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:14 +0100 Subject: [PATCH 044/311] New translations dt_variant.md (French) --- .../translated_docs/fr/Concepts/dt_variant.md | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/website/translated_docs/fr/Concepts/dt_variant.md b/website/translated_docs/fr/Concepts/dt_variant.md index 228f918b86d9ae..4f26667396cb4e 100644 --- a/website/translated_docs/fr/Concepts/dt_variant.md +++ b/website/translated_docs/fr/Concepts/dt_variant.md @@ -3,27 +3,27 @@ id: variant title: Variant --- -Variant est un type de variable qui permet d'encapsuler des données de type valide et standard dans une variable. En règle générale, ce type de variable peut être utilisé pour écrire du code générique qui retourne ou reçoit des valeurs dont le type n'est pas connu. C'est le cas par exemple du code traitant des attributs d'objet. +Variant is a variable type which allows encapsulating data of any valid regular type in a variable. Typically, this variable type can be used to write generic code returning or receiving values for which the type is not known. This is the case for example for code handling object attributes. -Une variable de type variant peut contenir une valeur des types de données suivants : +A variant type variable can contain a value of the following data types: - BLOB - boolean - collection - date -- entier long +- longint - object - picture - pointer -- réel -- Texte +- real +- text - time - null -- indéfini +- undefined -> Les tableaux ne peuvent pas être stockés dans des variables de type variant. +> Arrays cannot be stored in variant variables. -En modes interprété et compilé, le même contenu peut être affecté à une même variable variant. Contrairement aux types de variable standard, le type de contenu des variable de type variant est différent du type de variable variant lui-même. Par exemple: +In both interpreted and in compiled modes, a same variant variable can be assigned contents of different types. Unlike regular variable types, the variant variable content type is different from the variant variable type itself. For example: ```4d C_VARIANT($variant) @@ -37,7 +37,7 @@ $vtype:=Type($variant) // 12 (Is variant) $vtypeVal:=Value type($variant) // 1 (Is real) ``` -Vous pouvez utiliser des variables variant chaque fois qu'elles sont attendues. Vous devez simplement vous assurer que le type de données du contenu de la variable est du type attendu. Lorsque vous accédez à des variables de type variant, seule leur valeur courante est prise en compte. Par exemple: +You can use variant variables wherever variables are expected, you only need to make sure than the variable content data type is of the expected type. When accessing variant variables, only their current value is taken into account. For example: ```4d C_VARIANT($v) @@ -48,7 +48,7 @@ $t:=Type($v) // 12 (Is variant) $t2:=Type($v2) // 2 (Is text) ``` -Variant peut être utilisé pour déclarer des paramètres de méthode ($0, $1, etc.) pouvant être de différents types. Dans ce cas, vous pouvez générer votre code en testant le type de valeur du paramètre, par exemple : +Variant can be used to declare method parameters ($0, $1,...) that can be of various types. In this case, you can build your code by testing the parameter value type, for example: ```4d C_VARIANT($1) @@ -57,8 +57,7 @@ Case of ... : (Value type($1)=Is text) ... -//déclaration(s) - End case +End case ``` -> Lorsque des variables variant ne sont pas nécessaires (c'est-à-dire lorsque le type de données est connu), il est recommandé d'utiliser des variables typées standard. Les variables typées standard fournissent de meilleures performances, un code plus clair et permettent au compilateur d'éviter les bugs liés à des types de données passés qui sont inattendus. \ No newline at end of file +> When variant variables are not necessary (i.e. when the data type is known), it is recommended to use regular typed variables. Regular typed variables provide better performance, make code more clear and are helpful for the compiler to prevent bugs related to passing unexpected data types. \ No newline at end of file From 4c1cada3fe5faf910e1ffd435b7bcaae5c3d527d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:16 +0100 Subject: [PATCH 045/311] New translations error-handling.md (French) --- .../fr/Concepts/error-handling.md | 88 +++++++++---------- 1 file changed, 43 insertions(+), 45 deletions(-) diff --git a/website/translated_docs/fr/Concepts/error-handling.md b/website/translated_docs/fr/Concepts/error-handling.md index 04c7e2e1d273a1..51898ee5ce64ed 100644 --- a/website/translated_docs/fr/Concepts/error-handling.md +++ b/website/translated_docs/fr/Concepts/error-handling.md @@ -3,104 +3,102 @@ id: error-handling title: Gestion des erreurs --- -Le traitement des erreurs consiste à anticiper les erreurs pouvant survenir dans votre application et à y répondre. 4D fournit un support complet pour la détection et la signalisation des erreurs lors de l'exécution, ainsi que pour l'analyse de leurs conditions. +Error handling is the process of anticipating and responding to errors that might occur in your application. 4D provides a comprehensive support for catching and reporting errors at runtime, as well as for investigating their conditions. -La gestion des erreurs répond à deux besoins principaux : +Error handling meets two main needs: -- rechercher et corriger les éventuels bugs et erreurs dans votre code pendant la phase de développement, -- détecter et récupérer des erreurs inattendues dans les applications déployées; vous pouvez notamment remplacer les boîtes de dialogue d'erreur système (disque plein, fichier manquant, etc.) par votre propre interface. -> > Il est fortement recommandé d'installer une méthode de gestion des erreurs sur 4D Server, pour tout le code exécuté sur le serveur. Cette méthode éviterait d'afficher des boîtes de dialogue inattendues sur le serveur et pourrait consigner les erreurs dans un fichier consacré en vue d'analyses ultérieures. +- finding out and fixing potential errors and bugs in your code during the development phase, +- catching and recovering from unexpected errors in deployed applications; in particular, you can replace system error dialogs (disk full, missing file, etc.) with you own interface. +> It is highly recommended to install an error-handling method on 4D Server, for all code running on the server. This method would avoid unexpected dialog boxes to be displayed on the server machine, and could log errors in a dedicated file for further analyses. -## Erreur ou statut +## Error or status -De nombreuses fonctions de classe 4D, telles que `entity.save()` ou `transporter.send()`, retournent un objet *status*. Cet objet permet de stocker les erreurs "prévisibles" dans le contexte d'exécution, telles qu'un mot de passe invalide, une entité verrouillée, etc., qui ne stoppe pas l'exécution du programme. Cette catégorie d'erreurs peut être gérée par du code habituel. +Many 4D class functions, such as `entity.save()` or `transporter.send()`, return a *status* object. This object is used to store "predictable" errors in the runtime context, e.g. invalid password, locked entity, etc., that do not stop program execution. This category of errors can be handled by regular code. -D'autres erreurs "imprévisibles" peuvent inclure une erreur en écriture sur le disque, une panne de réseau ou toute interruption inattendue. Cette catégorie d'erreurs génère des exceptions et doit être traitée par une méthode de gestion des erreurs. +Other "unpredictable" errors include disk write error, network failure, or in general any unexpected interruption. This category of errors generates exceptions and needs to be handled through an error-handling method. -## Installer une méthode de gestion des erreurs +## Installing an error-handling method -Dans 4D, toutes les erreurs peuvent être capturées et traitées dans une méthode projet spécifique, la méthode de **gestion des erreurs** (ou méthode de **capture d'erreurs**). +In 4D, all errors can be catched and handled in a specific project method, the **error-handling** (or **error-catching**) method. -Cette méthode projet est installée pour le process en cours et sera automatiquement appelée pour toute erreur survenant dans le process, en mode interprété ou compilé. Pour *installer* cette méthode projet, il vous suffit d’appeler la commande `APPELER SUR ERREUR` avec le nom de la méthode projet en paramètre. Par exemple: +This project method is installed for the current process and will be automatically called for any error that occurs in the process, in interpreted or compiled mode. To *install* this project method, you just need to call the `ON ERR CALL` command with the project method name as parameter. For example: ```4d -APPELER SUR ERREUR("IO_ERRORS") //Installe la méthode de gestion des erreurs +ON ERR CALL("IO_ERRORS") //Installs the error-handling method ``` -Pour ne plus détecter d'erreurs et redonner le contrôle à 4D, appelez la méthode `ON ERR CALL` à l'aide d'une chaîne vide : +To stop catching errors and give back hand to 4D, call `ON ERR CALL` with an empty string: ```4d -ON ERR CALL("") //redonne le contrôle à 4D +ON ERR CALL("") //gives back control to 4D ``` -La commande `Method called on error` permet de connaître le nom de la méthode installée par `ON ERR CALL` pour le processus en cours. Cela est particulièrement utile dans le contexte du code générique car il vous permet de modifier temporairement puis de restaurer la méthode de capture d'erreur : +The `Method called on error` command allows to know the name of the method installed by `ON ERR CALL` for the current process. It is particularly useful in the context of generic code because it enables you to temporarily change and then restore the error-catching method: ```4d $methCurrent:=Method called on error ON ERR CALL("NewMethod") - //Si le document ne peut pas être ouvert, une erreur est générée + //If the document cannot be opened, an error is generated $ref:=Open document("MyDocument") - //Répéter la méthode précédente + //Reinstallation of previous method ON ERR CALL($methCurrent) ``` -### Portée et composants +### Scope and components -Vous pouvez définir une seule méthode d'erreur pour l'ensemble de l'application ou différentes méthodes par module d'application. Cependant, une seule méthode peut être installée par processus. +You can define a single error-catching method for the whole application or different methods per application module. However, only one method can be installed per process. -Une méthode de gestion des erreurs installée par la commande `APPELER SUR ERREUR` s'applique uniquement à l'application en cours d'exécution. En cas d'erreur générée par un **composant**, la méthode `APPELER SUR ERREUR` de l'application hôte n'est pas appelée, et inversement. +An error-handling method installed by the `ON ERR CALL` command only applies to the running application. In the case of an error generated by a **component**, the `ON ERR CALL` error-handling method of the host application is not called, and vice versa. -### Gérer les erreurs dans une méthode +### Handling errors within the method -Dans la méthode d'erreur personnalisée, vous pouvez accéder à plusieurs informations qui vous aideront à identifier l'erreur : +Within the custom error method, you have access to several information that will help you identifying the error: -- Variables système (*) : +- dedicated system variables(*): - - `Error` (entier long): Code d'erreur - - `Error method` (texte) : nom de la méthode ayant engendré l'erreur - - `Error line` (entier long) : Numéro de ligne de la méthode ayant généré l'erreur - - `Error formula` (texte) : formule du code 4D (texte brut) à l'origine de l'erreur. + - `Error` (longint): error code + - `Error method` (text): name of the method that triggered the error + - `Error line` (longint): line number in the method that triggered the error + - `Error formula` (text): formula of the 4D code (raw text) which is at the origin of the error. -(*) 4D conserve automatiquement le nombre de variables appelées **variables système**, qui répondent à différents besoins. Consultez le manuel Language de 4D*. +(*) 4D automatically maintains a number of variables called **system variables**, meeting different needs. See the *4D Language Reference manual*. -- La commande `GET LAST ERROR STACK` qui retourne les informations sur la pile d'erreur courant de l'application 4D. -- la commande `Get call chain` qui retourne une collection d'objets décrivant chaque étape de la chaîne d'appel de la méthode dans le process courant. +- the `GET LAST ERROR STACK` command that returns information about the current stack of errors of the 4D application. +- the `Get call chain` command that returns a collection of objects describing each step of the method call chain within the current process. -#### Exemple +#### Example -Voici un système de gestion des erreurs simple : +Here is a simple error-handling system: ```4d -//installer la méthode de gestion d'erreur -ON ERR CALL("errorMethod") - //... exécuter le code - ON ERR CALL("") //redonner le contrôle à 4D +//installing the error handling method + ON ERR CALL("errorMethod") + //... executing code + ON ERR CALL("") //giving control back to 4D ``` ```4d -// méthode projet errorMethod - If(Error#1006) //ceci n'est pas une interruption générée par l'utilisateur - ALERT("L'erreur "+String(Error)+" s'est produite". Le code en question est : \""+Error formula+"\"") +// errorMethod project method + If(Error#1006) //this is not a user interruption + ALERT("The error "+String(Error)+" occurred". The code in question is: \""+Error formula+"\"") End if ``` -### Utiliser une méthode de gestion des erreurs vide +### Using an empty error-handling method -Si vous souhaitez cacher la boite de dialogue d'erreur standard, vous pouvez installer une méthode de gestion d'erreurs vide. La variable système `Error` peut être testée dans n'importe quelle méthode, c'est-à-dire en dehors de la méthode de gestion d'erreurs : +If you mainly want the standard error dialog box to be hidden, you can install an empty error-handling method. The `Error` system variable can be tested in any method, i.e. outside of the error-handling method: ```4d -ON ERR CALL("emptyMethod") //emptyMethod existe mais elle est vide +ON ERR CALL("emptyMethod") //emptyMethod exists but is empty $doc:=Open document( "myFile.txt") If (Error=-43) ALERT("File not found.") End if -ON ERR CALL.("") -End if -ON ERR CALL.("") +ON ERR CALL("") ``` From 1210b08507a4ad74ac42e9c53897319fca3cefcb Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:18 +0100 Subject: [PATCH 046/311] New translations flow-control.md (French) --- website/translated_docs/fr/Concepts/flow-control.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/website/translated_docs/fr/Concepts/flow-control.md b/website/translated_docs/fr/Concepts/flow-control.md index 63bdf7ae9df3f8..54f94676a53898 100644 --- a/website/translated_docs/fr/Concepts/flow-control.md +++ b/website/translated_docs/fr/Concepts/flow-control.md @@ -3,14 +3,14 @@ id: control-flow title: Conditions et boucles --- -Quelle que soit la simplicité ou la complexité d’une méthode, vous utiliserez toujours un ou plusieurs types de structure de programmation. Les structures de programmation déterminent si et dans quel ordre les lignes d’instructions sont exécutées à l’intérieur d’une méthode. Il existe trois types de structures : +Regardless of the simplicity or complexity of a method, you will always use one or more of three types of programming structures. Programming structures control the flow of execution, whether and in what order statements are executed within a method. There are three types of structures: -- **Séquentielle** : une structure séquentielle est une structure simple, linéaire. Une séquence est une série d’instructions que 4D exécute les unes après les autres, de la première à la dernière. Une instruction d'une ligne, fréquemment utilisée pour les méthodes objet, est le cas le plus simple de structure séquentielle. Par exemple : `[Personnes]Nom:=Uppercase([Personnes]Nom)` -- **[Conditionnelle](Concepts/cf_branching.md)** : une structure conditionnelle permet aux méthodes de tester une condition et d’exécuter des séquences d’instructions différentes en fonction du résultat. La condition est une expression booléenne, c’est-à-dire pouvant retourner VRAI ou FAUX. L’une des structures conditionnelles est la structure `If...Else...End if`, qui aiguille le déroulement du programme vers une séquence ou une autre. L’autre structure conditionnelle est la structure `Case of...Else...End case`, qui aiguille le programme vers une séquence parmi une ou plusieurs alternatives. -- **[Répétitive](Concepts/cf_looping.md)** : il est très courant, lorsque vous écrivez des méthodes, de rencontrer des cas où vous devez répéter une séquence d’instructions un certain nombre de fois. Pour traiter ces besoins, le langage 4D vous propose plusieurs structures répétitives : +- **Sequential**: a sequential structure is a simple, linear structure. A sequence is a series of statements that 4D executes one after the other, from first to last. A one-line routine, frequently used for object methods, is the simplest case of a sequential structure. For example: `[People]lastName:=Uppercase([People]lastName)` +- **[Branching](Concepts/cf_branching.md)**: A branching structure allows methods to test a condition and take alternative paths, depending on the result. The condition is a Boolean expression, an expression that evaluates TRUE or FALSE. One branching structure is the `If...Else...End if` structure, which directs program flow along one of two paths. The other branching structure is the `Case of...Else...End case` structure, which directs program flow to one of many paths. +- **[Looping](Concepts/cf_looping.md)**: When writing methods, it is very common to find that you need a sequence of statements to repeat a number of times. To deal with this need, the 4D language provides the following looping structures: - `While...End while` - `Repeat...Until` - `For...End for` - - `For each...End for each`
    Les boucles sont contrôlées de deux manières : soit elles se répètent jusqu’à ce qu’une condition soit remplie, soit elles se répètent un nombre fixé de fois. Chaque structure répétitive peut être utilisée de l’une ou l’autre manière, mais les boucles `While` et `Repeat` sont mieux adaptées à la répétition jusqu’à ce qu’une condition soit remplie, alors que les boucles `For` sont mieux adaptées à la répétition un certain nombre de fois. `For each...End for each`, destinée à effectuer des boucles dans les objets et les collections, permet de combiner les deux manières. + - `For each...End for each`
    The loops are controlled in two ways: either they loop until a condition is met, or they loop a specified number of times. Each looping structure can be used in either way, but `While` loops and `Repeat` loops are more appropriate for repeating until a condition is met, and `For` loops are more appropriate for looping a specified number of times. `For each...End for each` allows mixing both ways and is designed to loop within objects and collections. -**Note :** 4D vous permet d’imbriquer des structures de programmation jusqu’à une “profondeur” de 512 niveaux. +**Note:** 4D allows you to embed programming structures up to a "depth" of 512 levels. From 7380e65501a9527ce3eb835ba5f602e27d6b27f2 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:21 +0100 Subject: [PATCH 047/311] New translations identifiers.md (French) --- .../fr/Concepts/identifiers.md | 322 +++++++++--------- 1 file changed, 161 insertions(+), 161 deletions(-) diff --git a/website/translated_docs/fr/Concepts/identifiers.md b/website/translated_docs/fr/Concepts/identifiers.md index b8dc0dc14c8266..c724210b3a94e1 100644 --- a/website/translated_docs/fr/Concepts/identifiers.md +++ b/website/translated_docs/fr/Concepts/identifiers.md @@ -3,70 +3,70 @@ id: identifiers title: Identifiants --- -Cette section détaille les règles d'écriture et de nommage appliquées aux divers identifiants utilisés dans le langage de 4D (variables, tableaux, objets, formulaires, etc.). +This section describes the conventions and rules for naming various elements in the 4D language (variables, tables, objects, forms, etc.). -## Règles de base +## Basic Rules -Les règles suivantes s'appliquent à toutes les structures de 4D. +The following rules apply for all 4D frameworks. - A name must begin with an alphabetic character, an underscore, or a dollar ("$") (note that a dollar sign can denote a local element, see below). -- Le nom peut ensuite contenir des caractères alphabétiques, des caractères numériques, des espaces et des tirets bas (_). -- Les points (".") Les points (".") et les crochets ("[ ]") sont interdits dans les noms de tables, champs, méthodes ou variables. -- Les virgules, barres de fraction, guillemets et deux points (:) sont interdits. -- Les caractères réservés car utilisés comme opérateurs, comme l’astérisque (*) ou le +, sont interdits. -- Les noms réservés, c'est-à-dire les noms de commandes 4D (`Date`, `Time`, etc), les mots-clés (If, For, etc.) et les constantes. -- 4D ignore les espaces superflus. +- Thereafter, the name can include alphabetic characters, numeric characters, the space character, and the underscore character ("_"). +- Periods (".") and brackets ("[ ]") are not allowed in table, field, method, or variable names. +- Commas, slashes, quotation marks, and colons are not allowed. +- Characters reserved for use as operators, such as * and +, are not allowed. +- Do not use reserved names, i.e. 4D command names (`Date`, `Time`, etc), keywords (If, For, etc.), and constants. +- Any trailing spaces are ignored. -### Règles supplémentaires pour les propriétés d'objet et les noms ORDA +### Additional rules for object property and ORDA names -- Les espaces sont interdits. -- Les points (".") Les points (".") et les crochets ("[ ]") sont interdits. -- Les noms sont sensibles à la casse. +- Space characters are not allowed. +- Periods (".") and brackets ("[ ]") are not allowed. +- Names are case sensitive. -### Règles supplémentaires pour SQL +### Additional rules for SQL -- Seuls les caractères _0123456789abcdefghijklmnopqrstuvwxyz sont acceptés -- Les noms ne doivent pas comporter de mot-clé SQL (commande, attribut, etc.). +- Only the characters _0123456789abcdefghijklmnopqrstuvwxyz are accepted +- Names must not include any SQL keywords (command, attribute, etc.). -**Note :** La zone "SQL" de l'inspecteur de l'éditeur de Structure signale automatiquement les caractères non autorisés dans un nom de table ou de champ. +**Note:** The "SQL" area of the Inspector in the Structure editor automatically indicates any unauthorized characters in the name of a table or field. ## Tableaux -Vous désignez un tableau en écrivant simplement son nom, qui est celui que vous passez à une commande de déclaration de tableau (par exemple ARRAY LONGINT) lorsque vous créez le tableau. Les tableaux sont des variables, et tout comme les variables, le nom d'un tableau peut comporter jusqu'à 31 caractères, sans compter les symboles de portée, et il existe trois types de tableaux différents : +You designate an array by using its name, which is the name you pass to an array declaration (such as ARRAY LONGINT) when you create the array. Arrays are variables, and like variables, the name of an array can be up to 31 characters, not including the scope symbols, and there are three different types of arrays: -- Le nom d'un tableau **local** est précédé du symbole dollar ($). -- Le nom d'un tableau **process** ne peut pas commencer par les symboles <> ni par le symbole dollar $). -- Le nom d’un tableau **interprocess** est précédé des symboles (<>), -- les caractères “inférieur à” suivi de “supérieur à”. +- The name of a **local** array is preceded by the dollar sign ($). +- The name of a **process** array cannot start with the <> symbols nor the dollar sign $). +- The name of an **interprocess** array is preceded by the symbols (<>) — a “less than” sign followed by a “greater than” sign. -Voici quelques exemples : +Examples: ```4d -ARRAY TEXT($atSubjects;Records in table([Topics])) //tableau local -SORT ARRAY(asKeywords;>) //tableau process -ARRAY BOOLEAN(<>settings;Records in table([MySettings])) //tableau interprocess +ARRAY TEXT($atSubjects;Records in table([Topics])) //local array +SORT ARRAY(asKeywords;>) //process array +ARRAY BOOLEAN(<>settings;Records in table([MySettings])) //interprocess array ``` -### Eléments de tableaux -Vous désignez un élément d’un tableau local, process ou interprocess à l’aide d’accolades ({…}). L’élément référencé (l’indice) est indiqué par une expression numérique. +### Elements of arrays +You reference an element of an interprocess, process or local array by using the curly braces("{ }"). The element referenced is denoted by a numeric expression. -Voici quelques exemples : +Examples: ```4d - //Traiter un élément d'un tableau local + //Addressing an element of a local array If($asKeywords{1}="Stop") $atSubjects{$vlElem}:=[Topics]Subject $viNextValue:=$aiBigArray{Size of array($aiBigArray)} ``` -### Eléments de tableaux à deux dimensions -Vous désignez un élément d’un tableau à deux dimensions à l’aide d'une double paire d’accolades ({…}) Vous désignez un élément d’un tableau à deux dimensions à l’aide d'une double paire d’accolades ({…}) L’élément référencé (l’indice) est indiqué par deux expressions numériques dans deux paires d’accolades. +### Elements of two-dimensional arrays +You reference an element of a two-dimensional array by using the curly braces ({…}) twice. The element referenced is denoted by two numeric expressions in two sets of curly braces. -Voici quelques exemples : +Examples: ```4d - //Traiter un élément d'un tableau process bidimensionnel + //Addressing an element of a two-dimensional process array If(asKeywords{$vlNextRow}{1}="Stop") atSubjects{10}{$vlElem}:=[Topics]Subject $viNextValue:=aiBigArray{$vlSet}{Size of array(aiBigArray{$vlSet})} @@ -77,78 +77,78 @@ $viNextValue:=aiBigArray{$vlSet}{Size of array(aiBigArray{$vlSet})} A class name must be compliant with standard [property naming rules](#additional-rules-for-object-property-and-orda-names). They are case sensitive. Giving the same name to a class and a [database table](#tables) is not recommended, in order to prevent any conflict. -## Champs +## Fields -Vous désignez un champ en spécifiant d’abord la table à laquelle il appartient. Le nom du champ se place immédiatement derrière celui de la table. Un nom de champ peut contenir jusqu’à 31 caractères. +You designate a field by first specifying the table to which it belongs. The field name immediately follows the table name. A field name can contain up to 31 characters. -Voici quelques exemples : +Examples: ```4d -[Commandes]Total:=Sum([Ligne]Montant) - QUERY([Clients];[Clients]Nom="Dupont") - [Lettres]Text:=Capitalize text([Lettres]Texte) +[Orders]Total:=Sum([Line]Amount) +QUERY([Clients];[Clients]Name="Smith") +[Letters]Text:=Capitalize text([Letters]Text) ``` -## Objets de formulaires +## Form objects -Vous désignez un objet de formulaire en passant son nom sous forme de chaîne, précédée du paramètre *. Un nom d'objet peut contenir jusqu'à 255 octets. +You designate a form object by passing its name as a string, preceded by the * parameter. A form object name can contain up to 255 characters. -Exemple : +Example: ```4d OBJECT SET FONT(*;"Binfo";"Times") ``` -**Note :** Ne confondez pas les objets de formulaire (boutons, list box, variables saisissables...) et les objets du langage 4D. Les objets du langage de 4D sont créés et manipulés via la notation objet ou des commandes dédiées. +**Note:** Do not confuse form objects (buttons, list boxes, variables that can be entered, etc.) and objects in the 4D language. 4D language objects are created and manipulated via object notation or dedicated commands. -## Formulaires +## Forms -Vous désignez un formulaire en utilisant une expression de type chaîne alphanumérique qui représente son nom. Le nom d’un formulaire peut contenir jusqu’à 31 caractères. +You designate a form by using a string expression that represents its name. A form name can contain up to 31 characters. -Voici quelques exemples : +Examples: ```4d -FORM SET INPUT([Personnes];"Entrée") -FORM SET OUTPUT([Personnes];"Sortie") - DIALOG([Stock];"Boîte de note"+String($vlStage)) +FORM SET INPUT([People];"Input") +FORM SET OUTPUT([People];"Output") +DIALOG([Storage];"Note box"+String($vlStage)) ``` -## Fonctions +## Functions Function names must be compliant with standard [property naming rules](#additional-rules-for-object-property-and-orda-names). > Tip: Starting the function name with an underscore character ("_") will exclude the function from the autocompletion features in the 4D code editor. -## Sélections temporaires +## Named Selections -Le nom d'une sélection temporaire peut contenir jusqu’à 255 caractères, symbole <> non compris). +A named selection name can contain up to 255 characters, not including scope character(s). -- Déclarez une sélection temporaire **process** en passant une expression de type chaîne qui représente son nom (et qui ne doit pas débuter par les symboles <> ou $). -- Désignez une sélection temporaire **interprocess** si son nom est précédé des caractères (<>) -- un symbole “inférieur à” suivi de “supérieur à”. +- You denote a **process** named selection by using a string expression that represents its name (which cannot start with the <> symbols nor the dollar sign $). +- You denote an **interprocess** named selection if its name is preceded by the symbols (<>) — a “less than” sign followed by a “greater than” sign. -Voici quelques exemples : +Examples: ```4d -USE NAMED SELECTION([Customers];"Closed")//Sélection temporaire process -USE NAMED SELECTION([Customers];"<>ByZipcode") //Sélection temporaire interprocess +USE NAMED SELECTION([Customers];"Closed")//Process Named Selection +USE NAMED SELECTION([Customers];"<>ByZipcode") //Interprocess Named Selection ``` -## Propriétés (attributs) d'objets +## Object attributes -Désignez un attribut d'objet (également appelé propriété d'objet) en plaçant un point (".") entre le nom de l'objet et le nom de l'attribut. Un nom d'attribut peut contenir jusqu'à 255 caractères et est sensible à la casse. +You designate an object attribute (also called object property) by placing a point (".") between the name of the object and the name of the attribute. An attribute name can contain up to 255 characters and is case sensitive. -Voici quelques exemples : +Examples: ```4d -monObjet.monAttribut:="10" - $valeur:=$clientObj.data.address.city +myObject.myAttribute:="10" +$value:=$clientObj.data.address.city ``` -**Note :** Des règles supplémentaires s'appliquent aux noms des attributs d'objets (ils doivent être conformes à la spécification ECMA Script). For more information, see [additional rules above](#additional-rules-for-object-property-and-orda-names) and [Object property identifiers](Concepts/dt_object.md#object-property-identifiers). +**Note:** Additional rules apply to object attribute names (they must comply with the ECMAScript specification). For more information, see [additional rules above](#additional-rules-for-object-property-and-orda-names) and [Object property identifiers](Concepts/dt_object.md#object-property-identifiers). ## Paramètres Parameter names must start with a `$` character and be compliant with [property naming rules](#additional-rules-for-object-property-and-orda-names). -Voici quelques exemples : +Examples: ```4d Function getArea($width : Integer; $height : Integer)-> $area : Integer @@ -156,94 +156,94 @@ Function getArea($width : Integer; $height : Integer)-> $area : Integer #DECLARE ($i : Integer ; $param : Date) -> $myResult : Object ``` -## Commandes de plug-ins +## Plug-In Commands -Vous désignez une commande de plug-in en écrivant son nom tel qu'il est défini dans le plug-in. Le nom d'une commande de plug-in peut contenir jusqu'à 31 caractères. +You designate a plug-in command by using its name as defined by the plug-in. A plug-in command name can contain up to 31 characters. -Exemple : +Example: ```4d -$erreur:=SMTP_From($smtp_id;"henry@gmail.com") +$error:=SMTP_From($smtp_id;"henry@gmail.com") ``` -## Process +## Processes -Le nom d'un process peut contenir jusqu’à 255 caractères, symbole <> non compris. +A process name can contain up to 255 characters, not including scope character. In the single-user version, or in Client/Server on the Client side, there are two process scopes: **global** or **local**. -- Déclarez un process **global** en passant une expression de type chaîne qui représente son nom (qui ne doit pas commencer par le symbole $). -- Déclarez un process **local** lorsque son nom est précédé du symbole dollar ($). +- You denote a **global** process by using a string expression that represents its name (which cannot start with the dollar sign $). +- You denote a **local** process if the name of the process is preceded by a dollar ($) sign. -Voici quelques exemples : +Examples: ```4d - // Lancer le process global "Ajouter Clients" - $vlProcessID:=New process("P_AJOUT_CLIENTS";48*1024;"Ajouter Clients") - // Lancer le process local "$Suivre Souris" - $vlProcessID:=New process("P_SUIVRE_SOURIS";16*1024;"$Suivre Souris") + //Starting the global process "Add Customers" +$vlProcessID:=New process("P_ADD_CUSTOMERS";48*1024;"Add Customers") + //Starting the local process "$Follow Mouse Moves" +$vlProcessID:=New process("P_MOUSE_SNIFFER";16*1024;"$Follow Mouse Moves") ``` -## Méthodes +## Project methods -Vous désignez une méthode (procédure ou fonction utilisateur) en saisissant son nom. Ce nom peut contenir jusqu’à 31 caractères. +You designate a project method (procedure or function) by using its name. A method name can contain up to 31 characters. -**Note :** Une méthode qui ne retourne pas de résultat est appelée une procédure. Une méthode qui retourne un résultat est appelée une fonction utilisateur. +**Note:** A project method that does not return a result is also called a procedure. A project method that returns a result is also called a function. -Voici quelques exemples : +Examples: ```4d -If(Nouveau client) +If(New client) DELETE DUPLICATED VALUES -APPLY TO SELECTION([Employés];AUGMENTER SALARIES) +APPLY TO SELECTION([Employees];INCREASE SALARIES) ``` -**Conseil :** Nous vous recommandons d'adopter, pour nommer vos méthodes, la même convention que celle utilisée dans le langage de 4D : écrivez les noms de vos procédures en caractères majuscules, et vos fonctions en minuscules avec la première lettre en majuscule. écrivez les noms de vos procédures en caractères majuscules, et vos fonctions en minuscules avec la première lettre en majuscule. Ainsi, lorsque vous rouvrirez un projet au bout de plusieurs mois, vous identifierez immédiatement si une méthode retourne ou non un résultat, en regardant son nom dans la fenêtre de l'Explorateur. +**Tip:** It is a good programming technique to adopt the same naming convention as the one used by 4D for built-in methods. Use uppercase characters for naming your methods; however if a method is a function, capitalize the first character of its name. By doing so, when you reopen a project for maintenance after a few months, you will already know if a method returns a result by simply looking at its name in the Explorer window. -**Note :** Lorsque vous souhaitez appeler une méthode, vous saisissez simplement son nom. Toutefois, certaines commandes intégrées telles que `APPELER SUR EVENEMENT`, ainsi que les commandes des plug-ins, nécessitent que vous passiez le nom d'une méthode en tant que chaîne lorsqu'un paramètre de type méthode est requis. Voici quelques exemples : +**Note:** When you call a method, you just type its name. However, some 4D built-in commands, such as `ON EVENT CALL`, as well as all the Plug-In commands, expect the name of a method as a string when a method parameter is passed. Examples: ```4d - // Cette commande attend une méthode (fonction) ou une formule - QUERY BY FORMULA([aTable];Recherche Spéciale) - // Cette commande attend une méthode (procédure) ou une formule - APPLY TO SELECTION([Employés];AUGMENTER SALARIES) - // Mais cette commande attend un nom de méthode -ON EVENT CALL("GERER EVENEMENTS") + //This command expects a method (function) or formula +QUERY BY FORMULA([aTable];Special query) + //This command expects a method (procedure) or statement +APPLY TO SELECTION([Employees];INCREASE SALARIES) + //But this command expects a method name +ON EVENT CALL("HANDLE EVENTS") ``` -Les méthodes peuvent accepter des paramètres (ou arguments). Les paramètres sont passés à la méthode entre parenthèses, à la suite du nom de la méthode. Chaque paramètre est séparé par des points virgule (;). Les paramètres sont passés à la méthode appelée en tant que variables locales numérotées séquentiellement : $1, $2,…, $n. De plus, plusieurs paramètres consécutifs (s'ils sont les derniers) peuvent être adressés à l'aide de la syntaxe ${n}où n, expression numérique, est le numéro du paramètre. +Project methods can accept parameters (arguments). The parameters are passed to the method in parentheses, following the name of the method. Each parameter is separated from the next by a semicolon (;). The parameters are available within the called method as consecutively numbered local variables: $1, $2,…, $n. In addition, multiple consecutive (and last) parameters can be addressed with the syntax ${n}where n, numeric expression, is the number of the parameter. -A l’intérieur d'une fonction, la variable locale $0 contient la valeur à retourner. +Inside a function, the $0 local variable contains the value to be returned. -Voici quelques exemples : +Examples: ```4d - // Dans DROP SPACES, $1 est pointeur sur le champ [Personnes]Nom - DROP SPACES(->[Personnes]Nom) - - // Dans Créateur tableau : - // - $1 est un numérique qui vaut 1 - // - $2 est un numérique qui vaut 5 - // - $3 est un texte ou un alpha qui vaut "Super" - // - La valeur résultante est assignée à $0 - $vsRésultat:=Calc creator(1;5;"Super") - - // Dans Poubelle : - // - Les trois paramètres sont de type Texte ou Alpha - // - Vous pouvez y accéder par $1, $2 ou $3 - // - Vous pouvez y accéder en écrivant, par exemple, ${$vlParam} où $vlParam vaut 1, 2 ou 3 - // - La valeur résultante est assignée à $0 - vtClone:=Dump("est";"le";"il") + //Within DROP SPACES $1 is a pointer to the field [People]Name +DROP SPACES(->[People]Name) + + //Within Calc creator: + //- $1 is numeric and equal to 1 + //- $2 is numeric and equal to 5 + //- $3 is text or string and equal to "Nice" + //- The result value is assigned to $0 +$vsResult:=Calc creator(1;5;"Nice") + + //Within Dump: + //- The three parameters are text or string + //- They can be addressed as $1, $2 or $3 + //- They can also be addressed as, for instance, ${$vlParam} where $vlParam is 1, 2 or 3 + //- The result value is assigned to $0 +vtClone:=Dump("is";"the";"it") ``` -## Ensembles +## Sets -Un nom d'ensemble peut contenir jusqu’à 255 caractères, symbole(s) <> non compri(s). +A set name can contain up to 255 characters, not including scope character()s). -- Déclarez un ensemble **process** en passant une expression de type chaîne qui représente son nom (et qui ne doit pas débuter par les symboles <> ou $). -- Désignez un ensemble temporaire **interprocess** si son nom est précédé des caractères (<>) -- un symbole “inférieur à” suivi de “supérieur à”. -- Sur 4D Server, le nom d'un ensemble **client** est précédé du symbole dollar ($). Ce nom peut comporter jusqu'à 255 caractères, symbole dollar non compris. +- You denote a **process** set by using a string expression that represents its name (which cannot start with the <> symbols or the dollar sign $). +- You denote an **interprocess** set if the name of the set is preceded by the symbols (<>) — a “less than” sign followed by a “greater than” sign. +- On 4D Server, the name of a **client** set is preceded by the dollar sign ($). A client set name can contain up to 255 characters, not including the dollar sign. -> Sets are maintained on the Server machine. Dans certains cas, pour des raisons particulières ou d'optimisation, vous pourrez avoir besoin d'utiliser des ensembles localement, sur les postes clients. To do so, you use client sets. +> Sets are maintained on the Server machine. In certain cases, for efficiency or special purposes, you may need to work with sets locally on the Client machine. To do so, you use client sets. -Voici quelques exemples : +Examples: ```4d CREATE SET([Customers];"Customer Orders")//Process set USE SET("<>Deleted Records") //Interprocess set @@ -255,24 +255,24 @@ If(Records in set("$Selection"+String($i))>0) //Client set ## Tables -You designate a table by placing its name between brackets: \[...]. Un nom de table peut contenir jusqu’à 31 caractères. Giving the same name to a table and a [class](#classes) is not recommended, in order to prevent any conflict. +You designate a table by placing its name between brackets: \[...]. A table name can contain up to 31 characters. Giving the same name to a table and a [class](#classes) is not recommended, in order to prevent any conflict. -Voici quelques exemples : +Examples: ```4d -DEFAULT TABLE([Commandes]) -FORM SET INPUT([Clients];"Entrée") -ADD RECORD([Lettres]) +DEFAULT TABLE([Orders]) +FORM SET INPUT([Clients];"Entry") +ADD RECORD([Letters]) ``` ## Variables -Le nom d’une variable peut contenir jusqu’à 31 caractères, symbole de portée non compris. +The name of a variable can be up to 31 characters, not including the scope symbols. -- Désignez une variable **locale** en faisant précéder son nom du symbole dollar ($). +- You designate a **local** variable by placing a dollar sign ($) before the variable name. - You designate a **process** variable by using its name (which cannot start with the <> symbols nor the dollar sign $) - You designate an **interprocess** variable by preceding the name of the variable with the symbols (<>) — a “less than” sign followed by a “greater than” sign. -Voici quelques exemples : +Examples: ```4d For($vlRecord;1;100) //local variable @@ -285,43 +285,43 @@ If(bValidate=1) //process variable ## Summary of Identifiers -Le tableau suivant résume les principes de nommage des identifiants dans les méthodes. - -| Identifiant | Longueur Longueur max. | Exemple | -| --------------------------------- | ---------------------- | ------------------------------ | -| Table | 31 | [Factures] | -| Champ | 31 | [Employés]Nom | -| Variable/Tableau interprocess | <> + 31 | <>vlProcessSuivantID | -| Variable/Tableau process | 31 | vsNomCourant | -| Variable/Tableau local(e) | $ + 31 | $vlCompteurLocal | -| Propriétés d'objets | 255 | $o.monAttribut | -| Formulaire | 31 | "Formulaire Web perso" | -| Objet de formulaire | 255 | "MonBouton" | -| Méthode | 31 | M_AJOUTER_CLIENTS | -| Commande de plug-in | 31 | WR INSERER TEXTE | -| Ensemble interprocess | <> + 255 | "<>Enregistrements à archiver" | -| Ensemble process | 255 | "Enregistrements actuels" | -| Ensemble client | $ + 255 | "$Sujets précédents" | -| Sélection temporaire | 255 | "Employés de A à Z" | -| Sélection temporaire interprocess | <> + 255 | "<>Employés de Z à A" | -| Process local | $ + 255 | "$SuivreEvénements" | -| Process global | 255 | "*P_MODULE_FACTURES*" | -| Sémaphore | 255 | "monsémaphore" | - -**Note :** En cas d'utilisation de caractères non romans dans les noms des identifiants, leur taille maximum peut être inférieure. - -## Résoudre les conflits de noms - -Veillez à utiliser des noms uniques pour les différents éléments de votre projet. Si un élément particulier porte le même nom qu’un autre élément d’un autre type (par exemple, si un champ est nommé Personnes et qu’une variable est également nommée Personnes), 4D utilise un système de priorité. - -4D identifie les noms utilisés dans les méthodes en fonction de l’ordre de priorité suivant : - -1. Champs -2. Commandes +The following table summarizes 4D naming conventions. + +| Identifier | Max. Length | Example | +| ---------------------------- | ----------- | -------------------------- | +| Table | 31 | [Invoices] | +| Field | 31 | [Employees]Last Name | +| Interprocess Variable/Array | <> + 31 | <>vlNextProcessID | +| Process Variable/Array | 31 | vsCurrentName | +| Local Variable/Array | $ + 31 | $vlLocalCounter | +| Object attribute | 255 | $o.myAttribute | +| Form | 31 | "My Custom Web Input" | +| Form object | 255 | "MyButton" | +| Project method | 31 | M_ADD_CUSTOMERS | +| Plug-in Routine | 31 | PDF SET ROTATION | +| Interprocess Set | <> + 255 | "<>Records to be Archived" | +| Process Set | 255 | "Current selected records" | +| Client Set | $ + 255 | "$Previous Subjects" | +| Named Selection | 255 | "Employees A to Z" | +| Interprocess Named Selection | <> + 255 | "<>Employees Z to A" | +| Local Process | $ + 255 | "$Follow Events" | +| Global Process | 255 | "*P_INVOICES_MODULE*" | +| Semaphore | 255 | "mysemaphore" | + +**Note:** If non-Roman characters are used in the names of the identifiers, their maximum length may be smaller. + +## Resolving Naming Conflicts + +Be sure to use unique names for the different elements in your project. If a particular element has the same name as another element of a different type (for example, if a field is named Person and a variable is also named Person), 4D uses a priority system. + +4D identifies names used in procedures in the following order: + +1. Fields +2. Commands 3. Méthodes -4. Commandes de plug-in -5. Constantes prédéfinies +4. Plug-in routines +5. Predefined constants 6. Variables. -Par exemple, 4D dispose d’une fonction interne appelée `Date`. Si vous appelez *Date* une de vos méthodes, 4D considérera `Date` comme étant la fonction interne et non votre méthode. Vous ne pourrez pas appeler votre méthode. En revanche, si vous nommez un champ “Date”, 4D considérera que vous souhaitez appeler votre champ et non la fonction intégrée. +For example, 4D has a built-in command called `Date`. If you named a method *Date*, 4D would recognize it as the built-in `Date` command, and not as your method. This would prevent you from calling your method. If, however, you named a field “Date”, 4D would try to use your field instead of the `Date` command. From 34e11b7bea1a70ea399b492f2f3f33a625522f6f Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:24 +0100 Subject: [PATCH 048/311] New translations interpreted.md (French) --- .../fr/Concepts/interpreted.md | 82 +++++++++---------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/website/translated_docs/fr/Concepts/interpreted.md b/website/translated_docs/fr/Concepts/interpreted.md index 248a2ee3602d1b..fba630f4e2d740 100644 --- a/website/translated_docs/fr/Concepts/interpreted.md +++ b/website/translated_docs/fr/Concepts/interpreted.md @@ -3,60 +3,60 @@ id: interpreted-compiled title: Modes interprété et compilé --- -Les applications 4D fonctionnent en mode **interprété** ou en mode **compilé** : +4D applications can work in **interpreted** or **compiled** mode: -- En mode interprété, les déclarations sont lues et traduites en langage machine lorsqu'elles sont exécutées. Vous pouvez ajouter ou modifier le code là où vous le souhaitez, l'application se met à jour automatiquement. -- En mode compilé, toutes les méthodes sont lues et traduites une seule fois, lors de la compilation. Par la suite, l'application contient uniquement des instructions au niveau de l'assemblage, il n'est donc plus possible de modifier le code. +- in interpreted mode, statements are read and translated in machine language at the moment of their execution. You can add or modify the code whenever you need to, the application is automatically updated. +- in compiled mode, all methods are read and translated once, at the compilation step. Afterwards, the application only contains assembly level instructions are available, it is no longer possible to edit the code. -Les avantages procurés par le compilateur sont les suivants : +The advantages of the compilation are: -- **Vitesse :** votre application s'exécute de 3 à 1000 fois plus vite. -- **Vérification du code** : la cohérence interne du code de votre application est entièrement contrôlée. Les conflits de logique et de syntaxe sont détectés. -- **Protection :** une fois votre application compilée, vous pouvez en supprimer le code interprété. Alors, l'application compilée dispose des mêmes fonctionnalités que la base originale, à la différence près que la structure et les méthodes ne peuvent plus être visualisées ni modifiées délibérément ou par inadvertance. -- **Application indépendantes "double-cliquables"** : une application compilée peut également être transformée en application indépendante (sous Windows, des fichiers ".EXE") comportant sa propre icône. -- **Exécution en mode préemptif** : seul le code compilé peut être exécuté dans un process préemptif. +- **Speed**: Your application can run from 3 to 1,000 times faster. +- **Code checking**: Your application is scanned for the consistency of code. Both logical and syntactical conflicts are detected. +- **Protection**: Once your application is compiled, you can delete the interpreted code. Then, the compiled application is functionally identical to the original, except that the structure and methods cannot be viewed or modified, deliberately or inadvertently. +- **Stand-alone double-clickable applications**: compiled applications can also be transformed into stand-alone applications (.EXE files) with their own icon. +- **Preemptive mode**: only compiled code can be executed in preemptive processes. -## Différences entre le code interprété et le code compilé -Bien que l'application fonctionnera de la même manière en modes interprété et compilé, il est important de connaitre les différences que l'on peut rencontrer pendant la saisie du code qui sera compilé. L'interpréteur de 4D est généralement plus souple que le compilateur. +## Differences between interpreted and compiled code +Although application will work the same way in interpreted and compiled modes, there are some differences to know when you write code that will be compiled. The 4D interpreter is usually more flexible than the compiler. -| Compilé | Interprété | -| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | -| Vous ne devez pas avoir une méthode qui aurait le même nom qu’une variable. | Aucune erreur n'est générée, mais la méthode est prioritaire | -| Toutes les variables doivent être typées, soit via une directive de compilateur (ex : `C_ENTIER LONG`), soit via le compilateur au moment de la compilation. | Les variables peuvent être typées à la volée (non recommandé) | -| Vous ne pouvez pas modifier le type d'une variable ou d'un tableau. | La modification du type d'une variable ou d'un tableau est possible (non recommandé) | -| Vous ne pouvez pas convertir un tableau simple en tableau à deux dimensions, et vice-versa. | Possible | -| Bien que le compilateur déduise le type des variables si nécessaire, il est conseillé de déclarer le type des variables à l'aide des directives de compilation lorsque le type de données est ambigu, en particulier dans un formulaire. | | -| La fonction `Indefinie` retournera toujours Faux. Les variables sont toujours définies. | | -| Si vous avez coché la propriété "Peut être exécutée dans un process préemptif" pour la méthode, le code ne doit pas appeler de commandes thread-unsafe ou d'autres méthodes thread-unsafe. | Les propriétés du process préemptif sont ignorées | -| La commande `APPELER 4D` est nécessaire pour appeler des boucles spécifiques | Il est toujours possible d'interrompre 4D | +| Compiled | Interpreted | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | +| You cannot have a method with the same name as a variable. | No error is generated, but priority is given to the method | +| All variables must by typed, either through a compiler directive (ex: `C_LONGINT`), or by the compiler at compilation time. | Variables can be typed on-the-fly (not recommended) | +| You cannot change the data type of any variable or array. | Changing the data type of a variable or an array is possible (not recommended) | +| You cannot change a one-dimensional array to a two-dimensional array, or change a two-dimensional array to a one-dimensional array. | Possible | +| Although the compiler will type the variable for you, you should specify the data type of a variable by using compiler directives where the data type is ambiguous, such as in a form. | | +| The `Undefined` function always returns False for variables. Variables are always defined. | | +| If you have checked the "Can be run in preemptive processes" property for the method, the code must not call any thread-unsafe commands or other thread-unsafe methods. | Preemptive process properties are ignored | +| The `IDLE` command is necessary to call 4D in specific loops | It is always possible to interrupt 4D | -## Utiliser les directives du compilateur avec l'interpréteur +## Using Compiler Directives with the Interpreter -Les directives de compilateur ne sont pas requises pour les applications non compilées. L'interpréteur type automatiquement chaque variable selon son utilisation dans la déclaration, et une variable peut être retypée librement dans le projet d'application. +Compiler directives are not required for uncompiled applications. The interpreter automatically types each variable according to how it is used in each statement, and a variable can be freely retyped throughout the application project. -Grâce à cet aspect flexible, il est possible qu'une application agisse différemment en modes interprété et compilé. +Because of this flexibility, it is possible that an application can perform differently in interpreted and compiled modes. -Par exemple, si vous écrivez : +For example, if you write: ```4d -C_ENTIER LONG(MyInt) +C_LONGINT(MyInt) ``` -et ailleurs dans l'application, vous écrivez : +and elsewhere in the project, you write: ```4d MyInt:=3.1416 ``` -Dans cet exemple, `MyInt` se voit assigner la même valeur (3) dans les modes interprété et compilé, étant donné que la directive du compilateur est interprétée *avant* la déclaration d'affectation. +In this example, `MyInt` is assigned the same value (3) in both the interpreted and compiled modes, provided the compiler directive is interpreted *prior* to the assignment statement. -L'interpréteur 4D utilise des directives de compilateur pour typer les variables. Lorsque l'interpréteur rencontre une directive de compilateur, il type la variable en fonction de la directive. Si une déclaration ultérieure tente d'affecter une valeur incorrecte (ex : affecter une valeur alphanumérique à une variable numérique), l'affectation n'aura pas lieu et générera une erreur. +The 4D interpreter uses compiler directives to type variables. When the interpreter encounters a compiler directive, it types the variable according to the directive. If a subsequent statement tries to assign an incorrect value (e.g., assigning an alphanumeric value to a numeric variable) the assignment will not take place and will generate an error. -L'ordre d'apparition des deux déclarations importe peu au compilateur, car il scanne d'abord le projet dans son intégralité pour les directives du compilateur. En revanche, l'interpréteur n'est pas systématique. Il interprète les déclarations dans leur ordre d'exécution. Cet ordre peut évidemment changer d'une session à l'autre, en fonction de ce que fait l'utilisateur. C'est pourquoi il est important de concevoir votre projet afin que vos directives de compilateur s'exécutent avant n'importe quelle déclaration contenant des variables déclarées. +The order in which the two statements appear is irrelevant to the compiler, because it first scans the entire project for compiler directives. The interpreter, however, is not systematic. It interprets statements in the order in which they are executed. That order, of course, can change from session to session, depending on what the user does. For this reason, it is important to design your project so that your compiler directives are executed prior to any statements containing declared variables. -## Utiliser des pointeurs pour éviter les retypages +## Using pointers to avoid retyping -Il n’est pas possible de retyper une variable. Il est, en revanche, tout à fait possible de faire pointer un pointeur successivement sur des variables de type différent. Par exemple, le code suivant s'applique aussi bien dans le mode interprété que dans le mode compilé : +A variable cannot be retyped. However, it is possible to use a pointer to refer to variables of different data types. For example, the following code is allowed in both interpreted and compiled modes: ```4d C_POINTER($p) @@ -66,19 +66,19 @@ C_LONGINT($age) $name:="Smith" $age:=50 -$p:=->$name //texte cible pour le pointeur -$p->:="Wesson" //assigne une valeur texte +$p:=->$name //text target for the pointer +$p->:="Wesson" //assigns a text value $p:=->$age -// nouvelle cible de type différent pour le pointeur -$p->:=55 //assigne une valeur numérique +// new target of different type for the pointer +$p->:=55 //assigns a number value ``` -Imaginez une fonction qui retourne la longueur (nombre de caractères) de valeurs de tout type. +Imagine a function that returns the length (number of charaters) of values that can be of any type. ```4d - // Calc_Length (combien de caractères) - // $1 = pointeur vers un type de variable flexible, numérique, text, heure, booléen + // Calc_Length (how many characters) + // $1 = pointer to flexible variable type, numeric, text, time, boolean C_POINTER($1) C_TEXT($result) @@ -87,14 +87,14 @@ $result:=String($1->) $0:=Length($result) ``` -La méthode peut alors être appelée : +Then this method can be called: ```4d $var1:="my text" $var2:=5.3 $var3:=?10:02:24? $var4:=True -$vLength:=Calc_Length(->$var1)+Calc_Length(->$var2)+Calc_Length(->$var3)+Calc_Length(->$var4) +$vLength:=Calc_Length(->$var1)+Calc_Length(->$var2)+Calc_Length (->$var3)+Calc_Length(->$var4) ALERT("Total length: "+String($vLength)) ``` From 00e2bcf668d14043d26b00bfb055e843f681d678 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:26 +0100 Subject: [PATCH 049/311] New translations onDeactivate.md (French) --- website/translated_docs/fr/Events/onDeactivate.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/website/translated_docs/fr/Events/onDeactivate.md b/website/translated_docs/fr/Events/onDeactivate.md index 06babd10114d8f..28554948af4078 100644 --- a/website/translated_docs/fr/Events/onDeactivate.md +++ b/website/translated_docs/fr/Events/onDeactivate.md @@ -3,16 +3,16 @@ id: onDeactivate title: On Deactivate --- -| Code | Peut être appelé par | Définition | -| ---- | -------------------- | --------------------------------------------------- | -| 12 | Formulaire | The form’s window ceases to be the frontmost window | +| Code | Can be called by | Definition | +| ---- | ---------------- | --------------------------------------------------- | +| 12 | Form | The form’s window ceases to be the frontmost window | ## Description If the window of a form was the frontmost window, this event is called when the window is sent to the background. -Cet événement s'applique au formulaire dans son ensemble et non à un objet particulier. Consequently, if the `On Deactivate` form event property is selected, only the form will have its form method called. +This event applies to the form as a whole and not to a particular object. Consequently, if the `On Deactivate` form event property is selected, only the form will have its form method called. -### Voir également +### See also [Sur activation](onActivate.md) \ No newline at end of file From 84824a4f006b8e996ff01a9e7703828a06b8a555 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:29 +0100 Subject: [PATCH 050/311] New translations onDisplayDetail.md (French) --- website/translated_docs/fr/Events/onDisplayDetail.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/Events/onDisplayDetail.md b/website/translated_docs/fr/Events/onDisplayDetail.md index 732fcabae0fe4b..e24b6b4a99a3eb 100644 --- a/website/translated_docs/fr/Events/onDisplayDetail.md +++ b/website/translated_docs/fr/Events/onDisplayDetail.md @@ -3,7 +3,7 @@ id: onDisplayDetail title: Sur affichage corps --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | -------------------------------------------------- | ------------------------------------------------------------------------------------------------- | | 8 | Form - [List Box](FormObjects/listbox_overview.md) | A record is about to be displayed in a list form or a row is about to be displayed in a list box. | @@ -30,7 +30,7 @@ In this context, the following sequence of calls to methods and form events is t Calling a 4D command that displays a dialog box from the `On Display Detail` event is not allowed and will cause a syntax error to occur. More particularly, the commands concerned are: `ALERT`, `DIALOG`, `CONFIRM`, `Request`, `ADD RECORD`, `MODIFY RECORD`, `DISPLAY SELECTION`, and `MODIFY SELECTION`. -### Liste box sélection +### Selection list box This event is generated when a row of a [**selection type**](FormObjects/listbox_overview.md#selection-list-boxes) list box is displayed. From 17fc65582360287c60bbef89fb60d5d751440f49 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:31 +0100 Subject: [PATCH 051/311] New translations cf_branching.md (French) --- .../fr/Concepts/cf_branching.md | 184 ++++++++---------- 1 file changed, 86 insertions(+), 98 deletions(-) diff --git a/website/translated_docs/fr/Concepts/cf_branching.md b/website/translated_docs/fr/Concepts/cf_branching.md index ca8de295448787..1839119c0ab87b 100644 --- a/website/translated_docs/fr/Concepts/cf_branching.md +++ b/website/translated_docs/fr/Concepts/cf_branching.md @@ -3,31 +3,31 @@ id: branching title: Structures conditionnelles --- -Une structure de branchement permet aux méthodes de tester une condition et d'emprunter des chemins alternatifs, en fonction du résultat. +A branching structure allows methods to test a condition and take alternative paths, depending on the result. ## If...Else...End if -La syntaxe de la structure conditionnelle `If...Else...End if` est la suivante : +The formal syntax of the `If...Else...End if` control flow structure is: ```4d If(Boolean_Expression) - instruction(s) + statement(s) Else - instruction(s) -End if + statement(s) + End if ``` -A noter que l'élément `Else` est optionnel, vous pouvez écrire : +Note that the `Else` part is optional; you can write: ```4d If(Boolean_Expression) - instruction(s) + statement(s) End if ``` -La structure `If...Else...End if` permet à votre méthode de choisir dans une alternative, en fonction du résultat, TRUE ou FALSE, d’un test (une expression booléenne). Si l’expression booléenne est TRUE, les instructions qui suivent immédiatement le test sont exécutées. Si l’expression booléenne est FALSE, les instructions suivant la ligne Else sont exécutées. Le `Else` est optionnel ; lorsqu’il est omis, c’est la première ligne d’instructions suivant le `End if` (s’il y en a une) qui est exécutée. +The `If...Else...End if` structure lets your method choose between two actions, depending on whether a test (a Boolean expression) is TRUE or FALSE. When the Boolean expression is TRUE, the statements immediately following the test are executed. If the Boolean expression is FALSE, the statements following the Else statement are executed. The `Else` statement is optional; if you omit Else, execution continues with the first statement (if any) following the `End if`. -A noter que l'expression booléenne est toujours évaluée en totalité. Examinons en particulier le test suivant : +Note that the Boolean expression is always fully evaluated. Consider in particular the following test: ```4d If(MethodA & MethodB) @@ -35,7 +35,7 @@ A noter que l'expression booléenne est toujours évaluée en totalité. Examino End if ``` -L'expression n'est TRUE que si les deux méthodes sont TRUE. Or, même si _MethodA_ retourne FALSE, 4D évaluera quand même _MethodB_, ce qui représente une perte de temps inutile. Dans ce cas, il est préférable d'utiliser une structure du type : +he expression is TRUE only if both methods are TRUE. However, even if _MethodA_ returns FALSE, 4D will still evaluate _MethodB_, which is a useless waste of time. In this case, it is more interesting to use a structure like: ```4d If(MethodA) @@ -45,189 +45,177 @@ L'expression n'est TRUE que si les deux méthodes sont TRUE. Or, même si _Metho End if ``` -Le résultat est équivalent et _MethodB_ n'est évaluée que si nécessaire. +The result is similar and _MethodB_ is evaluated only if necessary. -### Exemple +### Example ```4d - // Demander à l'utilisateur de saisir un nom + // Ask the user to enter a name $Find:=Request(Type a name) If(OK=1) QUERY([People];[People]LastName=$Find) Else ALERT("You did not enter a name.") - End if End if ``` -**Astuce :** Il n'est pas obligatoire que des instructions soient exécutées dans chaque branche de l'alternative. Lorsque vous développez un algorithme, ou lorsque vous poursuivez un but précis, rien ne vous empêche d'écrire : +**Tip:** Branching can be performed without statements to be executed in one case or the other. When developing an algorithm or a specialized application, nothing prevents you from writing: ```4d - If(Expression_booléenne) + If(Boolean_Expression) Else - instruction(s) + statement(s) End if ``` -ou : +or: ```4d - If(Expression_booléenne) - instruction(s) + If(Boolean_Expression) + statement(s) Else End if ``` -## Au cas ou...Sinon...Fin de cas +## Case of...Else...End case -La syntaxe de la structure conditionnelle `Case of...Else...End case` est la suivante : +The formal syntax of the `Case of...Else...End case` control flow structure is: ```4d Case of - :(Expression_booléenne) - instruction(s) - :(Expression_booléenne) + :(Boolean_Expression) + statement(s) + :(Boolean_Expression) statement(s) . . . - :(Expression_booléenne) - instruction(s) + :(Boolean_Expression) + statement(s) Else - instruction(s) + statement(s) End case ``` -A noter que l'élément `Else` est optionnel, vous pouvez écrire : +Note that the `Else` part is optional; you can write: ```4d Case of - :(Expression_booléenne) - instruction(s) - :(Expression_booléenne) + :(Boolean_Expression) + statement(s) + :(Boolean_Expression) statement(s) . . . - :(Expression_booléenne) - instruction(s) + :(Boolean_Expression) + statement(s) End case ``` -Tout comme la structure `If...Else...End if`, la structure `Case of...Else...End case` permet également à votre méthode de choisir parmi plusieurs séquences d’instructions. A la différence de la structure `If...Else...End`, la structure `Case of...Else...End case` peut tester un nombre illimité d’expressions booléennes et exécuter la séquence d’instructions correspondant à la valeur TRUE. +As with the `If...Else...End if` structure, the `Case of...Else...End case` structure also lets your method choose between alternative actions. Unlike the `If...Else...End` if structure, the `Case of...Else...End case` structure can test a reasonable unlimited number of Boolean expressions and take action depending on which one is TRUE. -Chaque expression booléenne débute par le caractère deux points (`:`). La combinaison de deux points et d’une expression booléenne est appelée un cas. Par exemple, la ligne suivante est un cas : +Each Boolean expression is prefaced by a colon (`:`). This combination of the colon and the Boolean expression is called a case. For example, the following line is a case: ```4d :(bValidate=1) ``` -Seules les instructions suivant le premier cas TRUE (et ce, jusqu’au cas suivant) seront exécutées. Si aucun des cas n’est TRUE, aucune instruction n’est exécutée (s'il n'y a pas d'élément `Else`). +Only the statements following the first TRUE case (and up to the next case) will be executed. If none of the cases are TRUE, none of the statements will be executed (if no `Else` part is included). -Vous pouvez placer une instruction Else après le dernier cas. Si tous les cas sont FALSE, les instructions suivant le `Else` seront exécutées. +You can include an Else statement after the last case. If all of the cases are FALSE, the statements following the `Else` will be executed. -### Exemple +### Example -Cet exemple teste une variable numérique et affiche une boîte de dialogue d’alerte comportant un simple mot : +This example tests a numeric variable and displays an alert box with a word in it: ```4d Case of - :(vResult=1) //Tester si le chiffre est 1 - ALERT("One.") //Si le chiffre est 1, afficher une alerte - :(vResult=2) //Tester si le chiffre est 2 - ALERT("Two.") //Si le chiffre est 2, afficher une alerte - :(vResult=3) //Tester si le chiffre est 3 - ALERT("Three.") //Si le chiffre est 3, afficher une alerte - Else //Si le chiffre n'est pas 1, 2 ou 3, afficher une alerte + :(vResult=1) //Test if the number is 1 + ALERT("One.") //If it is 1, display an alert + :(vResult=2) //Test if the number is 2 + ALERT("Two.") //If it is 2, display an alert + :(vResult=3) //Test if the number is 3 + ALERT("Three.") //If it is 3, display an alert + Else //If it is not 1, 2, or 3, display an alert ALERT("It was not one, two, or three.") - //déclaration(s) End case ``` -A titre de comparaison, voici la version avec `If...Else...End if` de la même méthode : +For comparison, here is the `If...Else...End if` version of the same method: ```4d - If(vResult=1) //Tester si le chiffre est 1 - ALERT("One.") //Si le chiffre est 1, afficher une alerte + If(vResult=1) //Test if the number is 1 + ALERT("One.") //If it is 1, display an alert Else - If(vResult=2) //Tester si le chiffre est 2 - ALERT("Two.") //Si le chiffre est 2, afficher une alerte + If(vResult=2) //Test if the number is 2 + ALERT("Two.") //If it is 2, display an alert Else - If(vResult=3) //Tester si le chiffre est 3 - ALERT("Three.") //Si le chiffre est 3, afficher une alerte - Else //Si le chiffre n'est pas 1, 2 ou 3, afficher une alerte - ALERT("It was not one, two, or three.") + If(vResult=3) //Test if the number is 3 + ALERT("Three.") //If it is 3, display an alert + Else //If it is not 1, 2, or 3, display an alert + ALERT("It was not one, two, or three.") End if End if End if ``` -Rappelez-vous qu’avec une structure de type `Case of...Else...End case`, seul le premier cas TRUE rencontré est exécuté. Même si d’autres cas sont TRUE, seules les instructions suivant le premier cas TRUE seront prises en compte. +Remember that with a `Case of...Else...End case` structure, only the first TRUE case is executed. Even if two or more cases are TRUE, only the statements following the first TRUE case will be executed. -Par conséquent, lorsque vous testez dans la même méthode des cas simples et des cas complexes, vous devez placer les cas complexes avant les cas simples, sinon ils ne seront jamais exécutés. Par exemple, si vous souhaitez traiter le cas simple (vResult=1) et le cas complexe (vResult=1) & (vCondition#2) et que vous structurez la méthode de la manière suivante : +Consequently, when you want to implement hierarchical tests, you should make sure the condition statements that are lower in the hierarchical scheme appear first in the test sequence. For example, the test for the presence of condition1 covers the test for the presence of condition1&condition2 and should therefore be located last in the test sequence. For example, the following code will never see its last condition detected: ```4d Case of - :(vResult=1) //Tester si le chiffre est 1 - ALERT("One.") //Si le chiffre est 1, afficher une alerte - :(vResult=2) //Tester si le chiffre est 2 - ALERT("Two.") //Si le chiffre est 2, afficher une alerte - :(vResult=3) //Tester si le chiffre est 3 - ALERT("Three.") //Si le chiffre est 3, afficher une alerte - Else //Si le chiffre n'est pas 1, 2 ou 3, afficher une alerte - ALERT("It was not one, two, or three.") + :(vResult=1) + ... //statement(s) + :((vResult=1) & (vCondition#2)) //this case will never be detected + ... //statement(s) End case ``` -... les instructions associées au cas complexe ne seront jamais exécutées. En effet, pour que ce cas soit TRUE, ses deux conditions booléennes doivent l’être. Or, la première condition est celle du cas simple situé précédemment. Lorsqu'elle est TRUE, le cas simple est exécuté et 4D sort de la structure conditionnelle, sans évaluer le cas complexe. Pour que ce type de méthode fonctionne, vous devez écrire : +In the code above, the presence of the second condition is not detected since the test "vResult=1" branches off the code before any further testing. For the code to operate properly, you can write it as follows: ```4d - If(vResult=1) //Tester si le chiffre est 1 - ALERT("One.") //Si le chiffre est 1, afficher une alerte - Else - If(vResult=2) //Tester si le chiffre est 2 - ALERT("Two.") //Si le chiffre est 2, afficher une alerte - Else - If(vResult=3) //Tester si le chiffre est 3 - ALERT("Three.") //Si le chiffre est 3, afficher une alerte - Else //Si le chiffre n'est pas 1, 2 ou 3, afficher une alerte - ALERT("It was not one, two, or three.") - End if - End if - End if + Case of + :((vResult=1) & (vCondition#2)) //this case will be detected first + ... //statement(s) + :(vResult=1) + ... //statement(s) + End case ``` -**Astuce :** Il n'est pas obligatoire que des instructions soient exécutées dans toutes les alternatives. Lorsque vous développez un algorithme, ou lorsque vous poursuivez un but précis, rien ne vous empêche d'écrire : +Also, if you want to implement hierarchical testing, you may consider using hierarchical code. + +**Tip:** Branching can be performed without statements to be executed in one case or another. When developing an algorithm or a specialized application, nothing prevents you from writing: ```4d Case of - :(Expression_booléenne) - :(Expression_booléenne) - instruction(s) - ... + :(Boolean_Expression) + :(Boolean_Expression) + ... - :(Expression_booléenne) - instruction(s) + :(Boolean_Expression) + statement(s) Else - instruction(s) + statement(s) End case ``` -ou : +or: ```4d Case of - :(Expression_booléenne) - :(Expression_booléenne) - ... + :(Boolean_Expression) + :(Boolean_Expression) + statement(s) + ... - :(Expression_booléenne) - instruction(s) + :(Boolean_Expression) + statement(s) Else - instruction(s) End case ``` -ou : +or: ```4d Case of Else - instruction(s) + statement(s) End case ``` From c5b27bcbeb3a250b8668bc5ba133cc4a13946e91 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:33 +0100 Subject: [PATCH 052/311] New translations onUrlFiltering.md (French) --- website/translated_docs/fr/Events/onUrlFiltering.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onUrlFiltering.md b/website/translated_docs/fr/Events/onUrlFiltering.md index dde9d375bed51d..4a950e58287b8a 100644 --- a/website/translated_docs/fr/Events/onUrlFiltering.md +++ b/website/translated_docs/fr/Events/onUrlFiltering.md @@ -3,9 +3,9 @@ id: onUrlFiltering title: On URL Filtering --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------- | --------------------------------- | -| 51 | [Zone Web](FormObjects/webArea_overview.md) | A URL was blocked by the Web area | +| 51 | [Web Area](FormObjects/webArea_overview.md) | A URL was blocked by the Web area | ## Description @@ -14,5 +14,5 @@ This event is generated when the loading of a URL is blocked by the Web area bec You can find out the blocked URL using the `WA Get last filtered URL` command. -### Voir également +### See also [`On Open External Link`](onOpenExternalLink.md) \ No newline at end of file From 20b08b96d28dcebcd4ade76ab9e7cc3a76d3aafc Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:35 +0100 Subject: [PATCH 053/311] New translations onPrintingFooter.md (French) --- website/translated_docs/fr/Events/onPrintingFooter.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onPrintingFooter.md b/website/translated_docs/fr/Events/onPrintingFooter.md index ed66a547593634..940044383e1760 100644 --- a/website/translated_docs/fr/Events/onPrintingFooter.md +++ b/website/translated_docs/fr/Events/onPrintingFooter.md @@ -3,7 +3,7 @@ id: onPrintingFooter title: On Printing Footer --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------- | | 7 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md) - [Input](FormObjects/input_overview.md) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Tab control](FormObjects/tabControl.md) | The form’s footer area is about to be printed | From aeaad3deb1fccd03031cb13415c3f57429506021 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:37 +0100 Subject: [PATCH 054/311] New translations onResize.md (French) --- website/translated_docs/fr/Events/onResize.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onResize.md b/website/translated_docs/fr/Events/onResize.md index 9258900815af35..de069bcca70cda 100644 --- a/website/translated_docs/fr/Events/onResize.md +++ b/website/translated_docs/fr/Events/onResize.md @@ -3,9 +3,9 @@ id: onResize title: Sur redimensionnement --- -| Code | Peut être appelé par | Définition | -| ---- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -| 29 | Formulaire | The form's window is resized or the subform object is resized (in this case the event is generated in the form method of the subform) | +| Code | Can be called by | Definition | +| ---- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| 29 | Form | The form's window is resized or the subform object is resized (in this case the event is generated in the form method of the subform) | ## Description From f81892e025189a5e74dc429f7b60257867ab2d76 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:39 +0100 Subject: [PATCH 055/311] New translations onRowMoved.md (French) --- website/translated_docs/fr/Events/onRowMoved.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onRowMoved.md b/website/translated_docs/fr/Events/onRowMoved.md index b73bc7248df3bd..71ff0c4ce6b236 100644 --- a/website/translated_docs/fr/Events/onRowMoved.md +++ b/website/translated_docs/fr/Events/onRowMoved.md @@ -3,7 +3,7 @@ id: onRowMoved title: Sur déplacement ligne --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | | 34 | [List Box of the array type](FormObjects/listbox_overview.md#array-list-boxes) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) | A list box row is moved by the user via drag and drop | From a38f67ebe30264015af8c9838cb7fa4d62fd89a7 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:41 +0100 Subject: [PATCH 056/311] New translations onRowResize.md (French) --- .../translated_docs/fr/Events/onRowResize.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/website/translated_docs/fr/Events/onRowResize.md b/website/translated_docs/fr/Events/onRowResize.md index 197fb0abdd6bab..85d571afe88df2 100644 --- a/website/translated_docs/fr/Events/onRowResize.md +++ b/website/translated_docs/fr/Events/onRowResize.md @@ -3,7 +3,7 @@ id: onRowResize title: On Row Resize --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------------------- | -------------------------------------------------------- | | 60 | [4D View Pro Area](FormObjects/viewProArea_overview.md) | The height of a row is modified by a user with the mouse | @@ -12,16 +12,16 @@ title: On Row Resize This event is generated when the height of a row is modified by a user in a 4D View Pro document. In this context, the [event object](overview.md#event-object) returned by the `FORM Event` command contains: -| Propriété | Type | Description | -| ----------- | ----------- | ---------------------------------------------------------------- | -| code | entier long | 60 | -| description | Texte | "On Row Resize" | -| objectName | Texte | 4D View Pro area name | -| sheetName | Texte | Name of the sheet of the event | -| range | object | Cell range of the rows whose heights have changed | -| header | boolean | True if the column header row (first row) is resized, else false | +| Property | Type | Description | +| ----------- | ------- | ---------------------------------------------------------------- | +| code | longint | 60 | +| description | text | "On Row Resize" | +| objectName | text | 4D View Pro area name | +| sheetName | text | Name of the sheet of the event | +| range | object | Cell range of the rows whose heights have changed | +| header | boolean | True if the column header row (first row) is resized, else false | -#### Exemple +#### Example ```4d If(FORM Event.code=On Row Resize) From 23abd1637c33b0e42914ee6f44b7597ea7984eb7 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:43 +0100 Subject: [PATCH 057/311] New translations onScroll.md (French) --- website/translated_docs/fr/Events/onScroll.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onScroll.md b/website/translated_docs/fr/Events/onScroll.md index 368213959a1f69..640af5ab1ee425 100644 --- a/website/translated_docs/fr/Events/onScroll.md +++ b/website/translated_docs/fr/Events/onScroll.md @@ -3,7 +3,7 @@ id: onScroll title: Sur défilement --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | | 59 | [Input](FormObjects/input_overview.md) of the `picture` [Type](FormObjects/properties_Object.md#type) - [List Box](FormObjects/listbox_overview.md) | The user scrolls the contents of a picture object or list box using the mouse or keyboard. | From 60f43ea2284e959474333d44030633a4237471b7 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:46 +0100 Subject: [PATCH 058/311] New translations onSelectionChange.md (French) --- .../fr/Events/onSelectionChange.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/website/translated_docs/fr/Events/onSelectionChange.md b/website/translated_docs/fr/Events/onSelectionChange.md index d44004a6b1f106..7983d9db36f916 100644 --- a/website/translated_docs/fr/Events/onSelectionChange.md +++ b/website/translated_docs/fr/Events/onSelectionChange.md @@ -3,7 +3,7 @@ id: onSelectionChange title: Sur nouvelle sélection --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- | | 31 | [4D View Pro area](FormObjects/viewProArea_overview.md) - [4D Write Pro area](FormObjects/writeProArea_overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) | The selection in the object is modified | @@ -16,16 +16,16 @@ This event can be generated in different contexts. ### 4D View Pro The current selection of rows or columns is modified. In this context, the [event object](overview.md#event-object) returned by the `FORM Event` command contains: -| Propriété | Type | Description | -| ------------- | ----------- | ------------------------------ | -| code | entier long | 31 | -| description | Texte | "On Selection Change" | -| objectName | Texte | 4D View Pro area name | -| sheetName | Texte | Name of the sheet of the event | -| oldSelections | object | Cell range before change | -| newSelections | object | Cell range after change | +| Property | Type | Description | +| ------------- | ------- | ------------------------------ | +| code | longint | 31 | +| description | text | "On Selection Change" | +| objectName | text | 4D View Pro area name | +| sheetName | text | Name of the sheet of the event | +| oldSelections | object | Cell range before change | +| newSelections | object | Cell range after change | -#### Exemple +#### Example ```4d If(FORM Event.code=On Selection Change) From b9de85ad4e38b2b52060d1773cb4df7740ade303 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:48 +0100 Subject: [PATCH 059/311] New translations onTimer.md (French) --- website/translated_docs/fr/Events/onTimer.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onTimer.md b/website/translated_docs/fr/Events/onTimer.md index 8f35ec82fc92ef..497ad22e399838 100644 --- a/website/translated_docs/fr/Events/onTimer.md +++ b/website/translated_docs/fr/Events/onTimer.md @@ -3,9 +3,9 @@ id: onTimer title: Sur minuteur --- -| Code | Peut être appelé par | Définition | -| ---- | -------------------- | ----------------------------------------------------------------- | -| 27 | Formulaire | The number of ticks defined by the `SET TIMER` command has passed | +| Code | Can be called by | Definition | +| ---- | ---------------- | ----------------------------------------------------------------- | +| 27 | Form | The number of ticks defined by the `SET TIMER` command has passed | ## Description From badfa58a7fc777b1e11bd13c5d2493d91df00a0b Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:50 +0100 Subject: [PATCH 060/311] New translations onUnload.md (French) --- website/translated_docs/fr/Events/onUnload.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/website/translated_docs/fr/Events/onUnload.md b/website/translated_docs/fr/Events/onUnload.md index 1dfcf112e86609..eb978ff72d16ad 100644 --- a/website/translated_docs/fr/Events/onUnload.md +++ b/website/translated_docs/fr/Events/onUnload.md @@ -3,7 +3,7 @@ id: onUnload title: On Unload --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | | 24 | [4D View Pro Area](FormObjects/viewProArea_overview.md) - [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Subform](FormObjects/subform_overview.md) - [Tab control](FormObjects/tabControl.md) - [Web Area](FormObjects/webArea_overview.md) | The form is about to be exited and released | @@ -18,11 +18,11 @@ All the objects of the form (from any page) whose `On Unload` object event prope -### Sous-formulaire +### Subform -The `On Unload` event is generated when the subform is closing (this event must also have been activated at the parent form level in order to be taken into account). The event is generated before those of the parent form. The event is generated before those of the parent form. +The `On Unload` event is generated when the subform is closing (this event must also have been activated at the parent form level in order to be taken into account). The event is generated before those of the parent form. Also note that, in accordance with the operating principles of form events, if the subform is placed on a page other than page 0 or 1, this event will only be generated when that page is closed (and not when the form is closed). -### Voir également +### See also [`On Load`](onLoad.md) \ No newline at end of file From 8d3681509f775a7ebf0c5105d683a47f8b74f335 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:52 +0100 Subject: [PATCH 061/311] New translations onUrlLoadingError.md (French) --- website/translated_docs/fr/Events/onUrlLoadingError.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onUrlLoadingError.md b/website/translated_docs/fr/Events/onUrlLoadingError.md index 73f78df966eeef..b5b6930770155a 100644 --- a/website/translated_docs/fr/Events/onUrlLoadingError.md +++ b/website/translated_docs/fr/Events/onUrlLoadingError.md @@ -3,9 +3,9 @@ id: onUrlLoadingError title: On URL Loading Error --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------- | ------------------------------------------ | -| 50 | [Zone Web](FormObjects/webArea_overview.md) | An error occurred when the URL was loading | +| 50 | [Web Area](FormObjects/webArea_overview.md) | An error occurred when the URL was loading | ## Description @@ -15,5 +15,5 @@ This event is generated when an error is detected during the loading of a URL. You can call the `WA GET LAST URL ERROR` command in order to get information about the error. -### Voir également +### See also [`On Open External Link`](onOpenExternalLink.md) \ No newline at end of file From c2c6258fe5d5f1e5c6be05d6a3d0bf426073a868 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:54 +0100 Subject: [PATCH 062/311] New translations onPrintingBreak.md (French) --- website/translated_docs/fr/Events/onPrintingBreak.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onPrintingBreak.md b/website/translated_docs/fr/Events/onPrintingBreak.md index 879ba3117ec355..d6fde44f7cd5f2 100644 --- a/website/translated_docs/fr/Events/onPrintingBreak.md +++ b/website/translated_docs/fr/Events/onPrintingBreak.md @@ -3,7 +3,7 @@ id: onPrintingBreak title: On Printing Break --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | | 6 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md) - [Input](FormObjects/input_overview.md) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Tab control](FormObjects/tabControl.md) | One of the form’s break areas is about to be printed | From 9af2b5303ef1ea84658aae2ed8f9ac8ba7f51813 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:56 +0100 Subject: [PATCH 063/311] New translations onUrlResourceLoading.md (French) --- website/translated_docs/fr/Events/onUrlResourceLoading.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onUrlResourceLoading.md b/website/translated_docs/fr/Events/onUrlResourceLoading.md index 9724229d7f807c..529bff80d522be 100644 --- a/website/translated_docs/fr/Events/onUrlResourceLoading.md +++ b/website/translated_docs/fr/Events/onUrlResourceLoading.md @@ -3,9 +3,9 @@ id: onUrlResourceLoading title: On URL Resource Loading --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------- | ---------------------------------------- | -| 48 | [Zone Web](FormObjects/webArea_overview.md) | A new resource is loaded in the Web area | +| 48 | [Web Area](FormObjects/webArea_overview.md) | A new resource is loaded in the Web area | ## Description @@ -15,5 +15,5 @@ This event is generated each time a new resource (picture, frame, etc.) is loade The [Progression](FormObjects/properties_WebArea.md#progression) variable associated with the area lets you find out the current state of the loading. -### Voir également +### See also [`On Open External Link`](onOpenExternalLink.md) \ No newline at end of file From a965093a965e90c51e16bfcf4c4846559c362dee Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:33:58 +0100 Subject: [PATCH 064/311] New translations onValidate.md (French) --- website/translated_docs/fr/Events/onValidate.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/Events/onValidate.md b/website/translated_docs/fr/Events/onValidate.md index 29bf3e88ad4ac8..36f9d7aac17467 100644 --- a/website/translated_docs/fr/Events/onValidate.md +++ b/website/translated_docs/fr/Events/onValidate.md @@ -3,7 +3,7 @@ id: onValidate title: Sur validation --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | | 3 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Subform](FormObjects/subform_overview.md) - [Tab control](FormObjects/tabControl.md) | The record data entry has been validated | @@ -13,6 +13,6 @@ title: Sur validation This event is triggered when the record data entry has been validated, for example after a `SAVE RECORD` command call or an `accept` [standard action](FormObjects/properties_Action.md#standard-action). -### Sous-formulaire +### Subform The `On Validate` event is triggered when data entry is validated in the subform. \ No newline at end of file From bd60ade79450a9d5cd47fa825b047ea82dac4ba7 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:00 +0100 Subject: [PATCH 065/311] New translations onVpRangeChanged.md (French) --- .../fr/Events/onVpRangeChanged.md | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/website/translated_docs/fr/Events/onVpRangeChanged.md b/website/translated_docs/fr/Events/onVpRangeChanged.md index ec2bb0d8ce7309..dc6962fd57f24a 100644 --- a/website/translated_docs/fr/Events/onVpRangeChanged.md +++ b/website/translated_docs/fr/Events/onVpRangeChanged.md @@ -3,25 +3,25 @@ id: onVpRangeChanged title: On VP Range Changed --- -| Code | Peut être appelé par | Définition | -| ---- | ------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | -| 61 | [4D View Pro Area](FormObjects/viewProArea_overview.md) | La plage de cellules 4D View Pro a changé (ex : un calcul de formule, une valeur supprimée d'une cellule, etc.) | +| Code | Can be called by | Definition | +| ---- | ------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | +| 61 | [4D View Pro Area](FormObjects/viewProArea_overview.md) | The 4D View Pro cell range has changed (e.g., a formula calculation, value removed from a cell, etc.) | ## Description -Cet événement est généré lorsqu'un changement intervient dans une plage de cellules dans le document 4D View Pro. +This event is generated when a change occurs within a cell range in the 4D View Pro document. -L'objet retourné par la commande FORM Event contient : +The object returned by the FORM Event command contains: -| Propriété | Type | Description | -| ------------ | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| objectName | Texte | 4D View Pro area name | -| code | entier long | On VP Range Changed | -| description | Texte | "On VP Range Changed" | -| sheetName | Texte | Name of the sheet of the event | -| range | object | Plage de cellules liées au changement | -| changedCells | object | Plage contenant uniquement les cellules modifiées. Il peut s'agir d'une gamme combinée. | -| action | Texte | Le type d'opération générant l'événement :

  • "clear" - A clear range value operation
  • "dragDrop" - Une opération de glisser-déposer
  • "dragFill" - Une opération de remplissage par glisser
  • "evaluFormula" - Définition d'une formule dans une plage de cellules spécifiée
  • "coller" - Une opération de collage
  • "setArrayFormula" - Définition d'une formule dans une plage de cellules spécifiée
  • "sort" - Tri d'une plage de cellules
  • | -> Voir également [On After Edit](onAfterEdit.md). +| Property | Type | Description | +| ------------ | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| objectName | text | 4D View Pro area name | +| code | longint | On VP Range Changed | +| description | text | "On VP Range Changed" | +| sheetName | text | Name of the sheet of the event | +| range | object | Cell range of the change | +| changedCells | object | Range containing only the changed cells. It can be a combined range. | +| action | text | The type of operation generating the event:

  • "clear" - A clear range value operation
  • "dragDrop" - A drag and drop operation
  • "dragFill" - A drag fill operation
  • "evaluateFormula" - Setting a formula in a specified cell range
  • "paste" - A paste operation
  • "setArrayFormula" - Setting a formula in a specified cell range
  • "sort" - Sorting a range of cells
  • | +> See also [On After Edit](onAfterEdit.md). From 987199011f393a9a5568d51fdc9b2c9d56a82686 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:03 +0100 Subject: [PATCH 066/311] New translations onVpReady.md (French) --- website/translated_docs/fr/Events/onVpReady.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onVpReady.md b/website/translated_docs/fr/Events/onVpReady.md index 853f1b1aade52d..b6faa860588d50 100644 --- a/website/translated_docs/fr/Events/onVpReady.md +++ b/website/translated_docs/fr/Events/onVpReady.md @@ -3,7 +3,7 @@ id: onVpReady title: On VP Ready --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------------------- | ----------------------------------------------- | | 9 | [4D View Pro Area](FormObjects/viewProArea_overview.md) | The loading of the 4D View Pro area is complete | From 18ad772fa70c53ec12970e1b2e2acde1a9f36568 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:06 +0100 Subject: [PATCH 067/311] New translations onWindowOpeningDenied.md (French) --- website/translated_docs/fr/Events/onWindowOpeningDenied.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onWindowOpeningDenied.md b/website/translated_docs/fr/Events/onWindowOpeningDenied.md index 5ec79b5c22d122..baf5cec0a000a4 100644 --- a/website/translated_docs/fr/Events/onWindowOpeningDenied.md +++ b/website/translated_docs/fr/Events/onWindowOpeningDenied.md @@ -3,9 +3,9 @@ id: onWindowOpeningDenied title: On Window Opening Denied --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------- | -------------------------------- | -| 53 | [Zone Web](FormObjects/webArea_overview.md) | A pop-up window has been blocked | +| 53 | [Web Area](FormObjects/webArea_overview.md) | A pop-up window has been blocked | ## Description @@ -15,5 +15,5 @@ This event is generated when the opening of a pop-up window is blocked by the We You can find out the blocked URL using the `WA Get last filtered URL` command. -### Voir également +### See also [`On Open External Link`](onOpenExternalLink.md) \ No newline at end of file From 4039e173edae8a6488d7cef84a73f525d629272a Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:09 +0100 Subject: [PATCH 068/311] New translations overview.md (French) --- website/translated_docs/fr/Events/overview.md | 142 +++++++++--------- 1 file changed, 72 insertions(+), 70 deletions(-) diff --git a/website/translated_docs/fr/Events/overview.md b/website/translated_docs/fr/Events/overview.md index b9c8515e00ef46..9fca6707a66cb0 100644 --- a/website/translated_docs/fr/Events/overview.md +++ b/website/translated_docs/fr/Events/overview.md @@ -5,7 +5,7 @@ title: Aperçu Form events are events that can lead to the execution of the form method and/or form object method(s). Form events allow you to control the flow of your application and to write code that is executed only when a specific event occurs. -In your code, you control the events using the `FORM Event` command, that returns the triggered event. Par exemple: +In your code, you control the events using the `FORM Event` command, that returns the triggered event. For example: ```4d //code of a button @@ -21,15 +21,17 @@ End if Each event is returned as an object by the `FORM Event` command. By default, it contains the following properties: -| Propriété | Type | Description | -| --------- | ---- | ----------- | -| | | | - objectName|text|Name of the object triggering the event - Not included if the event is triggered by the form| |code|longint|Numeric value of the form event. Also returned by the +| Property | Type | Description | +| -------- | ---- | ----------- | +| | | | + objectName|text|Name of the object triggering the event - Not included if the event is triggered by the form| |code|longint|Numeric value of the form event. Also returned by the -Additional properties are returned when the event occurs on specific objects. En particulier : +`Form event code` command| |description|text|Name of the form event (e.g. "On After Edit")| -- Les [list box](FormObjects/listbox_overview.md#supported-form-events) et les [colonnes de list box](FormObjects/listbox_overview.md#supported-form-events-1) retournent des [propriétés supplémentaires](FormObjects/listbox_overview.md#additional-properties) telles que `columnName` ou `isRowSelected`. -- Les [zones 4D View Pro](FormObjects/viewProArea_overview.md) retournent par exemple des propriétés `sheetName` ou `action` dans l'objet événement [On After Edit](onAfterEdit.md). +Additional properties are returned when the event occurs on specific objects. In particular: + +- [list boxes](FormObjects/listbox_overview.md#supported-form-events) and [list box columns](FormObjects/listbox_overview.md#supported-form-events-1) return [additional properties](FormObjects/listbox_overview.md#additional-properties) such as `columnName` or `isRowSelected`. +- [4D View Pro areas](FormObjects/viewProArea_overview.md) return for example `sheetName` or `action` properties in the [On After Edit](onAfterEdit.md) event object. ## Events and Methods @@ -49,68 +51,68 @@ The number of objects involved in an event depends on the nature of the event. The following table summarizes how object and form methods are called for each event type: -| Evénement | Méthode objet | Méthode formulaire | Objets | -| ----------------------------- | ---------------------------------- | ------------------ | --------------------------- | -| On Load | Oui | Oui | Tous les objets | -| On Unload | Oui | Oui | Tous les objets | -| Sur validation | Oui | Oui | Tous les objets | -| Sur clic | Oui | Oui | Objets concernés uniquement | -| Sur double clic | Oui | Oui | Objets concernés uniquement | -| Sue avant frappe clavier | Oui | Oui | Objets concernés uniquement | -| Sue après frappe clavier | Oui | Oui | Objets concernés uniquement | -| Sur après modification | Oui | Oui | Objets concernés uniquement | -| On Getting Focus | Oui | Oui | Objets concernés uniquement | -| On Losing Focus | Oui | Oui | Objets concernés uniquement | -| Sur activation | Jamais | Oui | Aucun | -| On Deactivate | Jamais | Oui | Aucun | -| Sur appel extérieur | Jamais | Oui | Aucun | -| Sur changement page | Jamais | Oui | Aucun | -| Sur début survol | Oui | Oui | Objets concernés uniquement | -| Sur déposer | Oui | Oui | Objets concernés uniquement | -| Sur glisser | Oui | Jamais | Objets concernés uniquement | -| Sur début survol | Oui | Oui | Tous les objets | -| Sur survol | Oui | Oui | Tous les objets | -| Sur fin survol | Oui | Oui | Tous les objets | -| On Mouse Up | Oui | Jamais | Objets concernés uniquement | -| Sur menu sélectionné | Jamais | Oui | Aucun | -| On Bound variable change | Jamais | Oui | Aucun | -| Sur données modifiées | Oui | Oui | Objets concernés uniquement | -| Sur appel zone du plug in | Oui | Oui | Objets concernés uniquement | -| Sur entête | Oui | Oui | Tous les objets | -| On Printing Detail | Oui | Oui | Tous les objets | -| On Printing Break | Oui | Oui | Tous les objets | -| On Printing Footer | Oui | Oui | Tous les objets | -| On Close Box | Jamais | Oui | Aucun | -| Sur affichage corps | Oui | Oui | Tous les objets | -| Sur ouverture corps | Oui (List box) | Oui | Aucun, excepté les List box | -| Sur fermeture corps | Oui (List box) | Oui | Aucun, excepté les List box | -| Sur redimensionnement | Jamais | Oui | Aucun | -| Sur nouvelle sélection | Oui | Oui | Objets concernés uniquement | -| Sur chargement ligne | Jamais | Oui | Aucun | -| Sur minuteur | Jamais | Oui | Aucun | -| Sur défilement | Oui | Jamais | Objets concernés uniquement | -| Sur avant saisie | Oui (List box) | Jamais | Objets concernés uniquement | -| Sur déplacement colonne | Oui (List box) | Jamais | Objets concernés uniquement | -| Sur déplacement ligne | Oui (List box) | Jamais | Objets concernés uniquement | -| Sur redimensionnement colonne | Oui (List box et Zone 4D View Pro) | Jamais | Objets concernés uniquement | -| Sur clic entête | Oui (List box et Zone 4D View Pro) | Jamais | Objets concernés uniquement | -| Sur clic pied | Oui (List box) | Jamais | Objets concernés uniquement | -| Sur après tri | Oui (List box) | Jamais | Objets concernés uniquement | -| Sur clic long | Oui (Bouton) | Oui | Objets concernés uniquement | -| Sur clic alternatif | Oui (Bouton et List box) | Jamais | Objets concernés uniquement | -| Sur déployer | Yes (Hier. list and list box) | Jamais | Objets concernés uniquement | -| Sur contracter | Yes (Hier. list and list box) | Jamais | Objets concernés uniquement | -| Sur action suppression | Yes (Hier. list and list box) | Jamais | Objets concernés uniquement | -| On URL Resource Loading | Oui (Zone Web) | Jamais | Objets concernés uniquement | -| On Begin URL Loading | Oui (Zone Web) | Jamais | Objets concernés uniquement | -| On URL Loading Error | Oui (Zone Web) | Jamais | Objets concernés uniquement | -| On URL Filtering | Oui (Zone Web) | Jamais | Objets concernés uniquement | -| On End URL Loading | Oui (Zone Web) | Jamais | Objets concernés uniquement | -| On Open External Link | Oui (Zone Web) | Jamais | Objets concernés uniquement | -| On Window Opening Denied | Oui (Zone Web) | Jamais | Objets concernés uniquement | -| On VP Range Changed | Oui (4D View Pro Area) | Jamais | Objets concernés uniquement | -| On VP Ready | Oui (4D View Pro Area) | Jamais | Objets concernés uniquement | -| On Row Resize | Oui (4D View Pro Area) | Jamais | Objets concernés uniquement | +| Event | Object Methods | Form Method | Which Objects | +| ----------------------------- | ----------------------------------- | ----------- | ---------------------- | +| On Load | Yes | Yes | All objects | +| On Unload | Yes | Yes | All objects | +| Sur validation | Yes | Yes | All objects | +| Sur clic | Yes | Yes | Involved object only | +| Sur double clic | Yes | Yes | Involved object only | +| Sue avant frappe clavier | Yes | Yes | Involved object only | +| Sue après frappe clavier | Yes | Yes | Involved object only | +| Sur après modification | Yes | Yes | Involved object only | +| On Getting Focus | Yes | Yes | Involved object only | +| On Losing Focus | Yes | Yes | Involved object only | +| Sur activation | Never | Yes | None | +| On Deactivate | Never | Yes | None | +| Sur appel extérieur | Never | Yes | None | +| Sur changement page | Never | Yes | None | +| Sur début survol | Yes | Yes | Involved object only | +| Sur déposer | Yes | Yes | Involved object only | +| Sur glisser | Yes | Never | Involved object only | +| Sur début survol | Yes | Yes | All objects | +| Sur survol | Yes | Yes | All objects | +| Sur fin survol | Yes | Yes | All objects | +| On Mouse Up | Yes | Never | Involved object only | +| Sur menu sélectionné | Never | Yes | None | +| On Bound variable change | Never | Yes | None | +| Sur données modifiées | Yes | Yes | Involved object only | +| Sur appel zone du plug in | Yes | Yes | Involved object only | +| Sur entête | Yes | Yes | All objects | +| On Printing Detail | Yes | Yes | All objects | +| On Printing Break | Yes | Yes | All objects | +| On Printing Footer | Yes | Yes | All objects | +| On Close Box | Never | Yes | None | +| Sur affichage corps | Yes | Yes | All objects | +| Sur ouverture corps | Yes (List box) | Yes | None except List boxes | +| Sur fermeture corps | Yes (List box) | Yes | None except List boxes | +| Sur redimensionnement | Never | Yes | None | +| Sur nouvelle sélection | Yes | Yes | Involved object only | +| Sur chargement ligne | Never | Yes | None | +| Sur minuteur | Never | Yes | None | +| Sur défilement | Yes | Never | Involved object only | +| Sur avant saisie | Yes (List box) | Never | Involved object only | +| Sur déplacement colonne | Yes (List box) | Never | Involved object only | +| Sur déplacement ligne | Yes (List box) | Never | Involved object only | +| Sur redimensionnement colonne | Yes (List box and 4D View Pro Area) | Never | Involved object only | +| Sur clic entête | Yes (List box and 4D View Pro Area) | Never | Involved object only | +| Sur clic pied | Yes (List box) | Never | Involved object only | +| Sur après tri | Yes (List box) | Never | Involved object only | +| Sur clic long | Yes (Button) | Yes | Involved object only | +| Sur clic alternatif | Yes (Button and List box) | Never | Involved object only | +| Sur déployer | Yes (Hier. list and list box) | Never | Involved object only | +| Sur contracter | Yes (Hier. list and list box) | Never | Involved object only | +| Sur action suppression | Yes (Hier. list and list box) | Never | Involved object only | +| On URL Resource Loading | Yes (Web Area) | Never | Involved object only | +| On Begin URL Loading | Yes (Web Area) | Never | Involved object only | +| On URL Loading Error | Yes (Web Area) | Never | Involved object only | +| On URL Filtering | Yes (Web Area) | Never | Involved object only | +| On End URL Loading | Yes (Web Area) | Never | Involved object only | +| On Open External Link | Yes (Web Area) | Never | Involved object only | +| On Window Opening Denied | Yes (Web Area) | Never | Involved object only | +| On VP Range Changed | Yes (4D View Pro Area) | Never | Involved object only | +| On VP Ready | Yes (4D View Pro Area) | Never | Involved object only | +| On Row Resize | Yes (4D View Pro Area) | Never | Involved object only | Always keep in mind that, for any event, the method of a form or an object is called if the corresponding event property is selected for the form or objects. The benefit of disabling events in the Design environment (using the Property List of the Form editor) is that you can reduce the number of calls to methods and therefore significantly optimize the execution speed of your forms. From ab90985611a24d69fdf54b72c97925e1ea16c6b4 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:11 +0100 Subject: [PATCH 069/311] New translations createStylesheet.md (French) --- .../fr/FormEditor/createStylesheet.md | 194 +++++++++--------- 1 file changed, 97 insertions(+), 97 deletions(-) diff --git a/website/translated_docs/fr/FormEditor/createStylesheet.md b/website/translated_docs/fr/FormEditor/createStylesheet.md index fcd7ffb551c9e6..453ea419580adb 100644 --- a/website/translated_docs/fr/FormEditor/createStylesheet.md +++ b/website/translated_docs/fr/FormEditor/createStylesheet.md @@ -4,51 +4,51 @@ title: Feuilles de style (style sheets) --- -Une feuille de style regroupe une combinaison d’attributs d'objets formulaire — allant des attributs de texte à quasiment tous les attributs d'objet disponibles. +A style sheet groups together a combination of attributes for form objects — from text attributes to nearly any available object attribute. -Outre l’harmonisation de l’interface de vos applications, l’usage de feuilles de style a trois avantages majeurs : +In addition to harmonizing an application's interface, style sheets provide three major advantages: -* Gain de temps en développement : pour chaque objet, vous définissez en une seule opération un ensemble de paramétrages. -* Facilité de maintenance : les feuilles de styles ont la propriété de modifier l’apparence de tous les objets qui les utilisent. Changer, par exemple, la taille de la police dans une feuille de style changera la taille de la police pour tous les objets qui utilisent cette feuille de style. -* Contrôle du développement multi-plate-forme : les feuilles de style peuvent s'appliquer aux deux plate-formes macOS et Windows, ou bien à l'une d'elles uniquement. Lorsqu'une feuille de style est appliquée, 4D utilise automatiquement la feuille de style appropriée. +* Saves time during development: Each object has specific group of settings within a single operation. +* Facilitates maintenance: Style sheets modify the appearance of any objects that uses them, so changing the font size in a style sheet will change the font size for all of the objects that use this same style sheet. +* Controls multi-platform development: You can have a style sheets that apply to both macOS and Windows platforms, only macOS, or only Windows. When a style sheet is applied, 4D automatically uses the appropriate style sheet. -## Fichiers feuilles de style +## Style Sheet Files -4D accepte trois fichiers feuilles de style spécifiques : +4D accepts three, specific style sheet files: -| Feuille de style | Plateforme | -| ----------------------- | ----------------------------------------------------------------------- | -| styleSheets.css | Feuille de style globale par défaut pour macOS et Windows | -| styleSheets_mac.css | Pour définir des styles d'attributs spécifiques de macOS uniquement | -| styleSheets_windows.css | Pour définir des styles d'attributs spécifiques pour Windows uniquement | +| Style Sheet | Platform | +| ----------------------- | ----------------------------------------------------- | +| styleSheets.css | Default global style sheet for both macOS and Windows | +| styleSheets_mac.css | For defining macOS only specific attribute styles | +| styleSheets_windows.css | For defining Windows only specific attribute styles | -Ces fichiers sont stockés dans le dossier "/SOURCES" du projet. Ils sont également accessibles directement via le [CSS Preview](formEditor.md#css-preview) dans la barre d'outils de l'éditeur de formulaires. +These files are stored in the project's "/SOURCES" folder. They can also be accessed directly via the [CSS Preview](formEditor.md#css-preview) in the Form editor toobar. -## Architecture des feuilles de style +## Style Sheet Architecture While adapted to meet the specific needs of 4D forms, style sheets for application projects generally follow CSS2 syntax and grammar. -Chaque règle de style d'une feuille de style contient deux parties : +Every style rule in a style sheet contains two parts: -* un *sélecteur* - Un sélecteur définit où appliquer le style. 4D prend en charge les sélecteurs "object type", "object name", "class", "all objects", et "attribute value". +* a *Selector* - A selector defines where to apply the style. 4D supports "object type", "object name", "class", "all objects", as well as "attribute value" selectors. -* une *déclaration* - La déclaration définit le style à appliquer. Plusieurs lignes de déclaration peuvent être regroupées pour former un bloc de déclaration. Chaque ligne d'un bloc de déclaration CSS doit se terminer par un point-virgule et l'intégralité du bloc doit être entourée d'accolades. +* a *Declaration* - The declaration defines the actual style to apply. Multiple declaration lines can be grouped together to form a declaration block. Each line in a CSS declaration block must end with a semicolon, and the entire block must be surrounded by curly braces. -## Sélecteurs de feuilles de style +## Style Sheet Selectors -### Type d'objet +### Object Type -Le type d'objet définit le type d'objet à styler et correspond au sélecteur d'élément CSS. +Corresponding to the CSS element selector, the object type defines the type of object to style. Specify the object type, then in curly braces, declare the style(s) to apply. > The object type corresponds to the JSON [type](FormObjects/properties_Object.md#type) property of form objects. -Dans l'exemple suivant, tous les objets du type *bouton* afficheront du texte dans la police Helvetica Neue, d'une taille de 20 pixels : +In the following example, all objects of the *button* type will display text in the Helvetica Neue font, with a size of 20 pixels: ``` button { @@ -66,13 +66,13 @@ text, input { } ``` -### Nom d'objet +### Object Name -Le nom de l'objet correspond au **sélecteur d'ID** CSS et définit un objet spécifique à styler, puisque que ce nom est unique dans le formulaire. +Corresponding to the CSS **ID selector**, the object name defines a specific object to style since the object's name is unique within the form. -Désignez l'objet avec le caractère "#" avant le nom de l'objet, puis entre accolades, déclarez le(s) style(s) à appliquer. +Designate the object with a "#" character before the object's name, then in curly braces, declare the style(s) to apply. -Dans l'exemple suivant, le texte de l'objet portant le nom "okButton" sera affiché dans la police Helvetica Neue, avec une taille de 20 pixels : +In the following example, the text of the object with the name "okButton" will be displayed in Helvetica Neue font, with a size of 20 pixels: ``` #okButton { @@ -85,11 +85,11 @@ Dans l'exemple suivant, le texte de l'objet portant le nom "okButton" sera affic ### Class -Class correspond au **sélecteur class** CSS et définit un objet le style de tous les objets formulaires de l'attribut `class`. +Corresponding to the CSS **class selector**, the class defines the style for all form objects with the `class` attribute. -Vous pouvez spécifier les classes à utiliser avec un caractère "." suivi du nom de la classe et, entre accolades, déclarez le(s) style(s) à appliquer. +You can specify the classes to use with a "." character followed by the name of the class, and in curly braces, declare the style(s) to apply. -Dans l'exemple suivant, le texte de tous les objets de la classe `okButtons` sera affiché dans la police Helvetica Neue, avec une taille de 20 pixels, alignée au centre : +In the following example, the text of all objects with the `okButtons` class will be displayed in Helvetica Neue font, with a size of 20 pixels, aligned in the center: ``` .okButtons { @@ -99,7 +99,7 @@ Dans l'exemple suivant, le texte de tous les objets de la classe `okButtons` ser } ``` -Pour indiquer qu'un style doit être appliqué uniquement à des objets de type différent, spécifiez le type suivi de "." et du nom de la classe, puis déclarez entre accolades le(s) style(s) à appliquer. +To designate that a style should be applied only to objects of a distinct type, specify the type followed by "." and the name of the class, then in curly braces, declare the style(s) to apply. ``` text.center { @@ -108,20 +108,20 @@ text.center { } ``` -Dans la description du formulaire 4D, vous associez un nom de classe à un objet à l'aide de l'attribut `class`. Cet attribut contient un ou plusieurs noms de "class", séparés par un espace : +In the 4D form description, you associate a class name to an object using the `class` attribute. This attribute contains one or several class names, separated by a space character: ``` class: "okButtons important" ``` -### Tous les objets +### All Objects -Le caractère "*" correspond au **sélecteur universel** CSS et indique que le style qui suit sera appliqué à tous les objets du formulaire. +Corresponding to the CSS **universal selector**, the "*" character indicates that the following style will be applied to all objects on the form. -Indiquez qu'un style doit s'appliquer à tous les objets de formulaire avec le caractère "*", puis, entre accolades, déclarez le(s) style(s) à appliquer. +Designate that a style should apply to all form objects with the "*" character, then in curly braces, declare the style(s) to apply. -Dans l'exemple suivant, tous les objets auront un fond gris : +In the following example, all objects will have a gray fill: ``` * { @@ -130,24 +130,24 @@ Dans l'exemple suivant, tous les objets auront un fond gris : ``` -### Attributs spécifiques +### Specific Attribute -Les styles correspondent aux **sélecteurs d'attributs** et peuvent s'appliquer à tous les objets du formulaire avec un attribut spécifique. +Corresponding to the CSS **attribute selectors**, styles can be applied to all form objects with a specific attribute. -Spécifiez l'attribut entre parenthèses, puis entre accolades, déclarez le(s) style(s) à appliquer. +Specify the attribute within brackets, then in curly braces, declare the style(s) to apply. -#### Syntaxes prises en charge +#### Supported syntaxes -| Syntaxe | Description | -| -------------------------- | --------------------------------------------------------------------------------------------------------------------------- | -| [attribute] | les objets ayant un `attribute` | -| [attribute="valeur"] | les objets dont la valeur de l'`attribute` correspond à la "valeur" indiquée | -| [attribute~="valeur"] | les objets dont la valeur de l'`attribute` correspond à la "valeur" présente dans une liste de mots séparés par des espaces | -| [attribute|="valeur"] | les objets dont l'`attribute` contient une valeur qui commence par celle de "valeur" | +| Syntax | Description | +| ------------------------- | ------------------------------------------------------------------------------------------------------- | +| [attribute] | matches objects with the `attribute` | +| [attribute="value"] | matches objects with the `attribute` value containing exactly the specified "value" | +| [attribute~="value"] | matches objects with the `attribute` value containing the "value" among a space-separated list of words | +| [attribute|="value"] | matches objects with an `attribute` whose value starts with "value" | -#### Exemples +#### Examples -Tous les objets ayant l'attribut `borderStyle` auront des lignes violettes : +All objects with the `borderStyle` attribute will have purple lines: ``` [borderStyle] @@ -156,7 +156,7 @@ Tous les objets ayant l'attribut `borderStyle` auront des lignes violettes : } ``` -Tous les objets de type texte ayant un attribut text dont la valeur est "Hello" auront des lettres bleues : +All objects of the text type with a text attribute whose value is "Hello" will have blue letters: ``` @@ -166,7 +166,7 @@ text[text=Hello] } ``` -Tous les objets ayant un attribut text dont la valeur est "Hello" auront des traits bleus : +All objects with a text attribute whose value contains "Hello" will have blue lines: ``` [text~=Hello] @@ -176,7 +176,7 @@ Tous les objets ayant un attribut text dont la valeur est "Hello" auront des tra ``` -Tous les objets de type texte ayant un attribut text dont la valeur commence par "Hello" auront des lettres jaunes : +All objects of the text type with a text attribute whose value starts with "Hello" will have yellow letters: ``` text[text|=Hello] @@ -188,25 +188,25 @@ text[text|=Hello] ``` -## Déclarations de feuilles de style +## Style Sheet Declarations -La majorité des attributs d'objet formulaire peuvent être définis dans une feuille de style, à l'exception des attributs suivants : +The majority of form object attributes can be defined within a style sheet, except the following attributes: - "method" - "type" - - "type" - "class" - - choiceList, excludedList, labels, list, requiredList (type liste) + - "event" + - choiceList, excludedList, labels, list, requiredList (list type) -Les attributs d'objet formulaire peuvent être déclarés avec leur nom JSON en tant qu'attributs CSS (à l'exclusion des types d'objet, méthodes, événements et listes). Pour plus d'informations, voir la page **Formulaires dynamiques** dans le manuel du mode Développement. +Form object attributes can be declared with their JSON name as CSS attributes (not including object types, methods, events, and lists). For more information, see the **Dynamic Forms** page in the Design Reference. -### Mappage d'attributs +### Attribute Mapping -Les attributs répertoriés ci-dessous peuvent accepter le nom 4D ou le nom CSS. +The attributes listed below are able to accept either the 4D name or the CSS name. | 4D | CSS | | -------------- | ---------------- | | borderStyle | border-style | -| border-style | background-color | +| fill | background-color | | fontFamily | font-family | | fontSize | font-size | | fontStyle | font-style | @@ -215,70 +215,70 @@ Les attributs répertoriés ci-dessous peuvent accepter le nom 4D ou le nom CSS. | textAlign | text-align | | textDecoration | text-decoration | | verticalAlign | vertical-align | -> Les valeurs spécifiques à 4D (*ex :* "enfoncées") ne sont pas prises en charge lors de l'utilisation de noms d'attribut CSS. +> 4D-specific values (*e.g.*, "sunken") are not supported when using CSS attribute names. -### Valeurs d'attributs spécifiques +### Specific Attribute Values -- Pour les attributs `icon`, `picture`, et `customBackgroundPicture` qui prennent en charge un chemin vers une image, la syntaxe est la suivante : +- For `icon`, `picture`, and `customBackgroundPicture` attributes that support a path to an image, the syntax is: ``` -icon: url("/RESOURCES/Images/Buttons/edit.png"); /* chemin absolu */ -icon: url("edit.png"); /* chemin relatif vers le fichier du formulaire */ +icon: url("/RESOURCES/Images/Buttons/edit.png"); /* absolute path */ +icon: url("edit.png"); /* relative path to the form file */ ``` -- Pour `fill`, `stroke` , `alternateFill` , `horizontalLineStroke` et `verticalLineStroke`, trois syntaxes sont prises en charge : +- For `fill`, `stroke` , `alternateFill` , `horizontalLineStroke` and `verticalLineStroke`, three syntaxes are supported: - - Nom la couleur CSS : `fill: red;` - - Valeur hexadécimale : `fill: #FF0000;` - - fonction `rgb()` : `fill:rgb(255,0,0)` + - CSS color name: `fill: red;` + - Hexa value: `fill: #FF0000;` + - the `rgb()` function: `fill:rgb(255,0,0)` -- Si une chaîne utilise des caractères interdits en CSS, vous pouvez l'entourer de guillemets simples ou doubles. Par exemple: - - une référence xliff : `tooltip: ":xliff:CommonMenuFile";` - - un datasource avec l'expression de champ : `dataSource: "[Table_1:1]ID:1";` +- If a string uses forbidden characters in CSS, you can surround the string with simple or double quotes. For example: + - a xliff reference: `tooltip: ":xliff:CommonMenuFile";` + - a datasource with a field expression: `dataSource: "[Table_1:1]ID:1";` -## Ordre de priorité +## Priority Order -Les projets 4D hiérarchisent les définitions de style en conflit, d'abord par la définition du formulaire, puis par les feuilles de style. +4D projects prioritizes conflicting style definitions first by the form definition, then by the style sheets. -### JSON vs Feuille de style +### JSON vs Style Sheet -Si un attribut est défini dans la description du formulaire JSON et dans une feuille de style, 4D utilisera la valeur du fichier JSON. +If an attribute is defined in the JSON form description and a style sheet, 4D will use the value in the JSON file. -Pour remplacer ce comportement, la valeur du style doit être suivie d'une déclaration `! Important`. +To override this behavior, the style value must be followed with an `!important` declaration. -**Exemple 1 :** +**Example 1:** -| Description du formulaire JSON | Feuille de style | 4D affiche | -| ------------------------------ | ---------------- | ---------- | -| `"text": "Button",` | `text: Edit;` | `"Button"` | +| JSON form description | Style Sheet | 4D displays | +| --------------------- | ------------- | ----------- | +| `"text": "Button",` | `text: Edit;` | `"Button"` | -**Exemple 2 :** +**Example 2:** -| Description du formulaire JSON | Feuille de style | 4D affiche | -| ------------------------------ | ------------------------ | ---------- | -| `"text": "Button",` | `text: Edit !important;` | `"Edit"` | +| JSON form description | Style Sheet | 4D displays | +| --------------------- | ------------------------ | ----------- | +| `"text": "Button",` | `text: Edit !important;` | `"Edit"` | -### Feuilles de style multiples +### Multiple Style Sheets -A l'exécution, 4D hiérarchise automatiquement les feuilles de style dans l'ordre suivant : +At runtime, 4D automatically prioritizes style sheets in the following order: -1. Le formulaire 4D chargera d’abord le fichier CSS par défaut `/SOURCES/styleSheets.css`. -2. Il chargera ensuite le fichier CSS pour la plate-forme courante `/SOURCES/styleSheets__mac.css` ou `/SOURCES/styleSheets_windows.css`. -3. S'il existe, il chargera alors un fichier CSS spécifique défini dans le formulaire JSON : +1. The 4D form will first load the default CSS file `/SOURCES/styleSheets.css`. +2. It will then load the CSS file for the current platform `/SOURCES/styleSheets_mac.css` or `/SOURCES/styleSheets_windows.css`. +3. If it exists, it will then load a specific CSS file defined in the JSON form: - * un fichier pour les deux plateformes : + * a file for both platforms: ``` "css": "" ``` - * ou une liste de fichiers pour les deux plateformes : + * or a list of files for both platforms: ``` "css": [ @@ -287,7 +287,7 @@ A l'exécution, 4D hiérarchise automatiquement les feuilles de style dans l'ord ], ``` - * ou une liste de fichiers par plateforme : + * or a list of files per platform: ``` "css": [ @@ -296,19 +296,19 @@ A l'exécution, 4D hiérarchise automatiquement les feuilles de style dans l'ord ], ``` -> Les chemins de fichiers peuvent être relatifs ou absolus. * Les chemins relatifs sont résolus par rapport au fichier de description de formulaire JSON. * Pour des raisons de sécurité, seuls les chemins de système de fichiers (filesystem) sont acceptés pour les chemins absolus. (*ex :*, "/RESOURCES", "/DATA") +> Filepaths can be relative or absolute. * Relative paths are resolved relative to the JSON form description file. * For security reasons, only filesystem paths are accepted for absolute paths. (*e.g.*, "/RESOURCES", "/DATA") -## Création ou modification d'une feuille de style +## Creating or Editing Style Sheets -Vous créez des feuilles de styles à partir d'un éditeur de feuilles de styles de votre choix, en sauvegardant le fichier sous une extension ".css" dans le dossier "/SOURCES" du projet. +You can create style sheets using your preferred text editor and saving the file with a ".css" extension in the project's "/SOURCES" folder. -La Boîte à Outils fournit une page **Feuilles de style** sous forme de raccourci pour créer et modifier l'une des trois feuilles de style nommées en fonction de la plateforme. +The 4D Tool Box provides a **Style Sheets** page as a shortcut option to create and edit one of three platform-specific named style sheets. -1. Ouvrez la page **Styles** en choisissant la **Boîte à outils > Styles ** dans le menu Développement ou en cliquant sur l'icône **Boîte à outils** dans la barre d'outils de l'éditeur de formulaire. +1. Open the **Style Sheets** page by choosing the **Tool Box > Style Sheet** from the Design menu or click on the **Tool Box** icon in the Form Editor toolbar. ![](assets/en/FormEditor/stylesheets.png) -2. Choisissez le type de feuille de style que vous souhaitez créer et cliquez sur le bouton **Créer** ou **Editer** : ![](assets/en/FormEditor/createButton.png) +2. Select the type of style sheet to create and click on the **Create** or **Edit** button: ![](assets/en/FormEditor/createButton.png) -3. La feuille de style s'ouvrira dans votre éditeur de texte par défaut. +3. The style sheet will open in your default text editor. From de7e62cd3960e42f0dd7baf955a9f4b4378c6757 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:14 +0100 Subject: [PATCH 070/311] New translations formEditor.md (French) --- .../fr/FormEditor/formEditor.md | 568 +++++++++--------- 1 file changed, 284 insertions(+), 284 deletions(-) diff --git a/website/translated_docs/fr/FormEditor/formEditor.md b/website/translated_docs/fr/FormEditor/formEditor.md index f836f45866cbb7..6b1814234f782d 100644 --- a/website/translated_docs/fr/FormEditor/formEditor.md +++ b/website/translated_docs/fr/FormEditor/formEditor.md @@ -3,71 +3,71 @@ id: formEditor title: Éditeur de formulaire --- -4D propose un éditeur de formulaires très complet qui vous permet de modifier votre formulaire jusqu’à ce que vous ayez atteint le résultat escompté. Dans l’éditeur de formulaires, vous pouvez créer et supprimer des objets, manipuler directement des objets et définir les propriétés des objets et des formulaires. +4D provides a full-featured Form editor that allows you to modify your form until you achieve the effect that you want. With the Form editor, you can create and delete form objects, manipulate them directly, and set form and object properties. ## Interface -L’éditeur de formulaires affiche chaque formulaire JSON ouvert dans sa propre fenêtre, dotée d’une barre d’outils et d’une barre d’objets. Vous pouvez ouvrir plusieurs formulaires en même temps. Les règles situées sur le côté et en bas de cette fenêtre ont pour but de vous aider à placer les objets dans le formulaire. Vous pouvez changer les unités que ces règles utilisent afin qu’elles soient affichées en pouces, centimètres ou pixels. +The Form editor interface displays each JSON form in its own window, which has both an object and tool bar. You can have several forms open at the same time. The rulers on the side and bottom help you position objects in the form. You can change measurement units so that it displays inches, centimeters, or pixels. -### Afficher/masquer des éléments du formulaire +### Showing/hiding Form elements -Vous pouvez choisir d’afficher ou de masquer les éléments de la fenêtre de l’éditeur. Cette fonctionnalité permet de n’afficher que les éléments nécessaires à la création ou à la visualisation du formulaire, ou de choisir les outils que vous souhaitez utiliser. Cette option est toujours appliquée à la fenêtre courante de l’éditeur de formulaires. Par exemple, il est généralement inutile d’afficher les taquets et leurs libellés lorsque vous travaillez avec un formulaire entrée. +You can show or hide most interface elements in the Form editor. This feature allows you to show only the elements that you need to create or view in a form, or only the tools that you want to use. This option is always applied to the Form editor’s current window. For example, it is useful to show the output control lines when you are working on an output form. -Pour afficher ou masquer un élément de l’éditeur de formulaires : +To show or hide an element in the Form editor: -1. Dans le menu Formulaire, choisissez la commande **Afficher**. OU Utilisez la commande **Afficher** du menu contextuel de l’éditeur (cliquez avec le bouton droit de la souris en-dehors de tout objet). Cette commande fait apparaître un sous-menu hiérarchique listant les éléments que vous pouvez afficher ou masquer :

    ![](assets/en/FormEditor/showHideElements.png)

    Une coche placée en regard d’un élément indique son affichage. Sélectionnez l’élément que vous souhaitez masquer ou afficher. +1. Choose **Display** from the Form menu. OR Use the **Display** command in the context menu that appears in the Form editor’s window (right-click in the window without clicking on an object). A hierarchical submenu appears listing all the elements that you can show or hide:

    ![](assets/en/FormEditor/showHideElements.png)

    A check mark placed next to the element indicates that it will be shown. To hide an element, select the element so that the check mark disappears. -2. Sélectionnez l’élément que vous souhaitez masquer ou afficher.

    Voici la description des commandes de ce menu : - * **Formulaire hérité** : affiche ou masque les objets du formulaire hérité (s’il y en a un) dans la page courante du formulaire. Pour plus d’informations, reportez-vous au paragraphe Utiliser l'héritage de formulaire. - * **Page 0** : affiche ou masque les objets de la page 0 dans la page courante du formulaire. Cette option vous permet de mieux visualiser et distinguer les objets de la page courante et ceux de la page 0. Pour plus d’informations, reportez-vous à la section Définir un formulaire multi-pages. - * **Papier** : affiche ou masque les contours de la page d’impression sous forme de filets grisés. Cette option peut être sans effet apparent lorsque l’option Limites (cf. ci-dessous) est sélectionnée. En effet dans ce cas, lorsque la taille du formulaire est inférieure à celle de la page d’impression, les contours de celle-ci sont affichés en-dehors de la zone de visualisation du formulaire et donc n’apparaissent pas. Reportez-vous à la section Imprimer un formulaire. - * **Règle** : affiche ou masque les règles de la fenêtre de l’éditeur. +2. Select the element that you want to show or hide.

    Here is a description of the commands in this menu: + * **Inherited form**: Shows or hides inherited form objects (if there is an inherited form) on the current page of the form. For more information, refer to Using inherited forms. + * **Page 0**: Shows or hides the objects from page 0 on the form’s current page. This option allows you to distinguish between the objects on the form’s current page and those on page 0. For more information about pages in forms, refer to the Creating a multi-page form section. + * **Paper**: Shows or hides the borders of the printing page, which are shown as gray lines. This option may have no apparent effect when the Limits (see below) option is selected. If the size of the form is smaller than the printing page, the page’s borders are shown outside of the form’s viewing area and therefore do not appear. Refer to Printing a form. + * **Rulers**: Shows or hides the rulers in the Form editor’s window. * **Markers**: Shows or hides the output control lines and associated markers that show the limits of the form’s different areas. - * **Libellés des taquets** : affiche ou masque les libellés des taquets, lorsque ceux-ci sont affichés. Pour plus d’informations sur les taquets et leurs libellés, reportez-vous à la section Déplacer les taquets. - * **Limites** : affiche ou masque les limites du formulaire. Lorsque cette option est sélectionnée, le formulaire est affiché dans l’éditeur tel qu’il apparaîtra en mode Application. Cette possibilité est particulièrement intéressante pour ajuster un formulaire sans devoir tester le mode Application pour visualiser le résultat. -> Les options **Taille basée sur**, **Marge hor.** et **Marge ver.** des propriétés du formulaire modifient les limites du formulaire. Les limites du formulaire sont calculées en fonction des objets qui le composent. Lorsque vous déplacez ou agrandissez un objet placé près de la limite d’un formulaire, le rectangle de délimitation est modifié en conséquence. Pour plus d’informations sur les propriétés du formulaire, reportez-vous à la section [Propriétés des formulaires](jsonReference.html). + * **Marker Labels**: Shows or hides the marker labels, available only when the output control lines are displayed. For more information, refer to the Moving output control lines paragraph. + * **Limits**: Shows or hides the form’s limits. When this option is selected, the form is displayed in the Form editor as it appears in Application mode. This way you can adjust your form without having to switch to the Application mode in order to see the result. +> The **Size Based on**, **Hor margin** and **Vert margin** settings of the form properties affect the form’s limits. When using these settings, the limits are based on the objects in the form. When you modify the size of an object that is located next to the form’s border, it is modified to reflect that change. For more information on form properties, refer to the [Form properties](jsonReference.html) section. -### Utiliser la barre d’outils +### Using the toolbar -La barre d’outils de l’éditeur de formulaires propose un ensemble d’outils destinés à manipuler et modifier le formulaire. Chaque fenêtre dispose de sa propre barre d’outils. +The toolbar of the Form editor offers a set of tools to manipulate and modify the form. Each window has its own toolbar. ![](assets/en/FormEditor/toolbar.png) -La barre d’outils comporte les éléments suivants : - -| Icône | Nom | Description | -| --------------------------------------------- | --------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| ![](assets/en/FormEditor/execute.png) | Exécuter le formulaire | Permet de tester l’exécution du formulaire. Lorsque vous cliquez sur ce bouton, 4D ouvre une nouvelle fenêtre et affiche le formulaire dans son contexte (liste d’enregistrements pour un formulaire liste et enregistrement courant en page pour un formulaire détaillé). Le formulaire est exécuté dans le process principal. | -| ![](assets/en/FormEditor/selection.png) | [Flèche de sélection](#selecting-objects) | Permet de sélectionner, déplacer et redimensionner les objets du formulaire.

    **Note** : Lorsqu’un objet de type Texte ou Zone de groupe est sélectionné, appuyer sur la touche **Entrée** permet de le passer en édition. | -| ![](assets/en/FormEditor/zOrder.png) | [Ordre de saisie](#data-entry-order) | Passe en mode “Ordre de saisie”, dans lequel il est possible de visualiser et de modifier l’ordre de saisie courant du formulaire. A noter que vous pouvez également visualiser l’ordre de saisie courant tout en travaillant dans le formulaire. | -| ![](assets/en/FormEditor/moving.png) | [Déplacement](#moving-objects) | Passe en mode “Déplacement”, dans lequel il est possible d’atteindre rapidement n’importe quelle partie du formulaire en le faisant directement glisser dans la fenêtre. Le curseur prend la forme d’une main. Ce mode de navigation est particulièrement utile en cas de zoom dans le formulaire. | -| ![](assets/en/FormEditor/zoom.png) | [Zoom](#zoom) | Permet de modifier l’échelle d’affichage du formulaire (100% par défaut). Vous pouvez passer en mode “Zoom” en cliquant sur le bouton loupe ou en cliquant directement sur la barre correspondant à l’échelle désirée. Cette fonction est détaillée dans le paragraphe précédent. | -| ![](assets/en/FormEditor/alignment.png) | [Alignement](#aligning-objects) | Ce bouton est associé à un menu permettant d’aligner les objets dans le formulaire. Il est activé (ou non) en fonction des objets sélectionnés.

    Disponible uniquement avec un aperçu CSS Aucun | -| ![](assets/en/FormEditor/distribution.png) | [Répartition](#distributing-objects) | Ce bouton est associé à un menu permettant de répartir les objets dans le formulaire. Il est activé (ou non) en fonction des objets sélectionnés.

    Disponible uniquement avec un aperçu CSS Aucun | -| ![](assets/en/FormEditor/level.png) | [Niveau](#layering-objects) | Ce bouton est associé à un menu permettant de répartir les objets dans le formulaire. Il est activé (ou non) en fonction des objets sélectionnés. | -| ![](assets/en/FormEditor/group.png) | [Groupement/Dégroupement](#grouping-objects) | Ce bouton est associé à un menu permettant de grouper et dégrouper la sélection d’objets du formulaire. Il est activé (ou non) en fonction des objets sélectionnés. | -| ![](assets/en/FormEditor/displyAndPage.png) | [Affichage et gestion des pages](forms.html#form-pages) | Cette zone permet de passer d’une page du formulaire à une autre et d’ajouter des pages. Pour naviguer parmi les pages du formulaire, cliquez sur les boutons fléchés ou cliquez sur la zone centrale et choisissez la page à afficher dans le menu qui apparaît. Si vous cliquez sur le bouton fléché de droite alors que vous êtes sur la dernière page du formulaire, 4D vous permet d’ajouter une page. | -| ![](assets/en/FormEditor/cssPreviewicon.png) | [CSS Preview](#css-preview) | Ce bouton permet de sélectionner le mode CSS à utiliser. | -| ![](assets/en/FormEditor/views.png) | [Gestion des vues](#views) | Ce bouton affiche ou masque alternativement la palette des vues. Cette fonction est détaillée dans la section Utiliser les vues d'objet. | -| ![](assets/en/FormEditor/shields2.png) | [Affichage des badges](#shields) | Chaque clic sur ce bouton provoque l’affichage successif de tous les types de badges de formulaire. Le bouton est également associé à un menu permettant de sélectionner directement le type de badge à afficher. | -| ![](assets/en/FormEditor/library.png) | [Bibliothèque d'objets préconfigurés](objectLibrary.html) | Ce bouton affiche la fenêtre de la bibiliothèque d'objets préconfigurée, proposant de nombreux objets auxquels des propriétés par défaut ont déjà été appliquées. | -| ![](assets/en/FormEditor/listBoxBuilder1.png) | [Création de list box](#list-box-builder) | Ce bouton crée de nouvelles list box de type entity selection. | +The toolbar contains the following elements: + +| Icon | Name | Description | +| --------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ![](assets/en/FormEditor/execute.png) | Execute the form | Used to test the execution of the form. When you click on this button, 4D opens a new window and displays the form in its context (list of records for a list form and current record page for a detail form). The form is executed in the main process. | +| ![](assets/en/FormEditor/selection.png) | [Selection tool](#selecting-objects) | Allows selecting, moving and resizing form objects.

    **Note**: When an object of the Text or Group Box type is selected, pressing the **Enter** key lets you switch to editing mode. | +| ![](assets/en/FormEditor/zOrder.png) | [Entry order](#data-entry-order) | Switches to “Entry order” mode, where it is possible to view and change the current entry order of the form. Note that shields allow viewing the current entry order, while still working in the form. | +| ![](assets/en/FormEditor/moving.png) | [Moving](#moving-objects) | Switches to “Move” mode, where it is possible to reach any part of the form quickly by using drag and drop in the window. The cursor takes the shape of a hand. This navigation mode is particularly useful when zooming in the form. | +| ![](assets/en/FormEditor/zoom.png) | [Zoom](#zoom) | Allows modifying the form display percentage (100% by default). You can switch to “Zoom” mode by clicking on the magnifying glass or by clicking directly on the desired bar. This feature is detailed in previous section. | +| ![](assets/en/FormEditor/alignment.png) | [Alignment](#aligning-objects) | This button is linked to a menu that allows aligning objects in the form. It is enabled (or not) depending on the objects selected.

    Available only with CSS Preview None | +| ![](assets/en/FormEditor/distribution.png) | [Distribution](#distributing-objects) | This button is linked to a menu that allows distributing objects in the form. It is enabled (or not) depending on the objects selected.

    Available only with CSS Preview None | +| ![](assets/en/FormEditor/level.png) | [Level](#layering-objects) | This button is linked to a menu that allows changing the level of objects in the form. It is enabled (or not) depending on the objects selected. | +| ![](assets/en/FormEditor/group.png) | [Group/Ungroup](#grouping-objects) | This button is linked to a menu that allows grouping and ungrouping selections of objects in the form. It is enabled (or not) depending on the objects selected. | +| ![](assets/en/FormEditor/displyAndPage.png) | [Display and page management](forms.html#form-pages) | This area allows passing from one form page to another and adding pages. To navigate among form pages, click the arrow buttons, or click the central area and choose the page to display from the menu that appears. If you click the right arrow button while the last form page is displayed, 4D allows you to add a page. | +| ![](assets/en/FormEditor/cssPreviewicon.png) | [CSS Preview](#css-preview) | This button is used to select the CSS Mode to use. | +| ![](assets/en/FormEditor/views.png) | [Managing views](#views) | This button displays or hides the views palette. This function is detailed in Using object views . | +| ![](assets/en/FormEditor/shields2.png) | [Displaying shields](#shields) | Each click on this button causes the successive display of each type of form shield. The button is also linked to a menu that allows directly selecting the type of shield to display. | +| ![](assets/en/FormEditor/library.png) | [Preconfigured object library](objectLibrary.html) | This button displays the preconfigured object library that provides numerous objects with certain properties that have been predefined. | +| ![](assets/en/FormEditor/listBoxBuilder1.png) | [List Box Builder](#list-box-builder) | This button creates new entity selection list boxes. | ### Using the object bar The object bar contains all the active and inactive objects that can be used in 4D forms. Some objects are grouped together by themes. Each theme includes several alternatives that you can choose between. When the object bar has the focus, you can select the buttons using the keys of the keyboard. The following table describes the object groups available and their associated shortcut key. -| Bouton | Group | Key | +| Button | Group | Key | | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |:---:| | ![](assets/en/FormEditor/text.png) | [Text](../FormObjects/text.md) / [Group Box](../FormObjects/groupBox.md) | T | | ![](assets/en/FormEditor/input.png) | [Input](../FormObjects/input_overview.md) | F | | ![](assets/en/FormEditor/listbox.png) | [Hierarchical List](../FormObjects/list_overview.md) / [List Box](../FormObjects/listbox_overview.md) | L | | ![](assets/en/FormEditor/combo.png) | [Combo Box](../FormObjects/comboBox_overview.md) / [Drop-down List](../FormObjects/dropdownList_overview.md) / [Picture Pop-up Menu](../FormObjects/picturePopupMenu_overview.md) | P | | ![](assets/en/FormEditor/button.png) | [Button](../FormObjects/button_overview.md) / [Picture Button](../FormObjects/pictureButton_overview.md) / [Button Grid](../FormObjects/buttonGrid_overview.md) | B | -| ![](assets/en/FormEditor/radio.png) | [Bouton radio](../FormObjects/radio_overview.md) | R | -| ![](assets/en/FormEditor/checkbox.png) | [Case à cocher](../FormObjects/checkbox_overview.md) | C | +| ![](assets/en/FormEditor/radio.png) | [Radio Button](../FormObjects/radio_overview.md) | R | +| ![](assets/en/FormEditor/checkbox.png) | [Check Box](../FormObjects/checkbox_overview.md) | C | | ![](assets/en/FormEditor/indicator.png) | [Progress Indicator](../FormObjects/progressIndicator.md) / [Ruler](../FormObjects/ruler.md) / [Stepper](../FormObjects/stepper.md) / [Spinner](../FormObjects/spinner.md) | I | | ![](assets/en/FormEditor/rectangle.png) | [Rectangle](../FormObjects/shapesOverview.html#rectangle) / [Line](../FormObjects/shapesOverview.html#line) / [Oval](../FormObjects/shapesOverview.html#oval) | S | | ![](assets/en/FormEditor/splitter.png) | [Splitter](../en/FormObjects/splitters.md) / [Tab Control](../FormObjects/tabControl.md) | D | @@ -89,230 +89,230 @@ You can display and modify form and object properties using the Property List. I To display/hide the Property List, choose **Property List** from the **Form** menu or from the context menu of the Form editor. You can also display it by double-clicking in an empty area of the form. -#### Raccourcis de navigation +#### Navigation shortcuts -Vous pouvez naviguer dans la Liste des propriétés à l’aide des raccourcis suivants : +You can navigate in the Property List using the following shortcuts: -* **Touches fléchées** haut ou bas ↑ ↓ : déplacement de cellule en cellule. -* **Touches fléchées** gauche ou droite ← → : déploie/contracte les thèmes ou les menus. -* **PgUp** et **PgDn** : sélectionne la première ou la dernière cellule visible de la liste affichée. -* **Début** et **Fin** : sélectionne la première ou la dernière cellule de la liste. -* **Ctrl+clic** (Windows) ou **Commande+clic** (Mac OS) sur un événement : sélectionne/désélectionne tous les événements, en fonction de l’état initial de l’événement sur lequel vous avez cliqué. -* **Ctrl+clic** (Windows) ou **Commande+clic** (Mac OS) sur un intitulé de thème : déploie/contracte tous les thèmes. +* **Arrow key**s ↑ ↓: Used to go from one cell to another. +* **Arrow keys** ← →: Used to expand/collapse themes or enter edit mode. +* **PgUp** and **PgDn**: Used to scroll the Property List contents. +* **Home** and **End**: Used to scroll the Property List so that the first or last cell is displayed. +* **Ctrl+click** (Windows) or **Command+click** (Mac OS) on an event: Used to select/deselect every event in the list, according to the initial state of the event on which you clicked. +* **Ctrl+click** (Windows) or **Command+click** (Mac OS) on a theme label: Used to Collapse/Expand every theme in the list. ## Manipulating Form Objects -### Ajouter des objets +### Adding objects -Vous pouvez ajouter des objets dans un formulaire de nombreuses manières : +You can add objects to forms in several ways: -* Par traçage d'un objet après sélection dans la barre d'objets (cf. paragraphe [Utiliser la barre d’objets](#using-the-object-bar)) -* Par glisser-déposer depuis la barre d'objets -* Par glisser-déposer ou copier-coller depuis la [bibliothèque d'objets](objectLibrary.md) préconfigurés -* Par glisser-déposer depuis un autre formulaire, -* Par glisser-déposer depuis l'Explorateur (champs) ou les éditeurs du mode Développement (énumérations, images, etc.) +* By drawing the object directly in the form after selecting its type in the object bar (see [Using the object bar](#using-the-object-bar)) +* By dragging and dropping the object from the object bar +* By drag-and-drop or copy-paste operations on an object selected from the preconfigured [object library](objectLibrary.md), +* By dragging and dropping an object from another form, +* By dragging and dropping an object from the Explorer (fields) or from other editors in the Design environment (lists, pictures, etc.) -Une fois l'objet inséré, vous pouvez modifier toutes ses caractéristiques dans l'éditeur de formulaires. +Once the object is placed in the form, you can modify its characteristics using the Form editor. -Vous pouvez travailler avec deux types d'objets dans vos formulaires : +You can work with two types of objects in your forms: -* **les objets statiques** (filets, cadres, images d'arrière-plan, etc.) : ces objets sont généralement utilisés pour le décor, les libellés ou encore l'interface graphique. Ces objets sont accessibles via la barre d'objets de l'éditeur de formulaires. Vous pouvez définir leurs attributs graphiques (taille, couleur, police...) ainsi que leurs propriétés de redimensionnement à l'aide de la Liste de propriétés. A la différence des objets actifs, les objets statiques ne sont pas associés à des variables. A noter qu'il est possible d'insérer des éléments dynamiques dans les objets statiques. +* **Static objects** (lines, frames, background pictures, etc.): These objects are generally used for setting the appearance of the form and its labels as well as for the graphic interface. They are available in the object bar of the Form editor. You can also set their graphic attributes (size, color, font, etc.) and their resizing properties using the Property List. Static objects do not have associated variables like active objects. However, you can insert dynamic objects into static objects. -* **les objets actifs** : un objet actif est un objet qui réalise une tâche ou une fonction de l’interface. Il existe de nombreux types d’objets actifs : champs, boutons, listes déroulantes, etc. Un objet actif est associé soit à un champ, soit à une variable. +* **Active objects**: These objects perform tasks or functions in the interface and can take many forms: fields, buttons, scrollable lists, etc. Each active object is associated with either a field or a variable. -### Sélectionner des objets +### Selecting objects -Avant de pouvoir réaliser une opération sur un objet (comme le changement de l’épaisseur d’une ligne ou d’une police), il est nécessaire de sélectionner cet objet. +Before you can perform any operation on an object (such as changing a line width or font), you need to select the object that you want to modify. -Pour sélectionner un objet à l’aide de la barre d’outils : +To select an object using the toolbar: -1. Cliquez sur l’outil Flèche dans la barre d’outils.

    ![](assets/en/FormEditor/selection.png)

    Lorsque vous le faites glisser au-dessus du formulaire, le pointeur prend la forme du pointeur standard. -2. Cliquez sur l’objet que vous souhaitez sélectionner. Des poignées de sélection identifient l’objet sélectionné.

    ![](assets/en/FormEditor/selectResize.png) +1. Click the Arrow tool in the toolbar.

    ![](assets/en/FormEditor/selection.png)

    When you move the pointer into the form area, it becomes a standard arrow-shaped pointer. +2. Click the object you want to select. Resizing handles identify the selected object.

    ![](assets/en/FormEditor/selectResize.png) -Pour sélectionner un objet à l’aide de la Liste des propriétés : +To select an object using the Property List: -1. Sélectionnez le nom de l’objet dans la liste de sélection située en haut de la palette.

    De cette manière, vous pouvez sélectionner un objet masqué par d’autres objets ou situé en-dehors des limites de la fenêtre. Pour désélectionner un objet, cliquez hors de ses limites ou cliquez dessus en maintenant la touche **Majuscule** enfoncée. -> Il est également possible de sélectionner des objets en double-cliquant dans la fenêtre de résultat d’une recherche globale. +1. Choose the object’s name from the Object List drop-down list located at the top of the Property List.

    Using these two methods, you can select an object that is hidden by other objects or located outside the visible area of the current window. To deselect an object, click outside the object’s boundary or **Shift+click** the object. +> It is also possible to select objects by double-clicking them in the result window of ""Find in design" operation. ### Selecting multiple objects -Il est souvent nécessaire de réaliser la même opération sur plusieurs objets d’un formulaire — par exemple, pour les déplacer, les aligner ou changer leur apparence. 4D vous permet de sélectionner plusieurs objets en même temps. Vous pouvez réaliser une sélection multiple en utilisant l’une des solutions suivantes : +You may want to perform the same operation on more than one form object — for example, to move the objects, align them, or change their appearance. 4D lets you select several objects at the same time. There are several ways to select multiple objects: -* Choisissez **Tout sélectionner** dans le menu Edition. -* Cliquez avec le bouton droit de la souris sur un objet et choisissez la commande **Sélectionner objets de même type** dans le menu contextuel. -* Maintenez la touche **Maj** enfoncée et cliquez l’un après l’autre sur tous les objets que vous souhaitez sélectionner. -* Cliquez hors du groupe d’objets que vous souhaitez sélectionner et dessinez un rectangle de sélection entourant ou traversant les objets à sélectionner. Tout objet inclus dans les limites du rectangle ou qui touche ces limites est sélectionné lorsque vous relâchez le bouton de la souris. -* Maintenez enfoncée la touche **Alt** (sous Windows) ou **Option** (sous Mac Os) et tracez un rectangle de sélection. Dans ce cas, seuls les objets entièrement inclus dans ce rectangle seront sélectionnés. +* Choose **Select All** from the Edit menu to select all the objects. +* Right-click on the object and choose the **Select Similar Objects** command in the context menu. +* Hold down the **Shift** key and click the objects you want to select. +* Start at a location outside the group of objects you want to select and drag a marquee (sometimes called a selection rectangle) around the objects. When you release the mouse button, if any part of an object lies within or touches the boundaries of the selection rectangle, that object is selected. +* Hold down the **Alt** key (Windows) or the **Option** key (macOS) and draw a marquee. Any object that is completely enclosed by the marquee is selected. -La fenêtre ci-dessous représente la sélection de deux objets à l’aide d’un rectangle de sélection : +The figure below shows a marquee being drawn to select two objects: ![](assets/en/FormEditor/selectMultiple.png) -Pour désélectionner un objet qui fait partie d’un groupe d’objets sélectionnés, maintenez la touche **Majuscule** enfoncée et cliquez sur cet objet. Les autres objets demeurent sélectionnés. Pour désélectionner tous les objets, cliquez hors des limites de ces objets. +To deselect an object that is part of a set of selected objects, hold down the **Shift** key and click the object. The other objects remain selected. To deselect all the selected objects, click outside the boundaries of all the objects. -### Dupliquer des objets +### Duplicating objects -Vous pouvez dupliquer tout objet de formulaire, y compris les objets actifs. Les copies d’objets actifs conservent toutes les propriétés de l’objet original comme le nom, le type, l’action automatique, le format d’affichage et la méthode objet. +You can duplicate any object in the form, including active objects. Copies of active objects retain all the properties of the original, including name, type, standard action, display format, and object method. -Vous pouvez dupliquer directement un objet ou une sélection d’objets, ou utiliser la boîte de dialogue “Dupliquer plusieurs” pour paramétrer une duplication multiple d’objets. Cette boîte de dialogue vous permet de créer autant de duplicata d’un ou de plusieurs objets que vous voulez, en une seule opération. +You can duplicate an object directly using the Duplicate tool in the Tools palette or use the Duplicate Many dialog box to duplicate an object more than once. Also, using this dialog box, you can set the distance between two copies. -Pour dupliquer directement un ou plusieurs objet(s) : +To duplicate one or more objects: -1. Sélectionnez le ou les objet(s) que vous souhaitez dupliquer. -2. Choisissez la commande **Dupliquer** dans le menu **Edition**. 4D crée une copie de chaque objet sélectionné et place la copie juste à côté de l’original. -3. Déplacez la copie à l’emplacement souhaité. Si vous choisissez de nouveau la commande Dupliquer, 4D crée une autre copie pour chaque objet et la place exactement au même placement relatif par rapport à la première copie. Si vous devez répartir plusieurs copies d’un objet sur un axe, appliquez la procédure suivante. Dupliquez l’objet original, déplacez la copie à un autre emplacement sur le formulaire, puis dupliquez la copie. La deuxième copie adopte le même positionnement relatif par rapport à la première copie que celui qui existe entre la position de l’original et celle de la première copie. Les copies suivantes seront alors placées avec le même écart par rapport à leur original. Le schéma ci-dessous explique le fonctionnement du placement relatif des copies : +1. Select the object or objects that you want to duplicate. +2. Choose **Duplicate** from the **Edit** menu. 4D creates a copy of each selected object and places the copy in front and slightly to the side of the original. +3. Move the copy (or copies) to the desired location. If you choose the Duplicate menu item again, 4D creates another copy of each object and moves it the exact same distance and direction from the first copy. If you need to distribute copies of the object along a line, you should use the following procedure. Duplicate the original object, move the copy to another location in the form, and then duplicate the copy. The second copy is automatically placed in the same relation to the first copy as the first copy was in relation to the original object. Subsequent copies are also placed in the same relation to their originals. The figure below shows how this relative placement of copies works: ![](assets/en/FormEditor/duplicateObjects.png) -#### Dupliquer plusieurs +#### Duplicate Many -La boîte de dialogue “Dupliquer plusieurs” apparaît lorsque vous sélectionnez un ou plusieurs objet(s) puis choisissez la commande **Dupliquer plusieurs...** dans le menu **Objets**. +The "Duplicate Many" dialog box appears when you select one or more object(s) and choose the **Duplicate Many...** command from the **Object** menu. ![](assets/en/FormEditor/duplcateMany.png) -* Dans la zone supérieure, saisissez le nombre de colonnes et de lignes d’objets que vous souhaitez obtenir.

    Par exemple, si vous voulez obtenir 3 colonnes et 2 lignes d’objets, saisissez 3 dans la zone Colonne(s) et 2 dans la zone Ligne(s). Si vous souhaitez ajouter horizontalement deux copies d’un objet, saisissez 3 dans la zone Colonnes (laissez la zone Ligne(s) à 1). +* In the upper area, enter the number of columns and lines (rows) of objects you want to get.

    For example, if you want three columns and two lines of objects, enter 3 in the Column(s) area and 2 in the Line(s) area. If you want three horizontal new copies of an object, enter 4 in the Column(s) area and leave the default value, 1, in the Line(s) area. -* Pour les lignes et les colonnes, définissez le décalage que vous souhaitez appliquer à chaque nouveau duplicata.

    La valeur saisie doit être exprimée en points et sera appliquée relativement à l’origine de l’objet dupliqué.

    Par exemple, si vous souhaitez laisser un intervalle vertical de 20 points entre chaque objet, et que la hauteur de l’objet source est de 50 points, saisissez 70 dans la zone “Intervalle” de Colonne. +* For lines and columns, define the offset that you wish to leave between each copy.

    The value must be expressed in points. It will be applied to each copy, or copies, in relation to the original object.

    For example, if you want to leave a vertical offset of 20 points between each object and the height of the source object is 50 points, enter 70 in the column’s “Offset” area. -* Si vous souhaitez créer une matrice de variables, cochez l’option **Numéroter les variables** et sélectionnez le sens dans lequel la numérotation des variables doit s’effectuer. Cette option n’est active que si l’objet sélectionné est une variable. Pour plus d’informations sur cette option, reportez-vous à la section **Dupliquer sur matrice** du *Manuel de développement*. +* If you wish to create a matrix of variables, select the **Number Variables** option and select the direction in which the variables are to be numbered, either by line(s) or by column(s). This option is active only when the selected object is a variable. For more information on this option, refer to **Duplicating on a matrix** in the *Design Reference*. -### Déplacer des objets +### Moving objects -Vous pouvez déplacer tout objet d’un formulaire, graphique ou actif, y compris les champs ou les objets créés à l’aide d’un modèle. Pour déplacer un objet, vous pouvez : +You can move any graphic or active object in the form including fields and objects created with a template. When moving an object, you have the following options: -* Déplacer l’objet en le faisant glisser avec la souris, -* Déplacer l’objet pixel par pixel en utilisant les touches fléchées du clavier, -* Déplacer l’objet par paliers (de 20 pixels par défaut), +* Move the object by dragging it, +* Move the object one pixel at a time using the arrow keys, +* Move the object by steps using the arrow keys (20-pixel steps by default), -Lorsque vous commencez à déplacer un objet à l'aide de la souris, les poignées disparaissent. 4D affiche des marqueurs qui indiquent l’emplacement des limites de l’objet dans les règles, vous pouvez ainsi placer les objets avec précision. Prenez garde à ne pas cliquer sur les poignées, ce qui aurait pour effet de redimensionner l’objet. Appuyez sur la touche **Majuscule** pour effectuer un déplacement avec contrainte. +As you begin dragging the selected object, its handles disappear. 4D displays markers that show the location of the object’s boundaries in the rulers so that you can place the object exactly where you want it. Be careful not to drag a handle. Dragging a handle resizes the object. You can press the **Shift** key to carry out the move with a constraint. -Si la [grille magnétique](#using-the-magnetic-grid) est activée, le déplacement de l’objet s’effectue par paliers indiquant les emplacements remarquables. +When the [Magnetic Grid](#using-the-magnetic-grid) is on, objects are moved in stages indicating noticeable locations. -Pour déplacer un objet pixel par pixel : +To move an object one pixel at a time: -* Sélectionnez le ou les objet(s) que vous souhaitez déplacer. A chaque fois que vous appuyez sur une touche fléchée, la sélection est déplacée d’un pixel dans la direction de la flèche. +* Select the object or objects and use the arrow keys on the keyboard to move the object. Each time you press an arrow key, the object moves one pixel in the direction of the arrow. -Pour déplacer l’objet par paliers : +To move an object by steps: -* Sélectionnez le ou les objet(s) que vous souhaitez déplacer, appuyez sur la touche **Majuscule** et utilisez les touches fléchées du clavier pour déplacer l’objet par paliers. Par défaut, les paliers sont de 20 pixels. Vous pouvez modifier le pas dans la Page Formulaires des Préférences. +* Select the object or objects you want to move and hold down the **Shift** key and use the arrow keys to move the object by steps. By default, steps are 20 pixels at a time. You can change this value on the Forms Page of the Preferences. -### Grouper des objets +### Grouping objects -4D vous permet de grouper des objets de manière à ce que vous puissiez sélectionner, déplacer et modifier ce groupe comme un seul objet. Les objets qui sont groupés conservent leur position relative par rapport aux autres objets du groupe. Les objets groupés sont par exemple un champ et son libellé, un bouton invisible et son icône, etc. +4D lets you group objects so that you can select, move, and modify the group as a single object. Objects that are grouped retain their position in relation to each other. You would typically group a field and its label, an invisible button and its icon, and so forth. -Lorsque vous redimensionnez un groupe, tous les objets du groupe sont redimensionnés proportionnellement (hormis les zones de texte, qui sont redimensionnées par étape suivant leur taille de police de caractères). +When you resize a group, all the objects in the group are resized proportionally (except text areas, which are resized in steps according to their font sizes. -Vous pouvez dégrouper un groupe d’objets à tout moment et les traiter de nouveau comme des objets indépendants. +You can ungroup a group of objects to treat them as individual objects again. -Un objet actif qui a été groupé doit être dégroupé pour que vous puissiez accéder à ses propriétés ou à sa méthode. Il est toutefois possible de sélectionner un objet appartenant à un groupe sans devoir dégrouper l’ensemble : pour cela, effectuez **Ctrl+clic** (Windows) ou **Commande+clic** (Mac Os) sur l’objet (le groupe doit être sélectionné au préalable). +An active object that has been grouped must be ungrouped before you can access its properties or method. However, it is possible to select an object belonging to a group without degrouping the set: to do this, **Ctrl+click** (Windows) or **Command+click** (macOS) on the object (the group must be selected beforehand). -Grouper des objets n’a d’effet que dans l’éditeur de formulaires. Lors de l’exécution du formulaire, tous les objets groupés (hormis les boutons radio dans les bases binaires) se comportent comme s’ils étaient indépendants. -> Il n’est pas possible de grouper des objets appartenant à des vues différentes et seuls les objets appartenant à la vue courante peuvent être groupés (cf. section [Utiliser les vues d'objet](#views)). +Grouping only affects objects in the Form editor. When the form is executed, all grouped objects act as if they were ungrouped. +> It is not possible to group objects belonging to different views and only those objects belonging to the current view can be grouped (see [Views](#views) ). -Pour grouper les objets : +To group objects: -1. Sélectionnez les objets que vous souhaitez grouper. -2. Sélectionnez **Grouper** dans le menu Objets.

    OU

    Cliquez sur le bouton Grouper dans la barre d’outils de l’éditeur de formulaires :

    ![](assets/en/FormEditor/group.png)

    4D matérialise les bordures du groupe avec des poignées. Les objets du groupe ne sont plus marqués séparément par des poignées. Désormais, lorsque vous modifiez le groupe d’objets, vous modifiez tous les objets qui le composent. +1. Select the objects that you want to group. +2. Choose **Group** from the Object menu.

    OR

    Click the Group button in the toolbar of the Form editor:

    ![](assets/en/FormEditor/group.png)

    4D marks the boundary of the newly grouped objects with handles. No handles mark the boundary of any of the individual objects within the group. Now, when you modify the grouped object, you change all the objects that make up the group. -Pour dégrouper un groupe d’objets : +To ungroup an object: -1. Sélectionnez le groupe que vous souhaitez dégrouper. -2. Choisissez **Dégrouper** dans le menu **Objets**.

    OU

    Sélectionnez la commande **Dégrouper** (menu du bouton **Grouper**) dans la barre d’outils de l’éditeur de formulaires.

    Si la commande **Dégrouper** est désactivée, cela veut dire que l’objet sélectionné est déjà sous sa forme la plus simple.

    4D rematérialise les bordures des objets qui constituaient le groupe avec des poignées. +1. Select the grouped object that you want to ungroup. +2. Choose **Ungroup** from the **Object** menu.

    OR

    Click the **Ungroup** button (variant of the **Group** button) in the toolbar of the Form editor.

    If **Ungroup** is dimmed, this means that the selected object is already separated into its simplest form.

    4D marks the boundaries of the individual objects with handles. -### Aligner des objets +### Aligning objects -Vous pouvez aligner un ensemble d’objets entre eux ou à l’aide d’une grille magnétique. +You can align objects with each other or using an invisible grid on the form. -* Vous pouvez aligner entre eux des objets sur le haut, le bas, le côté, le centre horizontal ou le centre vertical. Vous pouvez aligner directement une sélection d’objets ou utiliser une boîte de dialogue vous permettant d’appliquer tout type d’alignement et de répartition aux objets sélectionnés. Cette boîte de dialogue vous permet en outre de sélectionner l’objet par rapport auquel vous voulez aligner les autres et de prévisualiser le résultat de vos paramétrages. -* Lorsque vous utilisez la grille magnétique, chaque objet peut être aligné manuellement avec les autres sur la base de positions “remarquables” représentées visuellement. +* When you align one object to another, you can align it to the top, bottom, side, or horizontal or vertical center of the other object. You can directly align a selection of objects using the alignment tools or apply more advanced alignment settings using the Alignment Assistant. The latter option allows you, for example, to set the object that will be used as the position reference and to preview the alignment in the form before applying it. +* When you use the invisible grid, each object can be aligned manually with others based on “noticeable” positions which are depicted with dotted lines that appear when the object being moved approaches other objects. -#### Utiliser les outils et les commandes d’alignement direct +#### Using the instantaneous alignment tools -Le sous-menu Aligner du menu Objets (ou du menu contextuel de l’éditeur) et les outils d’alignement de la barre d’outils vous permettent de rapidement aligner entre eux des objets sélectionnés. +The alignment tools in the toolbar and in the Align submenu of the Object menu allow you to quickly align selected objects. ![](assets/en/FormEditor/alignmentMenu.png) -Lorsque 4D aligne des objets, il utilise l’objet le plus avancé dans la direction de l’alignement comme “ancre” sur laquelle tous les autres objets vont être alignés. This object is the “anchor.” It uses the object that is the furthest in the alignment’s direction as the anchor and aligns the other objects to that object. Par exemple, si vous alignez un groupe d’objets à droite, les objets seront alignés sur le côté droit de l’objet situé le plus à droite. Voici le résultat des alignements "aucun", "à gauche", "centré horizontalement" et "à droite" : +When 4D aligns objects, it leaves one selected object in place and aligns the remaining objects to that one. This object is the “anchor.” It uses the object that is the furthest in the alignment’s direction as the anchor and aligns the other objects to that object. For instance, if you want to perform a right alignment on a set of objects, the rightmost object will be used as the anchor. The figure below shows objects with no alignment, "aligned left", "aligned horizontally by centers", and "aligned right": ![](assets/en/FormEditor/alignmentTools.png) -#### Utiliser la boîte de dialogue d’alignement +#### Using the alignment assistant -La boîte de dialogue d’alignement vous permet d’appliquer tout type d’alignement et/ou de répartition aux objets sélectionnés. +The Alignment Assistant allows you to perform any type of alignment and/or distribution of objects. ![](assets/en/FormEditor/alignmentAssistant.png) -Pour afficher cette boîte de dialogue, vous devez sélectionner les objets que vous souhaitez aligner puis choisir la commande **Alignement...** dans le sous-menu **Aligner** du menu **Objets** ou du menu contextuel de l’éditeur. +To display this dialog box, select the objects you want to align then choose the **Alignment** command from the **Align** submenu in the **Object** menu or from the context menu of the editor. -* Cliquez sur l’icône d’alignement de votre choix dans les zones “Alignement droite/gauche” et/ou “Alignement haut/bas”.

    La zone d’exemple illustre le principe de l’opération sélectionnée. +* In the “Left/Right Alignment” and/or “Top/Bottom Alignment” areas, click the icon that corresponds to the alignment you want to perform.

    The example area displays the results of your selection. -* Pour effectuer un alignement standard des objets sélectionnés, cliquez sur le bouton **Prévisualisation** ou **Appliquer**.

    Dans ce cas, 4D utilisera l’objet le plus avancé dans la direction de l’alignement comme “ancre” sur laquelle tous les autres objets vont être alignés. Par exemple, si vous alignez un groupe d’objets à droite, les objets seront alignés sur le côté droit de l’objet situé le plus à droite.

    OU BIEN :

    Pour aligner le groupe d’objets par rapport un objet particulier, cochez l’option **Aligner sur** puis sélectionnez dans la liste déroulante le nom de l’objet par rapport auquel aligner les autres. Dans ce cas, la position de l’objet de référence ne variera pas. +* To perform an alignment that uses the standard anchor scheme, click **Preview** or **Apply**.

    In this case 4D uses the object that is the furthest in the alignment’s direction as the anchor and aligns the other objects to that object. For instance, if you want to perform a right alignment on a set of objects, the rightmost object will be used as the anchor.

    OR:

    To align objects to a specific object, select the **Align on** option and select the object to which you want the other objects to be aligned from the object list. In this case, the position of the reference object will not be altered. -Vous pouvez prévisualiser le résultat réel de vos paramétrages en cliquant sur le bouton **Prévisualisation**. l’opération s’effectue dans l’éditeur de formulaires, mais la boîte de dialogue reste au premier plan. Vous pouvez alors Appliquer ou Annuler les modifications. -> Cette boîte de dialogue combine l’alignement d’objets et leur répartition. Pour plus d’informations sur la répartition, reportez-vous au paragraphe [Répartir des objets](#distributing-objects). +You can preview the results of the alignment by clicking the **Preview** button. The objects are then aligned in the Form editor but since the dialog box does not go away, you can still cancel or apply the alignment. +> This dialog box allows you to align and distribute objects in one operation. For more information on how to distribute objects, refer to [Distributing objects](#distributing-objects). -#### Utiliser l’alignement magnétique +#### Using the Magnetic Grid -L’éditeur de formulaires est doté d’une grille magnétique virtuelle qui peut vous aider à placer et à aligner des objets sur un formulaire. L’alignement magnétique des objets est basée sur la position relative des objets entre eux. Le magnétisme n’est utilisable que lorsqu’au moins deux objets sont présents dans le formulaire. +The Form editor provides a virtual magnetic grid that can help you place and align objects in a form. Magnetic alignment of objects is based on their position in relation to each other. The magnetic grid can only be used when at least two objects are present in the form. -Le principe est le suivant : lorsque vous faites glisser un objet dans le formulaire, 4D indique des emplacements possibles pour cet objet sur la base d’alignements remarquables avec les autres objets du formulaire. Un alignement remarquable est établi à chaque fois que : +This works as follows: When you move an object in the form, 4D indicates possible locations for this object based on noticeable alignments with other form objects. A noticeable alignment is established each time that: * Horizontally, the edges or centers of two objects coincide, * Vertically, the edges of two objects coincide. -A ce moment, 4D place l’objet à l’emplacement et affiche un trait rouge indiquant l’alignement remarquable pris en compte : +When this happens, 4D places the object at the location and displays a red line indicating the noticeable alignment taken into account: ![](assets/en/FormEditor/magneticGrid1.png) -En ce qui concerne la répartition des objets, 4D propose une distance basée sur les standards d’interface (20 points). Comme pour l’alignement magnétique, des traits rouges indiquent les distances remarquables au moment où elles sont atteintes. +Concerning the distribution of objects, 4D proposes a distance based on interface standards. Like with magnetic alignment, red lines indicate the noticeable differences once they are reached. ![](assets/en/FormEditor/magneticGrid2.png) -Ce fonctionnement s’applique à tous les types d’objets des formulaires. Le magnétisme peut être activé ou désactivé à tout moment à l’aide de la commande **Activer la grille magnétique** du menu **Formulaire** ou du menu contextuel de l’éditeur. Il est également possible de définir l’activation par défaut de cette fonction dans la page **Préférences** >**Formulaires** (option **Activer l'auto-alignement par défaut**). Il est possible d’activer ou de désactiver manuellement la grille magnétique lorsqu’un objet est sélectionné en appuyant sur la touche **Ctrl** (Windows) ou **Control** (Mac Os). -> Le magnétisme entraîne également l’observation de paliers lors du redimensionnement manuel des objets. +This operation applies to all types of form objects. The Magnetic Grid can be enabled or disabled at any time using the **Magnetic Grid** command in the **Form** menu or in the editor context menu. It is also possible to set the activation of this feature by default on the **Preferences** > **Forms** page (**Activate auto alignment by default** option). You can manually activate or deactivate the magnetic grid when an object is selected by pressing the **Ctrl** (Windows) or **Control** (macOS) key . +> The Magnetic Grid also influences the manual resizing of objects. ### Distributing objects -Vous pouvez répartir des objets de manière à ce qu’ils soient disposés en respectant un espacement égal entre eux. Pour cela, vous pouvez utiliser des commandes directes de répartition ou passer par l’intermédiaire de la boîte de dialogue d’alignement et répartition pour effectuer des répartitions spécifiques ou combiner alignement et répartition. The latter allows you to align and distribute objects in one operation. -> Lorsque la [grille magnétique](#using-the-magnetic-grid) est activée, une aide visuelle est également fournie pour la répartition lors du déplacement manuel d’un objet. +You can distribute objects so that they are set out with an equal amount of space between them. To do this, you can distribute objects using either the Distribute tools in the Tools palette or the Alignment Assistant. The latter allows you to align and distribute objects in one operation. +> When the [Magnetic Grid](#using-the-magnetic-grid) is on, a visual guide is also provided for distribution when an object is moved manually. -Pour répartir directement une sélection d’objets (verticalement ou horizontalement) : +To distribute objects with equal spacing: -1. Sélectionnez les objets (au moins trois) que vous souhaitez répartir. +1. Select three or more objects and click the desired Distribute tool. -2. Dans la barre d’outils, cliquez sur l’outil de répartition qui correspond la répartition que vous souhaitez appliquer.

    ![](assets/en/FormEditor/distributionTool.png)

    OU

    Choisissez la commande Répartir horizontalement ou Répartir verticalement dans le sous-menu **Aligner** du menu **Objets** ou du menu contextuel de l'éditeur.

    4D répartit les objets par rapport à leurs centres, la plus grande distance entre deux objets contigus est utilisée comme distance de référence. +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.

    4D distributes the objects accordingly. Objects are distributed using the distance to their centers and the largest distance between two consecutive objects is used as a reference. -Pour répartir des objets à l’aide de la boîte de dialogue d'alignement et répartition : +To distribute objects using the Align and Distribute dialog box: -1. Sélectionnez les objets que vous souhaitez répartir. +1. Select the objects you want to distribute. -2. Choisissez la commande **Alignement...** dans le sous-menu **Aligner** du menu **Objets** ou du menu contextuel de l’éditeur.

    La boîte de dialogue suivante apparaît :![](assets/en/FormEditor/alignmentAssistant.png) +2. Choose the **Alignment** command from the **Align** submenu in the **Object** menu or from the context menu of the editor.

    The following dialog box appears:![](assets/en/FormEditor/alignmentAssistant.png) -3. Cliquez sur l’icône de répartition standard (horizontale ou verticale) de votre choix: ![](assets/en/FormEditor/horizontalDistribution.png)

    (icône de répartition horizontale standard)

    La zone d’exemple illustre le principe de l’opération sélectionnée. +3. In the Left/Right Alignment and/or Top/Bottom Alignment areas, click the standard distribution icon: ![](assets/en/FormEditor/horizontalDistribution.png)

    (Standard horizontal distribution icon)

    The example area displays the results of your selection. -4. Pour effectuer une répartition standard, cliquez sur le bouton **Prévisualisation** ou *Appliquer*.

    Dans ce cas, les objets seront répartis de manière à ce que leurs côtés soient équidistants (répartition standard).

    OU BIEN :

    Pour effectuer une répartition spécifique (par exemple répartir les objets de manière à ce que leurs côtés droits — et non plus leurs intervalles soient équidistants), cochez une option **Répartir**. This option acts like a switch. Lorsque l'option Répartir est cochée, les icônes situées au-dessous d’elle s’appliquent alors à la répartition : +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). This option acts like a switch. If the Distribute check box is selected, the icons located below it perform a different function: * Horizontally, the icons correspond to the following distributions: evenly with respect to left sides, centers (hor.) and right sides of the selected objects. * Vertically, the icons correspond to the following distributions: evenly with respect to top edges, centers (vert.) and bottom edges of the selected objects. You can preview the actual result of your settings by clicking on the **Preview** button: the operation is carried out in the Form editor but the dialog box stays in the foreground. You can then **Cancel** or **Apply** the modifications. -> Cette boîte de dialogue vous permet de combiner l’alignement d’objets et leur répartition. Pour plus d’informations sur l’alignement, reportez-vous au paragraphe [Aligner des objets](#aligning-objects). +> This dialog box lets you combine object alignment and distribution. For more information about alignment, refer to [Aligning objects](#aligning-objects). -### Gérer les plans des objets +### Layering objects -Il est parfois nécessaire de réorganiser certains objets qui occultent d’autres objets du formulaire. Par exemple, vous pouvez souhaiter voir apparaître un graphique derrière les champs dans un formulaire. 4D propose 4 commandes, **Passer au dernier plan**, **Passer au premier plan**, **Plan suivant** et **Plan précédent**, qui vous permettent d’organiser les plans des objets du formulaire. These layers also determine the default entry order (see Modifying data entry order). La fenêtre ci-dessous représente des objets organisés en couches : +You will sometimes have to rearrange objects that are obstructing your view of other objects in the form. For example, you may have a graphic that you want to appear behind the fields in a form. 4D provides four menu items, **Move to Back**, **Move to Front**, **Up One Level** and **Down One Level** that let you “layer” objects on the form. These layers also determine the default entry order (see Modifying data entry order). The figure below shows objects in front of and behind other objects: ![](assets/en/FormEditor/layering.png) -Pour modifier le plan d'un objet, sélectionnez-le et choisissez : +To move an object to another level, select it and choose: * One of the **Move to Back**, **Move to Front**, **Up One Level** and **Down One Level** commands of the Object menu, * One of the commands in the **Level>** submenu in the context menu of the editor, @@ -321,11 +321,11 @@ Pour modifier le plan d'un objet, sélectionnez-le et choisissez : ![](assets/en/FormEditor/level2.png) > When several objects are superimposed, the **Ctrl+Shift+click** / **Command+Shift+click** shortcut can be used to select each object successively by going down a layer with each click. -Pour ordonner les différents plans, 4D va toujours de l’arrière-plan vers l’avant-plan. Par conséquent, le plan précédent fait reculer la sélection d’objets d’un plan vers l’arrière-plan du formulaire. Le plan suivant fait avancer la sélection d’objets d’un plan vers l’avant-plan du formulaire. +When ordering different levels, 4D always goes from the background to the foreground. As a result, the previous level moves the selection of objects one level towards the background. The next level moves the selection one level towards the foreground of the form. -### Ordre de saisie des données +### Data entry order -L’ordre de saisie est l’ordre dans lequel les champs, les sous-formulaires et les autres objets actifs sont sélectionnés lorsque vous appuyez sur la touche **Tabulation** ou **Retour chariot** dans un formulaire. Il est possible de parcourir le formulaire dans le sens inverse de l’ordre de saisie en appuyant sur les touches **Maj+Tabulation** ou **Maj+Retour chariot**. +The data entry order is the order in which fields, subforms, and other active objects are selected as you hit the **Tab** or the **Carriage return** key in an input form. It is possible to move through the form in the opposite direction (reverse data entry order) by pressing the **Shift+Tab** or **Shift+Carriage** return keys. > You can change the entry order at runtime using the `FORM SET ENTRY ORDER` and `FORM GET ENTRY ORDER` commands. @@ -333,47 +333,47 @@ Every object that supports the focusable property is included in the data entry Setting the entry order for a JSON form is done with the [`entryOrder`](properties_JSONref.md) property. -Si vous ne spécifiez pas d’ordre de saisie personnalisé, 4D utilise par défaut le plan des objets comme ordre de saisie, dans le sens “arrière-plan vers premier plan.” Par défaut, l’ordre de saisie correspond donc à l’ordre de création des objets dans le formulaire. +If you don’t specify a custom entry order, by default 4D uses the layering of the objects to determine the entry order in the direction “background towards foreground.” The standard entry order thus corresponds to the order in which the objects were created in the form. -Dans certains formulaires, il est nécessaire de définir un ordre de saisie personnalisé. Ci-dessous par exemple, des champs supplémentaires relatifs à l’adresse ont été ajoutés après la création du formulaire. The resulting standard entry order thus becomes illogical and forces the user to enter the information in an awkward manner: +In some forms, a custom data entry order is needed. Below, for example, additional fields related to the address have been added after the creation of the form. The resulting standard entry order thus becomes illogical and forces the user to enter the information in an awkward manner: ![](assets/en/FormEditor/entryOrder1.png) -Il est dans ce cas nécessaire de personnaliser l’ordre de saisie afin de proposer une progression plus logique : +In cases such as this, a custom data entry order allows you to enter the information in a more logical order: ![](assets/en/FormEditor/entryOrder2.png) -#### Visualiser et modifier l’ordre de saisie +#### Viewing and changing the data entry order -Vous pouvez visualiser l’ordre de saisie courant soit à l’aide des badges “Ordre de saisie”, soit à l’aide du mode “Ordre de saisie”. En revanche, vous ne pouvez modifier l’ordre de saisie qu’en mode “Ordre de saisie”. +You can view the current entry order either using the “Entry order” shields, or by using the “Entry order” mode. However, you can only modify the entry order using the “Entry order” mode. -Ce paragraphe décrit la visualisation et la modification de l’ordre de saisie en mode “Ordre de saisie”. Pour plus d’informations sur la visualisation de l’ordre de saisie à l’aide des badges, reportez-vous au paragraphe [Using shields](#using-shields). +This paragraph describes viewing and modifying the entry order using the “Entry order” mode. For more information about viewing the entry order using shields, refer to [Using shields](#using-shields). -Pour visualiser ou modifier l’ordre de saisie : +To view or change the entry order: -1. Sélectionnez **Ordre de saisie** dans le menu **Formulaire** ou cliquez sur le bouton dans la barre d’outils de la fenêtre :

    ![](assets/en/FormEditor/zOrder.png)

    Le pointeur prend la forme d’un pointeur d’ordre, et 4D dessine une ligne qui permet de visualiser la séquence de l’ordre de saisie courant.

    Visualiser et modifier l’ordre de saisie sont les seules opérations que vous pouvez réaliser dans ce mode. +1. Choose **Entry Order** from the **Form** menu or click on the Entry Order button in the toolbar of the window:

    ![](assets/en/FormEditor/zOrder.png)

    The pointer turns into an entry order pointer and 4D draws a line in the form showing the order in which it selects objects during data entry.

    Viewing and changing the data entry order are the only actions you can perform until you click any tool in the Tools palette. -2. Pour changer l’ordre de saisie, placez le pointeur sur un objet, cliquez dessus et, tout en maintenant le bouton de la souris enfoncé, déplacez le pointeur vers l’objet qui doit le suivre dans l’ordre de saisie.

    ![](assets/en/FormEditor/entryOrder3.png)

    4D ajuste l’ordre de saisie en conséquence. +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. -3. Répétez l’étape 2 autant de fois que nécessaire pour obtenir le nouvel ordre de saisie. +3. Repeat step 2 as many times as necessary to set the data entry order you want. -4. Lorsque vous êtes satisfait de l’ordre de saisie, sélectionnez de nouveau la commande **Ordre de saisie** dans le menu **Formulaire**.

    4D retourne dans le mode de fonctionnement normal de l’éditeur de formulaires. +4. When you are satisfied with the data entry order, click any unselected tool in the toolbar or choose **Entry Order** from the **Form** menu.

    4D returns to normal operation of the Form editor. -> Seul l’ordre de saisie de la page courante du formulaire est affiché. Si le formulaire contient des objets saisissables sur la page 0 ou provenant d’un formulaire hérité, l’ordre de saisie par défaut est le suivant : Objets de la page zéro du formulaire hérité > Objets de la page 1 du formulaire hérité > Objets de la page zéro du formulaire ouvert > Objets de la page courante du formulaire ouvert. +> Only the entry order of the current page of the form is displayed. If the form contains enterable objects on page 0 or coming from an inherited form, the default entry order is as follows: Objects from page 0 of the inherited form > Objects from page 1 of the inherited form > Objects from page 0 of the open form > Objects from the current page of the open form. -#### Utiliser un groupe de saisie +#### Using a data entry group -Lorsque vous changez l’ordre de saisie, vous pouvez sélectionner un groupe d’objets dans le formulaire afin que l’ordre de saisie s’applique aux objets du groupe. Ceci vous permet de définir facilement l’ordre de saisie pour les formulaires dans lesquels les champs sont organisés en groupes et colonnes. +While you are changing the data entry order, you can select a group of objects in a form so that the standard data entry order applies to the objects within the group. This allows you to easily set the data entry order on forms in which fields are separated into groups or columns. -Pour créer un groupe de saisie : +To create a data entry group: -1. Sélectionnez **Ordre de saisie** dans le menu *Formulaire* ou cliquez sur le bouton dans la barre d’outils de la fenêtre. -2. Dessinez un rectangle de sélection autour des objets que vous souhaitez grouper pour la saisie. +1. Choose **Entry Order** from the *Form* menu or click the button in the toolbar. +2. Draw a marquee around the objects you want to group for data entry. -Lorsque vous relâchez le bouton de la souris, les objets contenus ou touchés par le rectangle suivent l’ordre de saisie par défaut. L’ordre de saisie des autres objets est réorganisé en conséquence. +When you release the mouse button, the objects enclosed or touched by the rectangle follow the standard data entry order. The data entry order for the remaining objects adjusts as necessary. -#### Exclure un objet de l’ordre de saisie +#### Excluding an object from the entry order By default, all objects that support the focusable property are included in the entry order. To exclude an object from the entry order: @@ -402,8 +402,8 @@ Select one of the following preview modes from the menu: | Toolbar Icon | CSS Preview Mode | Description | | ------------------------------------ | ---------------- | ------------------------------------------------------------------------------------------------------------- | -| ![](assets/en/FormEditor/cssNo.png) | Aucun | No CSS values are applied in the form and no CSS values or icons displayed in the Property List. | -| ![](assets/en/FormEditor/cssWin.png) | Sous Windows | CSS values for Windows platform are applied in the form. CSS values and icons displayed in the Property List. | +| ![](assets/en/FormEditor/cssNo.png) | None | No CSS values are applied in the form and no CSS values or icons displayed in the Property List. | +| ![](assets/en/FormEditor/cssWin.png) | Windows | CSS values for Windows platform are applied in the form. CSS values and icons displayed in the Property List. | | ![](assets/en/FormEditor/cssMac.png) | macOS | CSS values for macOS platform are applied in the form. CSS values and icons displayed in the Property List. | > If a font size too large for an object is defined in a style sheet or JSON, the object will automatically be rendered to accommodate the font, however the size of the object will not be changed. @@ -434,7 +434,7 @@ An attribute value defined in a style sheet can be overridden in the JSON form d #### Property List CSS Icons -| Icône | Description | +| Icon | Description | | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | ![](assets/en/FormEditor/cssIcon.png) | Indicates that an attribute value has been defined in a style sheet | | ![](assets/en/FormEditor/cssImportant.png) | Indicates that an attribute value has been defined in a style sheet with the `!important` declaration | @@ -442,52 +442,52 @@ An attribute value defined in a style sheet can be overridden in the JSON form d -## Création de list box +## List Box Builder -Vous pouvez créer rapidement de nouvelles list box de type sélection d'entités avec le **générateur de list box**. La nouvelle list box peut être utilisée immédiatement ou elle peut être modifiée via l'éditeur de formulaires. +You can create new entity selection list boxes quickly with the **List box builder**. The new list box can be used immediately or it can be edited via the Form Editor. -Le générateur de list box vous permet de créer et de remplir des list box de type sélection d'entités en quelques opérations simples. +The List box builder lets you create and fill entity selection list boxes in a few simple operations. -### Utilisation du générateur de list box +### Using the List Box Builder -1. Dans la barre d'outils de l'éditeur de formulaire, cliquez sur l'icône du générateur de zone de liste : +1. In the Form Editor toolbar, click on the List box builder icon: ![](assets/en/FormEditor/listboxBuilderIcon.png) - Le générateur de list box s'affiche : + The List box builder is displayed: ![](assets/en/FormEditor/listboxBuilder.png) -2. Sélectionnez une table dans la liste déroulante **Table** : +2. Select a table from the **Table** dropdown list: ![](assets/en/FormEditor/listboxBuilderTable.png) -3. Sélectionnez les champs de la list box dans la zone **Champs** : +3. Select the fields for the list box in the **Fields** area: ![](assets/en/FormEditor/listboxBuilderFields.png) - Par défaut, tous les champs sont sélectionnés. Vous pouvez sélectionner ou désélectionner les champs individuellement ou utiliser **Ctrl+clic** (Windows) ou **Cmd+clic** (macOS) pour les sélectionner ou les désélectionner tous à la fois. + By default, all fields are selected. You can select or deselect fields individually or use **Ctrl+click** (Windows) or **Cmd+click** (macOS) to select or deselect them all at once. - Vous pouvez modifier l'ordre des champs via un glisser-déposer. + You can change the order of the fields by dragging them and dropping them. -4. L'expression qui permet de remplir les lignes de la list box à partir de la sélection d'entité est préremplie : +4. The expression to fill the list box's rows from the entity selection is prefilled: ![](assets/en/FormEditor/listboxBuilderExpression.png) - Cette expression peut être modifiée si nécessaire. + This expression can be changed if necessary. -5. En cliquant sur le bouton **Copier**, l'expression sera copiée pour charger tous les enregistrements en mémoire : +5. Clicking on the **Copy** button will copy the expression for loading all records into memory: ![](assets/en/FormEditor/listboxBuilderCode.png) -6. Cliquez sur le bouton **Créer un widget** pour créer la list box. +6. Click the the **Build widget** button to create the list box. ![](assets/en/FormEditor/listboxBuilderBuild.png) -La list box finale : +The final list box: ![](assets/en/FormEditor/listboxBuilderListbox.png) @@ -499,261 +499,261 @@ La list box finale : -## Badges +## Shields -L’éditeur de formulaires 4D permet d’utiliser des badges afin de faciliter la visualisation des propriétés des objets. Ils se trouvent dans la barre d'outils du formulaire : +The 4D Form Editor uses shields to make viewing object properties easier. You can find them on the form toolbar: ![](assets/en/FormEditor/shields.png) -Le principe de cette fonction est le suivant : chaque badge est associé à une propriété (par exemple **Vues**, signifiant que l'objet “est dans la vue courante”). Lorsque vous activez un badge, 4D affiche une petite icône (un badge) en haut à gauche de chaque objet du formulaire auquel s’applique la propriété. +This function works as follows: Each shield is associated with a property (for example, **Views**, which means the object “is in the current view”). When you activate a shield, 4D displays a small icon (shield) in the upper left of each object of the form where the property is applied. ![](assets/en/FormEditor/shield.png) -### Utilisation des badges +### Using shields -Pour activer un badge, cliquez sur l'icône *badge* jusqu’à ce que le badge souhaité soit sélectionné. Vous pouvez également cliquer sur la partie droite du bouton et sélectionner directement le type de badge à afficher dans le menu associé : +To activate a shield, click the *Shield* icon from the toolbar until the desired shield is selected. You can also click on the right side of the button and select the type of shield to display directly in the associated menu: -Pour ne pas afficher de badges, choisissez la ligne **Pas de badges** dans le menu de sélection. -> Vous pouvez définir les badges à afficher par défaut dans la Préférences de l’application. +If you don't want to display shields, select **No Shields** in the selection menu. +> You can set which shields to display by default on the Forms Page of the application Preferences. -### Description du badge +### Shield descriptions -Voici la description de chaque type de badge : +Here is a description of each type of shield: -| Icône | Nom | Est affiché... | -| -------------------------------------------- | ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------- | -| ![](assets/en/FormEditor/objectMethod.png) | Méthode objet | Pour les objets auxquels une méthode objet est associée | -| ![](assets/en/FormEditor/standardAction.png) | Action standard | Pour les objets auxquels une action standard est associée | -| ![](assets/en/FormEditor/resizing.png) | Redimensionnement | Pour les objets disposant d’au moins une propriété de redimensionnement, indique la combinaison de propriétés courante | -| ![](assets/en/FormEditor/entryOrder.png) | Ordre de saisie | Pour les objets saisissables, indique le numéro d’ordre de saisie | -| ![](assets/en/FormEditor/viewNumber.png) | Vue courante | Pour tous les objets de la vue courante | -| ![](assets/en/FormEditor/cssShield.png) | [Feuille de style](stylesheets.html) | Pour les objets avec une ou plusieurs valeurs d'attribut remplacées par une feuille de style. | -| ![](assets/en/FormEditor/filter.png) | Filtre | Pour les objets saisissables auxquels un filtre de saisie est associé | -| ![](assets/en/FormEditor/helpTip.png) | Infobulle | Pour les objets auxquels une infobulle (message d’aide) est associée | -| ![](assets/en/FormEditor/localized.png) | Localisé | Pour les objets dont le libellé provient d’une référence (libellé débutant par “:”). La référence peut être de type ressource (STR#) ou XLIFF | -| ![](assets/en/FormEditor/noShields.png) | Pas de badge | Aucun badge n’apparaît | +| Icon | Name | Is displayed ... | +| -------------------------------------------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | +| ![](assets/en/FormEditor/objectMethod.png) | Object Method | For objects with an associated object method | +| ![](assets/en/FormEditor/standardAction.png) | Standard Action | For objects with an associated standard action | +| ![](assets/en/FormEditor/resizing.png) | Resizing | For objects with at least one resizing property, indicates the combination of current properties | +| ![](assets/en/FormEditor/entryOrder.png) | Entry Order | For enterable objects, indicates the number of entry order | +| ![](assets/en/FormEditor/viewNumber.png) | Current View | For all objects in the current view | +| ![](assets/en/FormEditor/cssShield.png) | [Style Sheet](stylesheets.html) | For objects with one or more attribute values overridden by a style sheet. | +| ![](assets/en/FormEditor/filter.png) | Filter | For enterable objects with an associated entry filter | +| ![](assets/en/FormEditor/helpTip.png) | Help Tip | For objects with an associated tip | +| ![](assets/en/FormEditor/localized.png) | Localized | For objects whose label comes from a reference (label beginning with “:”). The reference can be of the resource (STR#) or XLIFF type | +| ![](assets/en/FormEditor/noShields.png) | No Shields | No shields appear | -## Vues +## Views -L'éditeur de formulaires 4D vous permet de créer des formulaires complexes en distribuant des objets de formulaire entre des vues séparées qui peuvent ensuite être masquées ou affichées selon les besoins. +The 4D Form Editor enables you to build complex forms by distributing form objects among separate views that can then be hidden or shown as needed. -Par exemple, vous pouvez répartir les objets par type (champs, variables, objets statiques, etc.). Tout type d'objet formulaire, y compris les sous-formulaires et les zones de plug-in, peut être inclus dans les vues. +For example, you can distribute objects according to type (fields, variables, static objects, etc.). Any type of form object, including subforms and plug-in areas, can be included in views. -Il n'y a pas de limite au nombre de vues par formulaire. Vous pouvez créer autant de vues différentes que nécessaire. De plus, chaque vue peut être affichée, masquée et/ou verrouillée. +There is no limit on the number of views per form. You can create as many different views as you need. Additionally, each view can be displayed, hidden, and/or locked. -Les vues sont gérées via à la palette de vues. +View management is handled via the View palette. ![](assets/en/FormEditor/viewEditor.png) -### Accéder à la palette de vues +### Accessing the View palette -Il existe trois façons d'accéder à la palette de vues : +There are three ways to access the View palette: -* **Barre d'outils** : cliquez sur l'icône de Vues dans la barre d'outils de l'éditeur de formulaires. (Cette icône apparaît en gris lorsqu'au moins un objet appartient à une vue autre que la vue par défaut.) +* **Toolbar**: Click on the Views icon in the Form Editor toolbar. (This icon appears gray when at least one object belongs to a view other than the default view.) - | Vue par défaut uniquement | Avec des vues supplémentaires | + | Default view only | With additional views | |:----------------------------------------------------:|:--------------------------------------------------:| | ![](assets/en/FormEditor/icon.png "No views in use") | ![](assets/en/FormEditor/icon2.png "Views in use") | -* **Menu contextuel** (formulaire ou objet) : faites un clic droit n'importe où dans l'éditeur de formulaires ou sur un objet, puis sélectionnez **Vue courante** +* **Context menu** (form or object): Right-click anywhere in the Form Editor or an object, and select **Current View** ![](assets/en/FormEditor/contextMenu.png) -La vue courante est indiquée par une coche (par exemple, "Adresse professionnelle" dans l'image ci-dessus) +The current view is indicated with a check mark (*e.g.*, "Work Address" in the image above) -* **Menu Formulaire** : cliquez sur le menu **Formulaire** et sélectionnez **Afficher la liste** +* **Form menu**: Click on the **Form** menu and select **View List** ![](assets/en/FormEditor/formMenu.png) -### Avant de commencer +### Before you begin -Voici quelques éléments importants à connaitre avant de commencer à travailler avec les vues : +Here are a few important things to know before you start working with views: -* **Contexte d’utilisation** : les vues sont un outil purement graphique, utilisable uniquement dans l’éditeur de formulaires ; il n’est pas possible d’accéder aux vues par programmation ou en mode Application. +* **Context of use**: Views are a purely graphic tool which can only be used in the Form Editor; you cannot access views programmatically or in the Application environment. -* **Vues et pages** : Les objets d’une même vue peuvent appartenir à des pages différentes d’un formulaire ; seuls les objets de la page courante (et de la page 0 si elle est visible) peuvent être affichés, quelle que soit la configuration des vues. +* **Views and pages**: Objects of the same view can belong to different form pages; only objects of the current page (and of page 0 if it is visible) can be displayed, regardless of the view configuration. -* **Vues et plans** : Les vues sont indépendantes des plans des objets, il n’y a pas de hiérarchie d’affichage entre les différentes vues. +* **Views and levels**: Views are independent of object levels; there is no display hierarchy among different views. -* **Vues et groupes** : Seuls les objets appartenant à la vue courante peuvent être groupés. +* **Views and groups**: Only objects belonging to the current view can be grouped. -* **Vues courantes et par défaut** : la vue par défaut est la première vue d'un formulaire et ne peut pas être supprimée; la vue courante est la vue en cours de modification et le nom est affiché en gras. +* **Current and Default** views: The Default view is the first view of a form and cannot be deleted; the Current view is the view that is being edited and the name is displayed in bold text. -### Gestion des vues +### Managing views -#### Créer des vues +#### Creating views -Tout objet créé dans un formulaire est placé dans la première vue ("Vue 1") du formulaire. La première vue 1 est **toujours** la vue par défaut, indiquée par (par défaut) après le nom. Le nom de la vue peut être modifié (voir [Renommer les vues](#renaming-views)), mais il demeure la vue par défaut. +Any object created in a form is placed in the first view ("View 1") of the form. The first view is **always** the default view, indicated by (Default) after the name. The view's name can be changed (see [Renaming views](#renaming-views)), however it remains the default view. ![](assets/en/FormEditor/createView.png) -Il existe deux façons d'ajouter des vues supplémentaires : +There are two ways to add additional views: -* Cliquez sur le bouton **Ajouter une nouvelle vue** en bas de la palette Vue : +* Click on the **Add a new view** button at the bottom of the View palette: ![](assets/en/FormEditor/addView.png) -* Faites un clic droit sur une vue existante et sélectionnez **Insérer une vue** : +* Right-click on an existing view and select **Insert view**: ![](assets/en/FormEditor/addView2.png) -Il n'y a pas de limitation du nombre de vues. +There is no limitation on the number of views. -#### Renommer des vues +#### Renaming views -Par défaut, les vues sont nommées "Vue" + le numéro de vue, mais vous pouvez modifier ces noms pour améliorer la lisibilité et mieux répondre à vos besoins. +By default views are named as "View" + the view number, however you can change these names to improve readability and better suit your needs. -Pour renommer une vue, vous pouvez soit : +To rename a view, you can use either: -* Double-cliquer directement sur le nom de la vue (dans ce cas, la vue est sélectionnée). Le nom devient alors éditable : +* Double-click directly on the view name (the selected view in this case). The name then becomes editable: ![](assets/en/FormEditor/rename.png) -* Faire un clic droit sur le nom de la vue. Le nom devient alors éditable : +* Right-click on the view name. The name then becomes editable: ![](assets/en/FormEditor/rename2.png) -#### Réordonner les vues +#### Reordering views -Vous pouvez modifier l'ordre d'affichage des vues en les faisant glisser/déposer dans la palette des vues. +You can change the display order of views by dragging/dropping them within the View palette. -A noter que la vue par défaut ne change pas : +Note that the Default view does not change: ![](assets/en/FormEditor/reorderView.png) -#### Supprimer des vues +#### Deleting views -Pour renommer une vue, vous pouvez soit : +To rename a view, you can use either: -* Cliquer sur le bouton **Supprimer la vue sélectionnée** en bas de la palette des vues : +* Click on the **Delete the selected view** button at the bottom of the View palette: ![](assets/en/FormEditor/deleteView.png) -* Faire un clic droit sur le nom de la vue et sélectionner **Supprimer la vue** : +* Right-click on the view name, and select **Delete View**: ![](assets/en/FormEditor/deleteView2.png) -> Si une vue est supprimée, tous les objets qu'elle contient sont automatiquement déplacés vers la vue par défaut. +> If a view is deleted, any objects in it are automatically moved to the Default view. -### Utilisation des vues +### Using views -Une fois que les vues sont créées, vous pouvez utiliser la palette des vues pour : +Once views are created, you can use the View palette to: -* Ajouter un objet aux vues, -* Déplacer des objets d'une vue à une autre, -* Sélectionner tous les objets d'une même vue en un seul clic, -* Afficher ou masquer des objets pour chaque vue, -* Verrouiller les objets d'une vue. +* Add object to views, +* Move objects from one view to another, +* Select all objects of the same view in a single click, +* Display or hide objects for each view, +* Lock the objects of a view. -#### Ajouter des objets aux vues +#### Adding objects to views -Un objet ne peut appartenir qu’à une seule vue. +An object can only belong to a single view. -Pour créer un objet dans une autre vue, sélectionnez simplement la vue dans la palette des vues (avant de créer l'objet) en cliquant sur son nom (une icône Modifier est affichée pour la [Vue courante](#before-you-begin) et le nom apparaît en gras) : +To create an object in another view, simply select the view in the View palette (prior to creating the object) by clicking its name (an Edit icon is displayed for the [Current view](#before-you-begin) and the name appears in bold text): ![](assets/en/FormEditor/addObject.png) -#### Déplacer des objets entre les vues +#### Moving objects between views -Il est également possible de déplacer un ou plusieurs objets d'une vue à une autre. Dans le formulaire, sélectionnez le ou les objets dont vous souhaitez modifier la vue. La liste des vues indique, à l'aide d'un symbole, la vue à laquelle appartient la sélection : +It's also possible to move one or more objects from one view to another. In the form, select the object(s) whose view you wish to change. The view list indicates, using a symbol, the view to which the selection belongs: ![](assets/en/FormEditor/symbol.png) -> La sélection peut contenir plusieurs objets appartenant à différentes vues. +> The selection can contain several objects belonging to different views. -Sélectionnez simplement la vue de destination, faites un clic droit puis sélectionnez **Déplacer vers** : +Simply select the destination view, right-click, and select **Move to**: ![](assets/en/FormEditor/moveObject.png) -OU +OR -Sélectionnez la vue de destination de la sélection et cliquez sur le bouton **Déplacer vers** en bas de la palette des vues : +Select the destination view of the selection and click **Move to** button at the bottom of the View palette: ![](assets/en/FormEditor/moveObject3.png) -La sélection est ensuite placée dans la nouvelle vue : +The selection is then placed in the new view: ![](assets/en/FormEditor/objNewView.png) -Vous pouvez également déplacer un objet vers une autre vue via le menu contextuel de l'objet. Faites un clic droit sur l'objet, sélectionnez **Déplacer vers la vue** puis sélectionnez une vue dans la liste de vues disponibles : +You can also move an object to another view via the object's context menu. Right-click on the object, select **Move to view**, and select a view from the list of available views: ![](assets/en/FormEditor/moveObject2.png) -> La [vue courante](#before-you-begin) est affichée en texte gras. +> The [Current view](#before-you-begin) is shown in bold text. -#### Sélectionner tous les objets d’une vue +#### Select all objects of a view -Vous pouvez sélectionner dans la page courante du formulaire tous les objets appartenant à une même vue. Cette fonction est utile pour appliquer des modifications globales à un ensemble d’objets. +You can select all objects belong to the same view in the current page of the form. This function is useful for applying global changes to a set of objects. -Pour cela, faites un clic droit sur la vue dans laquelle vous souhaitez sélectionner tous les objets et cliquez sur le bouton **Tout sélect. dans vue**: +To do this, right-click on the view in which you wish to select all the objects, click on **Select All**: ![](assets/en/FormEditor/selectAll.png) -Vous pouvez également utiliser le bouton situé en dessous de la palette des vues : +You can also use the button at the bottom of the View palette: ![](assets/en/FormEditor/selectAll2.png) -#### Afficher ou masquer les objets d’une vue +#### Show or hide objects of a view -Vous pouvez à tout moment afficher ou masquer les objets d’une vue dans la page courante du formulaire. Cette fonction permet par exemple de se concentrer sur certains objets lors de la modification du formulaire. +You can show or hide objects belonging to a view at any time in the form's current page. This way you can focus on certain objects when editing the form, for example. -Par défaut, toutes les vues sont affichées, comme l’indique l’icône en regard de chaque vue dans la palette des vues: +By default, all views are shown, as indicated by the *Show/Hide* icon: ![](assets/en/FormEditor/showHide.png) -Pour masquer une vue, cliquez sur cette icône. Elle est alors grisée et les objets de la vue correspondante ne sont plus affichés dans le formulaire : +To hide a view, click the *Show/Hide* icon. It is then dimmed and objects of the corresponding view are no longer shown in the form: ![](assets/en/FormEditor/hidden.png) -> Il n’est pas possible de masquer la [vue courante](#before-you-begin). +> The [Current view](#before-you-begin) cannot be hidden. -Pour afficher une vue masquée, il suffit de la sélectionner ou de cliquer de nouveau sur l’icône de visualisation. +To show a view that is hidden, simply select it or click on the *Show/Hide* icon for that view. -#### Verrouiller les objets d’une vue +#### Locking objects of a view -Vous pouvez verrouiller les objets d’une vue. Cela empêche leur sélection, leur modification ou leur suppression dans le formulaire. Une fois verrouillé, un objet ne peut pas être sélectionné par un clic, un rectangle de sélection ou la commande **Sélectionner objets de même type** du menu contextuel. Cette fonction est utile pour éviter les erreurs de manipulation. +You can lock the objects of a view. This prevents them from being selected, changed, or deleted from the form. Once locked, an object cannot be selected by a click, a rectangle, or the **Select Similar Objects** command of the context menu. This function is useful for preventing handling errors. -Par défaut, toutes les vues sont déverrouillées, comme l’indique l’icône en regard de chaque vue dans la palette des vues: +By default, all views are unlocked, as indicated by the *Lock/Unlock* icon next to each view: ![](assets/en/FormEditor/lockUnlock.png) -Pour verrouiller les objets d’une vue, cliquez sur cette icône. Le cadenas est alors refermé, ce qui indique que la vue est verrouillée : +To lock the objects of a view, click the *Lock/Unlock* icon. The padlock is shut, which means that the view is now locked: ![](assets/en/FormEditor/locked.png) -> Il n’est pas possible de verrouiller la [vue courante](#before-you-begin). +> The [Current view](#before-you-begin) cannot be locked. -Pour déverrouiller une vue, il suffit de la sélectionner ou de cliquer à nouveau sur l’icône de verrouillage. +To unlock a view that is locked, simply select it or click on the *Lock/Unlock* icon for that view. ## Zoom -Il est possible de zoomer dans le formulaire courant. Vous pouvez passer en mode “Zoom” soit en cliquant sur l'icône de loupe, soit en cliquant directement sur la barre correspondant à l’échelle désirée dans la barre d’outils de la fenêtre (les paliers d’affichage sont 50%, 100%, 200%, 400% et 800%) : +You can zoom in the current form. Switch to “Zoom” mode by clicking on the magnifying glass icon or clicking directly on the desired percentage bar (50%, 100%, 200%, 400% and 800%): ![](assets/en/FormEditor/zoom.png) -* Lorsque vous cliquez sur le bouton loupe, le curseur prend la forme d’une loupe. Pour augmenter le pourcentage d’affichage d’un palier, cliquez dans le formulaire. Pour réduire le pourcentage d’affichage d’un palier, appuyez sur la touche Majuscule et cliquez dans le formulaire. -* Lorsque vous cliquez sur une barre de pourcentage, l’affichage est immédiatement modifié. +* When you click on the magnifying glass, the cursor changes into one. You can then click in the form to increase the display or hold down Shift and click to reduce the display percentage. +* When you click on a percentage bar, the display is immediately modified. -En mode Zoom, toutes les fonctions de l’éditeur de formulaires restent disponibles(*). +In Zoom mode, all Form editor functions remain available(*). -(*) Pour des raisons techniques, il n'est toutefois pas possible de sélectionner d'élément de list box (en-tête, colonne ou pied) lorsque l'éditeur de formulaires est en mode Zoom. +(*) For technical reasons, it is not possible to select list box elements (headers, columns, footers) when the Form editor is in Zoom mode. From e0f23edc8eb6678344ff69126a61cecfb23d9689 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:17 +0100 Subject: [PATCH 071/311] New translations forms.md (French) --- .../translated_docs/fr/FormEditor/forms.md | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/website/translated_docs/fr/FormEditor/forms.md b/website/translated_docs/fr/FormEditor/forms.md index a338bcff0948b5..dda91548bc3313 100644 --- a/website/translated_docs/fr/FormEditor/forms.md +++ b/website/translated_docs/fr/FormEditor/forms.md @@ -20,7 +20,7 @@ You can add or modify 4D forms using the following elements: - **4D Developer interface:** Create new forms from the **File** menu or the **Explorer** window. - **Form Editor**: Modify your forms using the **[Form Editor](FormEditor/formEditor.md)**. -- **JSON code:** Create and design your forms using JSON and save the form files at the [appropriate location](Project/architecture.md#sources-folder). Exemple : +- **JSON code:** Create and design your forms using JSON and save the form files at the [appropriate location](Project/architecture.md#sources-folder). Example: ``` { @@ -82,7 +82,7 @@ There are two categories of forms: Typically, you select the form category when you create the form, but you can change it afterwards. -## Pages formulaire +## Form pages Each form has is made of at least two pages: @@ -93,7 +93,7 @@ You can create multiple pages for an input form. If you have more fields or vari - Place the most important information on the first page and less important information on other pages. - Organize each topic on its own page. -- Réduir ou éliminer le défilement pendant la saisie des données en définissant [l'ordre de saisie](../FormEditor/formEditor.html#data-entry-order). +- Reduce or eliminate scrolling during data entry by setting the [entry order](../FormEditor/formEditor.html#data-entry-order). - Provide space around the form elements for an attractive screen design. Multiple pages are a convenience used for input forms only. They are not for printed output. When a multi-page form is printed, only the first page is printed. @@ -103,35 +103,35 @@ There are no restrictions on the number of pages a form can have. The same field A multi-page form has both a background page and several display pages. Objects that are placed on the background page may be visible on all display pages, but can be selected and edited only on the background page. In multi-page forms, you should put your button palette on the background page. You also need to include one or more objects on the background page that provide page navigation tools for the user. -## Formulaires hérités +## Inherited Forms 4D forms can use and be used as "inherited forms," meaning that all of the objects from *Form A* can be used in *Form B*. In this case, *Form B* "inherits" the objects from *Form A*. -Les références à un formulaire hérité est toujours active : si un élément d'un formulaire hérité est modifié (par exemple le style des boutons), tous les formulaires qui l’utilisent seront automatiquement modifiés. +References to an inherited form are always active: if an element of an inherited form is modified (button styles, for example), all forms using this element will automatically be modified. -Tous les formulaires (formulaires table et formulaires projet) peuvent être désignés comme un formulaire hérité. Cependant, les éléments qu'ils contiennent doivent être compatibles avec une utilisation dans différentes tables de base de données. +All forms (table forms and project forms) can be designated as an inherited form. However, the elements they contain must be compatible with use in different database tables. -A l’exécution du formulaire, les objets sont chargés et combinés dans l’ordre suivant : +When a form is executed, the objects are loaded and combined in the following order: -1. Page zéro du formulaire hérité -2. Page 1 du formulaire hérité -3. Page zéro du formulaire ouvert -4. Page courante du formulaire ouvert. +1. Page zero of the inherited form +2. Page 1 of the inherited form +3. Page zero of the open form +4. Current page of the open form. -Cet ordre détermine [l'ordre de saisie](../FormEditor/formEditor.html#data-entry-order) par défaut des objets dans le formulaire. +This order determines the default [entry order](../FormEditor/formEditor.html#data-entry-order) of objects in the form. -> Seules les pages 0 et 1 du formulaire hérité peuvent apparaître dans les autres formulaires. +> Only pages 0 and 1 of an inherited form can appear in other forms. -Les propriétés ainsi que la méthode d’un formulaire ne sont pas prises en compte lorsque celui-ci est utilisé comme formulaire hérité. En revanche, les méthodes des objets qu’il contient sont appelées. +The properties and method of a form are not considered when that form is used as an inherited form. On the other hand, the methods of objects that it contains are called. -Pour définir un formulaire hérité, les propriétés de [Inherited Form Name](properties_FormProperties.md#inherited-form-name) et [Inherited Form Table](properties_FormProperties.md#inherited-form-table) (pour les formulaires table) doivent être définies dans le formulaire qui héritera de quelque chose issue d'un autre formulaire. +To define an inherited form, the [Inherited Form Name](properties_FormProperties.md#inherited-form-name) and [Inherited Form Table](properties_FormProperties.md#inherited-form-table) (for table form) properties must be defined in the form that will inherit something from another form. A form can inherit from a project form, by setting the [Inherited Form Table](properties_FormProperties.md#inherited-form-table) property to **\** in the Property List (or " " in JSON). To stop inheriting a form, select **\** in the Property List (or " " in JSON) for the [Inherited Form Name](properties_FormProperties.md#inherited-form-name) property. -> Il est possible de définir un formulaire hérité dans un formulaire qui servira à son tour de formulaire hérité pour un troisième formulaire. La combinaison des objets s’effectue alors de manière récursive. 4D détecte les boucles récursives (par exemple si le formulaire [table1]form1 est défini comme formulaire hérité de [table1]form1, c’est-à-dire de lui-même) et interrompt le chaînage des formulaires. +> It is possible to define an inherited form in a form that will eventually be used as an inherited form for a third form. The combining of objects takes place in a recursive manner. 4D detects recursive loops (for example, if form [table1]form1 is defined as the inherited form of [table1]form1, in other words, itself) and interrupts the form chain. -## Propriétés prises en charge +## Supported Properties [Associated Menu Bar](properties_Menu.md#associated-menu-bar) - [Fixed Height](properties_WindowSize.md#fixed-height) - [Fixed Width](properties_WindowSize.md#fixed-width) - [Form Break](properties_Markers.md#form-break) - [Form Detail](properties_Markers.md#form-detail) - [Form Footer](properties_Markers.md#form-footer) - [Form Header](properties_Markers.md#form-header) - [Form Name](properties_FormProperties.md#form-name) - [Form Type](properties_FormProperties.md#form-type) - [Inherited Form Name](properties_FormProperties.md#inherited-form-name) - [Inherited Form Table](properties_FormProperties.md#inherited-form-table) - [Maximum Height](properties_WindowSize.md#maximum-height-minimum-height) - [Maximum Width](properties_WindowSize.md#maximum-width-minimum-width) - [Method](properties_Action.md#method) - [Minimum Height](properties_WindowSize.md#maximum-height-minimum-height) - [Minimum Width](properties_WindowSize.md#maximum-width-minimum-width) - [Pages](properties_FormProperties.md#pages) - [Print Settings](properties_Print.md#settings) - [Published as Subform](properties_FormProperties.md#published-as-subform) - [Save Geometry](properties_FormProperties.md#save-geometry) - [Window Title](properties_FormProperties.md#window-title) From 479100b527ce702e6dbc283d2be7973db84190d1 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:18 +0100 Subject: [PATCH 072/311] New translations onPrintingDetail.md (French) --- website/translated_docs/fr/Events/onPrintingDetail.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onPrintingDetail.md b/website/translated_docs/fr/Events/onPrintingDetail.md index e04039919ee5bf..7770c6c6afad20 100644 --- a/website/translated_docs/fr/Events/onPrintingDetail.md +++ b/website/translated_docs/fr/Events/onPrintingDetail.md @@ -3,7 +3,7 @@ id: onPrintingDetail title: On Printing Detail --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------- | | 23 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md) - [Input](FormObjects/input_overview.md) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Tab control](FormObjects/tabControl.md) | The form’s detail area is about to be printed | From 4e1ce11a81ba03731b90f761461377fe1c2eccb3 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:20 +0100 Subject: [PATCH 073/311] New translations onPlugInArea.md (French) --- website/translated_docs/fr/Events/onPlugInArea.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onPlugInArea.md b/website/translated_docs/fr/Events/onPlugInArea.md index 202d90d00e27b5..640b1bf8caede3 100644 --- a/website/translated_docs/fr/Events/onPlugInArea.md +++ b/website/translated_docs/fr/Events/onPlugInArea.md @@ -3,7 +3,7 @@ id: onPlugInArea title: Sur appel zone du plug in --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------------------------------ | ------------------------------------------------------------- | | 19 | Form - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) | An external object requested its object method to be executed | From 153bfbe103d7feef8b2445dbc5dca300c7372dc5 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:22 +0100 Subject: [PATCH 074/311] New translations onDoubleClicked.md (French) --- .../fr/Events/onDoubleClicked.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/website/translated_docs/fr/Events/onDoubleClicked.md b/website/translated_docs/fr/Events/onDoubleClicked.md index 37321a524ac976..c8ef29f842df33 100644 --- a/website/translated_docs/fr/Events/onDoubleClicked.md +++ b/website/translated_docs/fr/Events/onDoubleClicked.md @@ -3,7 +3,7 @@ id: onDoubleClicked title: Sur double clic --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------ | | 13 | [4D View Pro Area](FormObjects/viewProArea_overview.md) - [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Tab control](FormObjects/tabControl.md) | A double click occurred on an object | @@ -20,15 +20,15 @@ If both events are selected for an object, the `On Clicked` and then the `On Dou This event is generated when the user doubl-clicks anywhere on a 4D View Pro document. On this context, the [event object](overview.md#event-object) returned by the `FORM Event` command contains: -| Propriété | Type | Description | -| ----------- | ----------- | ------------------------------ | -| code | entier long | 13 | -| description | Texte | "On Double Clicked" | -| objectName | Texte | 4D View Pro area name | -| sheetName | Texte | Name of the sheet of the event | -| range | object | Cell range | +| Property | Type | Description | +| ----------- | ------- | ------------------------------ | +| code | longint | 13 | +| description | text | "On Double Clicked" | +| objectName | text | 4D View Pro area name | +| sheetName | text | Name of the sheet of the event | +| range | object | Cell range | -#### Exemple +#### Example ```4d If(FORM Event.code=On Double Clicked) From b6cb954d98e213d86f8157dfcae18e29475229b9 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:25 +0100 Subject: [PATCH 075/311] New translations onLoadRecord.md (French) --- website/translated_docs/fr/Events/onLoadRecord.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onLoadRecord.md b/website/translated_docs/fr/Events/onLoadRecord.md index d3ecfc68df0f86..4adf64d7543572 100644 --- a/website/translated_docs/fr/Events/onLoadRecord.md +++ b/website/translated_docs/fr/Events/onLoadRecord.md @@ -3,9 +3,9 @@ id: onLoadRecord title: Sur chargement ligne --- -| Code | Peut être appelé par | Définition | -| ---- | -------------------- | ------------------------------------------------------------------- | -| 40 | Formulaire | During user entry in list, a record is loaded and a field is edited | +| Code | Can be called by | Definition | +| ---- | ---------------- | ------------------------------------------------------------------- | +| 40 | Form | During user entry in list, a record is loaded and a field is edited | ## Description From def92edef833cbea042e327cfb8c29962d41ef00 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:27 +0100 Subject: [PATCH 076/311] New translations onDragOver.md (French) --- website/translated_docs/fr/Events/onDragOver.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/Events/onDragOver.md b/website/translated_docs/fr/Events/onDragOver.md index 1df5eb3b8ddf1a..ac1f3264af1112 100644 --- a/website/translated_docs/fr/Events/onDragOver.md +++ b/website/translated_docs/fr/Events/onDragOver.md @@ -3,7 +3,7 @@ id: onDragOver title: Sur glisser --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ | | 21 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Tab control](FormObjects/tabControl.md) | Data could be dropped onto an object | @@ -26,5 +26,5 @@ The `On Drag Over` event is the means by which you control the first phase of a The code handling an `On Drag Over` event should be short and execute quickly, because that event is sent repeatedly to the current destination object, due to the movements of the mouse. -#### Voir également +#### See also [`Sur début survol`](onBeginDragOver.md) \ No newline at end of file From 18e000f3a3b6c30b064557fa84a05762d3e09d68 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:29 +0100 Subject: [PATCH 077/311] New translations onDrop.md (French) --- website/translated_docs/fr/Events/onDrop.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/Events/onDrop.md b/website/translated_docs/fr/Events/onDrop.md index a98c854be5b24e..10b471fc4b5645 100644 --- a/website/translated_docs/fr/Events/onDrop.md +++ b/website/translated_docs/fr/Events/onDrop.md @@ -3,7 +3,7 @@ id: onDrop title: Sur déposer --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ | | 16 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Tab control](FormObjects/tabControl.md) | Data has been dropped onto an object | @@ -16,5 +16,5 @@ This event is not sent to the object if the drag was not accepted during the [`O -#### Voir également +#### See also [`Sur début survol`](onBeginDragOver.md) \ No newline at end of file From 62e1a32e825ff504ee4d165686cee339435eaf9f Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:31 +0100 Subject: [PATCH 078/311] New translations onEndUrlLoading.md (French) --- website/translated_docs/fr/Events/onEndUrlLoading.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/Events/onEndUrlLoading.md b/website/translated_docs/fr/Events/onEndUrlLoading.md index c81f3db1961f5b..d709c273a971bb 100644 --- a/website/translated_docs/fr/Events/onEndUrlLoading.md +++ b/website/translated_docs/fr/Events/onEndUrlLoading.md @@ -3,9 +3,9 @@ id: onEndUrlLoading title: On End URL Loading --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------- | --------------------------------------------- | -| 49 | [Zone Web](FormObjects/webArea_overview.md) | All the resources of the URL have been loaded | +| 49 | [Web Area](FormObjects/webArea_overview.md) | All the resources of the URL have been loaded | ## Description From 92c592d46307f9d694c2ec9ca11c4bcdea6461a5 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:33 +0100 Subject: [PATCH 079/311] New translations onExpand.md (French) --- website/translated_docs/fr/Events/onExpand.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/Events/onExpand.md b/website/translated_docs/fr/Events/onExpand.md index 4316ad953c2406..1ed4b237d48d52 100644 --- a/website/translated_docs/fr/Events/onExpand.md +++ b/website/translated_docs/fr/Events/onExpand.md @@ -3,7 +3,7 @@ id: onExpand title: Sur déployer --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | -------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | | 44 | [Hierarchical List](FormObjects/list_overview.md#overview) - [List Box](FormObjects/listbox_overview.md) | An element of the hierarchical list or hierarchical list box has been expanded using a click or a keystroke | @@ -14,5 +14,5 @@ title: Sur déployer - [Hierarchical list boxes](FormObjects/listbox_overview.md#hierarchical-list-boxes): This event is generated when a row of the hierarchical list box is expanded. -### Voir également +### See also [Sur contracter](onCollapse.md) \ No newline at end of file From b1f1d2949ff77ec242a9d7271fef30160320c7a2 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:34 +0100 Subject: [PATCH 080/311] New translations onFooterClick.md (French) --- website/translated_docs/fr/Events/onFooterClick.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onFooterClick.md b/website/translated_docs/fr/Events/onFooterClick.md index a863e202ae7644..ce240164e27c7c 100644 --- a/website/translated_docs/fr/Events/onFooterClick.md +++ b/website/translated_docs/fr/Events/onFooterClick.md @@ -3,7 +3,7 @@ id: onFooterClick title: Sur clic pied --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | | 57 | [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) | A click occurs in the footer of a list box column | From caf1244dcad43429fbf8ee3a8b9b9063bc3352f6 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:36 +0100 Subject: [PATCH 081/311] New translations onGettingFocus.md (French) --- website/translated_docs/fr/Events/onGettingFocus.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onGettingFocus.md b/website/translated_docs/fr/Events/onGettingFocus.md index e49076ae6335cc..c86645d8b2e85f 100644 --- a/website/translated_docs/fr/Events/onGettingFocus.md +++ b/website/translated_docs/fr/Events/onGettingFocus.md @@ -3,7 +3,7 @@ id: onGettingFocus title: On getting focus --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- | | 15 | [4D View Pro Area](FormObjects/viewProArea_overview.md) - [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Stepper](FormObjects/stepper.md) - [Subform](FormObjects/subform_overview.md) - [Web area](FormObjects/webArea_overview.md) | A form object is getting the focus | From be7a850ba431d1982d6201c945e971339ea558a8 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:38 +0100 Subject: [PATCH 082/311] New translations onHeader.md (French) --- website/translated_docs/fr/Events/onHeader.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onHeader.md b/website/translated_docs/fr/Events/onHeader.md index 3ad80eaab9ce72..f77341d85b2841 100644 --- a/website/translated_docs/fr/Events/onHeader.md +++ b/website/translated_docs/fr/Events/onHeader.md @@ -3,7 +3,7 @@ id: onHeader title: Sur entête --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- | | 5 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form (list form only) - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Tab control](FormObjects/tabControl.md) | The form's header area is about to be printed or displayed. | From 20af92fba7e87fd7c932dd03832896d0f7c0fd7f Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:41 +0100 Subject: [PATCH 083/311] New translations onHeaderClick.md (French) --- .../fr/Events/onHeaderClick.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/website/translated_docs/fr/Events/onHeaderClick.md b/website/translated_docs/fr/Events/onHeaderClick.md index e0b5002b0e9af5..a0bdfca05c816e 100644 --- a/website/translated_docs/fr/Events/onHeaderClick.md +++ b/website/translated_docs/fr/Events/onHeaderClick.md @@ -3,7 +3,7 @@ id: onHeaderClick title: Sur clic entête --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | | 42 | [4D View Pro Area](FormObjects/viewProArea_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) | A click occurs in a column header | @@ -25,16 +25,16 @@ If the [Sortable](FormObjects/properties_Action.md#sortable) property is not sel This event is generated when the user clicks on a column or row header in a 4D View Pro document. In this context, the [event object](overview.md#event-object) returned by the `FORM Event` command contains: -| Propriété | Type | Description | -| ----------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------- | -| code | entier long | 42 | -| description | Texte | "On Header Click" | -| objectName | Texte | 4D View Pro area name | -| sheetName | Texte | Name of the sheet of the event | -| range | object | Cell range | -| sheetArea | entier long | The sheet location where the event took place:

  • 0: The crossing area between column number/letter headers (top left of the sheet)
  • 1: The column headers (area indicating the column numbers/letters)
  • 2: The row headers (area indicating the row numbers)
  • | +| Property | Type | Description | +| ----------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| code | longint | 42 | +| description | text | "On Header Click" | +| objectName | text | 4D View Pro area name | +| sheetName | text | Name of the sheet of the event | +| range | object | Cell range | +| sheetArea | longint | The sheet location where the event took place:
  • 0: The crossing area between column number/letter headers (top left of the sheet)
  • 1: The column headers (area indicating the column numbers/letters)
  • 2: The row headers (area indicating the row numbers)
  • | -#### Exemple +#### Example ```4d If(FORM Event.code=On Header Click) From ede32e27af72fe0d38fa61947a4eb6a8db83f0f5 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:43 +0100 Subject: [PATCH 084/311] New translations onLoad.md (French) --- website/translated_docs/fr/Events/onLoad.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onLoad.md b/website/translated_docs/fr/Events/onLoad.md index c9fe3362c0522f..0a803c759a9503 100644 --- a/website/translated_docs/fr/Events/onLoad.md +++ b/website/translated_docs/fr/Events/onLoad.md @@ -3,7 +3,7 @@ id: onLoad title: On Load --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | | 1 | [4D View Pro Area](FormObjects/viewProArea_overview.md) - [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Subform](FormObjects/subform_overview.md) - [Tab control](FormObjects/tabControl.md) - [Web Area](FormObjects/webArea_overview.md) | The form is about to be displayed or printed | @@ -17,11 +17,11 @@ All the objects of the form (from any page) whose `On Load` object event propert > The `On Load` and [`On Unload`](onUnload.md) events are generated for objects if they are enabled for both the objects and the form to which the objects belong. If the events are enabled for objects only, they will not occur; these two events must also be enabled at the form level. -### Sous-formulaire +### Subform The `On Load` event is generated when opening the subform (this event must also have been activated at the parent form level in order to be taken into account). The event is generated before those of the parent form. Also note that, in accordance with the operating principles of form events, if the subform is placed on a page other than page 0 or 1, this event will only be generated when that page is displayed (and not when the form is displayed). -### Voir également +### See also [`On Unload`](onUnload.md) \ No newline at end of file From a3d239eb584171ca20bb0e4053827376eb83a971 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:45 +0100 Subject: [PATCH 085/311] New translations onLongClick.md (French) --- .../translated_docs/fr/Events/onLongClick.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/website/translated_docs/fr/Events/onLongClick.md b/website/translated_docs/fr/Events/onLongClick.md index 24fa5a4818db50..46063597b2a71d 100644 --- a/website/translated_docs/fr/Events/onLongClick.md +++ b/website/translated_docs/fr/Events/onLongClick.md @@ -3,9 +3,9 @@ id: onLongClick title: Sur clic long --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ---------------------------------------- | ------------------------------------------------------------------------------------ | -| 39 | [Bouton](FormObjects/button_overview.md) | A button is clicked and the mouse button remains pushed for a certain length of time | +| 39 | [Button](FormObjects/button_overview.md) | A button is clicked and the mouse button remains pushed for a certain length of time | ## Description @@ -14,17 +14,17 @@ This event is generated when a button receives a click and the mouse button is h This event can be generated for the following button styles: -- [Barre d’outils](FormObjects/button_overview.md#toolbar) +- [Toolbar](FormObjects/button_overview.md#toolbar) - [Bevel](FormObjects/button_overview.md#bevel) -- [Bevel arrondi](FormObjects/button_overview.md#rounded-bevel) +- [Rounded Bevel](FormObjects/button_overview.md#rounded-bevel) - [OS X Gradient](FormObjects/button_overview.md#os-x-gradient) -- [OS X Texture](FormObjects/button_overview.md#os-x-textured) +- [OS X Textured](FormObjects/button_overview.md#os-x-textured) - [Office XP](FormObjects/button_overview.md#office-xp) -- [Aide](FormObjects/button_overview.md#help) -- [Rond](FormObjects/button_overview.md#circle) -- [Personnalisé](FormObjects/button_overview.md#custom) +- [Help](FormObjects/button_overview.md#help) +- [Circle](FormObjects/button_overview.md#circle) +- [Custom](FormObjects/button_overview.md#custom) This event is generally used to display pop-up menus in case of long button clicks. The [`On Clicked`](onClicked.md) event, if enabled, is generated if the user releases the mouse button before the "long click" time limit. -### Voir également +### See also [`Sur clic alternatif`](onAlternativeClick.md) \ No newline at end of file From 6cda06a8773ec6ec54b4cf92dea5a3227ee2a076 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:47 +0100 Subject: [PATCH 086/311] New translations onPageChange.md (French) --- website/translated_docs/fr/Events/onPageChange.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onPageChange.md b/website/translated_docs/fr/Events/onPageChange.md index bd7d72a9d83349..3770239bcb97d1 100644 --- a/website/translated_docs/fr/Events/onPageChange.md +++ b/website/translated_docs/fr/Events/onPageChange.md @@ -3,9 +3,9 @@ id: onPageChange title: Sur changement page --- -| Code | Peut être appelé par | Définition | -| ---- | -------------------- | --------------------------------------- | -| 56 | Formulaire | The current page of the form is changed | +| Code | Can be called by | Definition | +| ---- | ---------------- | --------------------------------------- | +| 56 | Form | The current page of the form is changed | ## Description From ea511ac6bd644d940520cee010516546aff0892c Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:49 +0100 Subject: [PATCH 087/311] New translations onLosingFocus.md (French) --- website/translated_docs/fr/Events/onLosingFocus.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onLosingFocus.md b/website/translated_docs/fr/Events/onLosingFocus.md index 9d94b10ab7f84d..6c220efb0a9bd1 100644 --- a/website/translated_docs/fr/Events/onLosingFocus.md +++ b/website/translated_docs/fr/Events/onLosingFocus.md @@ -3,7 +3,7 @@ id: onLosingFocus title: Sur perte focus --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | | 14 | [4D View Pro Area](FormObjects/viewProArea_overview.md) - [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Stepper](FormObjects/stepper.md) - [Subform](FormObjects/subform_overview.md) - [Web area](FormObjects/webArea_overview.md) | A form object is losing the focus | From 21ec370baf99dcc1c33f37b2a0159497a4fd9654 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:51 +0100 Subject: [PATCH 088/311] New translations onMenuSelected.md (French) --- website/translated_docs/fr/Events/onMenuSelected.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onMenuSelected.md b/website/translated_docs/fr/Events/onMenuSelected.md index 608e0183031cf5..cdcb510c49b3f0 100644 --- a/website/translated_docs/fr/Events/onMenuSelected.md +++ b/website/translated_docs/fr/Events/onMenuSelected.md @@ -3,9 +3,9 @@ id: onMenuSelected title: Sur menu sélectionné --- -| Code | Peut être appelé par | Définition | -| ---- | -------------------- | ------------------------------------------------------ | -| 18 | Formulaire | A menu item has been chosen in the associated menu bar | +| Code | Can be called by | Definition | +| ---- | ---------------- | ------------------------------------------------------ | +| 18 | Form | A menu item has been chosen in the associated menu bar | ## Description From 162629c0b3288d5b5a32e7eaf960b76907015f38 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:53 +0100 Subject: [PATCH 089/311] New translations onMouseEnter.md (French) --- website/translated_docs/fr/Events/onMouseEnter.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/Events/onMouseEnter.md b/website/translated_docs/fr/Events/onMouseEnter.md index db70c0143d1251..921ca04daa4781 100644 --- a/website/translated_docs/fr/Events/onMouseEnter.md +++ b/website/translated_docs/fr/Events/onMouseEnter.md @@ -3,7 +3,7 @@ id: onMouseEnter title: Sur début survol --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | | 35 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Tab control](FormObjects/tabControl.md) | The mouse cursor enters the graphic area of an object | @@ -21,7 +21,7 @@ Objects that are made invisible using the `OBJECT SET VISIBLE` command or the [V If the `On Mouse Enter` event has been checked for the form, it is generated for each form object. If it is checked for an object, it is generated only for that object. When there are superimposed objects, the event is generated by the first object capable of managing it that is found going in order from top level to bottom. -### Voir également +### See also - [`Sur survol`](onMouseMove.md) - [`Sur fin survol`](onMouseLeave.md) \ No newline at end of file From 4c69c703a90739ba6781b254d11ecee630e132bf Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:55 +0100 Subject: [PATCH 090/311] New translations onMouseLeave.md (French) --- website/translated_docs/fr/Events/onMouseLeave.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/Events/onMouseLeave.md b/website/translated_docs/fr/Events/onMouseLeave.md index da9471aae28032..0e9c67c23752be 100644 --- a/website/translated_docs/fr/Events/onMouseLeave.md +++ b/website/translated_docs/fr/Events/onMouseLeave.md @@ -3,7 +3,7 @@ id: onMouseLeave title: Sur fin survol --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | | 36 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Tab control](FormObjects/tabControl.md) | The mouse cursor leaves the graphic area of an object | @@ -21,7 +21,7 @@ Objects that are made invisible using the `OBJECT SET VISIBLE` command or the [V If the `On Mouse Leave` event has been checked for the form, it is generated for each form object. If it is checked for an object, it is generated only for that object. When there are superimposed objects, the event is generated by the first object capable of managing it that is found going in order from top level to bottom. -### Voir également +### See also - [`Sur survol`](onMouseMove.md) - [`Sur fin survol`](onMouseLeave.md) \ No newline at end of file From 1e7bdab21477862c51359a8636d73d36427a7deb Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:57 +0100 Subject: [PATCH 091/311] New translations onMouseMove.md (French) --- website/translated_docs/fr/Events/onMouseMove.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/Events/onMouseMove.md b/website/translated_docs/fr/Events/onMouseMove.md index 6a59622485b6b4..406a87374a9110 100644 --- a/website/translated_docs/fr/Events/onMouseMove.md +++ b/website/translated_docs/fr/Events/onMouseMove.md @@ -3,7 +3,7 @@ id: onMouseMove title: Sur survol --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | | 37 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Tab control](FormObjects/tabControl.md) | The mouse cursor moves at least one pixel OR a modifier key (Shift, Alt/Option, Shift Lock) was pressed | @@ -26,7 +26,7 @@ Objects that are made invisible using the `OBJECT SET VISIBLE` command or the [V If the `On Mouse Move` event has been checked for the form, it is generated for each form object. If it is checked for an object, it is generated only for that object. When there are superimposed objects, the event is generated by the first object capable of managing it that is found going in order from top level to bottom. -### Voir également +### See also - [`Sur début survol`](onMouseEnter.md) - [`Sur fin survol`](onMouseLeave.md) \ No newline at end of file From 2743753de90bebf4542a63d14abb347fe1a9a249 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:59 +0100 Subject: [PATCH 092/311] New translations onMouseUp.md (French) --- website/translated_docs/fr/Events/onMouseUp.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/Events/onMouseUp.md b/website/translated_docs/fr/Events/onMouseUp.md index 76761dd253b56b..a79ed6300ff914 100644 --- a/website/translated_docs/fr/Events/onMouseUp.md +++ b/website/translated_docs/fr/Events/onMouseUp.md @@ -3,7 +3,7 @@ id: onMouseUp title: On Mouse Up --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ----------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | | 2 | [Input](FormObjects/input_overview.md) of the `picture` [Type](FormObjects/properties_Object.md#type) | The user has just released the left mouse button in a Picture object | @@ -12,7 +12,7 @@ title: On Mouse Up The `On Mouse Up` event is generated when the user has just released the left mouse button while dragging in a picture input. This event is useful, for example, when you want the user to be able to move, resize or draw objects in a SVG area. -When the `On Mouse Up` event is generated, you can get the local coordinates where the mouse button was released. These coordinates are returned in the `MouseX` and `MouseY` System variables. Les coordonnées sont exprimées en pixels par rapport à l'angle supérieur gauche de l'image (0,0). +When the `On Mouse Up` event is generated, you can get the local coordinates where the mouse button was released. These coordinates are returned in the `MouseX` and `MouseY` System variables. The coordinates are expressed in pixels with respect to the top left corner of the picture (0,0). When using this event, you must also use the `Is waiting mouse up` command to handle cases where the "state manager" of the form is desynchronized, i.e. when the `On Mouse Up` event is not received after a click. This is the case for example when an alert dialog box is displayed above the form while the mouse button has not been released. For more information and an example of use of the `On Mouse Up` event, please refer to the description of the `Is waiting mouse up` command. From eeac2c5ed93d472f089686997c628b000f618847 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:35:01 +0100 Subject: [PATCH 093/311] New translations onOpenDetail.md (French) --- website/translated_docs/fr/Events/onOpenDetail.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onOpenDetail.md b/website/translated_docs/fr/Events/onOpenDetail.md index d45cab7ac8dfad..94f5cb038f4466 100644 --- a/website/translated_docs/fr/Events/onOpenDetail.md +++ b/website/translated_docs/fr/Events/onOpenDetail.md @@ -3,7 +3,7 @@ id: onOpenDetail title: Sur ouverture corps --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | -------------------------------------------------- | ------------------------------------------------------------------------------------------- | | 25 | Form - [List Box](FormObjects/listbox_overview.md) | The detail form associated with the output form or with the list box is about to be opened. | From e5ed6a926e16166530a24e9b4f168dd5abc72f8d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:35:03 +0100 Subject: [PATCH 094/311] New translations onOpenExternalLink.md (French) --- website/translated_docs/fr/Events/onOpenExternalLink.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onOpenExternalLink.md b/website/translated_docs/fr/Events/onOpenExternalLink.md index 474e997aab0c4b..120a009da05026 100644 --- a/website/translated_docs/fr/Events/onOpenExternalLink.md +++ b/website/translated_docs/fr/Events/onOpenExternalLink.md @@ -3,9 +3,9 @@ id: onOpenExternalLink title: On Open External Link --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------- | ---------------------------------------------- | -| 52 | [Zone Web](FormObjects/webArea_overview.md) | An external URL has been opened in the browser | +| 52 | [Web Area](FormObjects/webArea_overview.md) | An external URL has been opened in the browser | ## Description @@ -15,5 +15,5 @@ This event is generated when the loading of a URL was blocked by the Web area an You can find out the blocked URL using the `WA Get last filtered URL` command. -### Voir également +### See also [`On URL Filtering`](onUrlFiltering.md) \ No newline at end of file From c207e40bdc95011c1fc69e7b7f7e437d59617f5b Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:35:06 +0100 Subject: [PATCH 095/311] New translations onOutsideCall.md (French) --- website/translated_docs/fr/Events/onOutsideCall.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onOutsideCall.md b/website/translated_docs/fr/Events/onOutsideCall.md index f759867393d437..6f584430593139 100644 --- a/website/translated_docs/fr/Events/onOutsideCall.md +++ b/website/translated_docs/fr/Events/onOutsideCall.md @@ -3,9 +3,9 @@ id: onOutsideCall title: Sur appel extérieur --- -| Code | Peut être appelé par | Définition | -| ---- | -------------------- | -------------------------------------------- | -| 10 | Formulaire | The form received a `POST OUTSIDE CALL` call | +| Code | Can be called by | Definition | +| ---- | ---------------- | -------------------------------------------- | +| 10 | Form | The form received a `POST OUTSIDE CALL` call | ## Description From 278b97702dfe182f617ec49a593e7b06797a859f Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:35:08 +0100 Subject: [PATCH 096/311] New translations cf_looping.md (French) --- .../translated_docs/fr/Concepts/cf_looping.md | 294 +++++++++--------- 1 file changed, 147 insertions(+), 147 deletions(-) diff --git a/website/translated_docs/fr/Concepts/cf_looping.md b/website/translated_docs/fr/Concepts/cf_looping.md index 614ad913831f2f..f21e851cc43af7 100644 --- a/website/translated_docs/fr/Concepts/cf_looping.md +++ b/website/translated_docs/fr/Concepts/cf_looping.md @@ -3,56 +3,56 @@ id: looping title: Structures répétitives (ou "boucles") --- -Les structures en boucle répètent une séquence d'instructions jusqu'à ce qu'une condition soit remplie ou qu'un certain nombre de fois est atteint. +Looping structures repeat a sequence of statements until a condition is met or a number of times is reached. ## While...End while -La syntaxe de la structure répétitive (ou boucle) `While...End while` est la suivante : +The formal syntax of the `While...End while` control flow structure is: ```4d - While(Expression_booléenne) - instruction(s) + While(Boolean_Expression) + statement(s) End while ``` -Une boucle `While...End while` exécute les instructions comprises entre `While` et `End while` aussi longtemps que l’expression booléenne est TRUE. Elle teste l’expression booléenne initiale et n’entre pas dans la boucle (et donc n'exécute aucune instruction) si l’expression est à FALSE. +A `While...End while` loop executes the statements inside the loop as long as the Boolean expression is TRUE. It tests the Boolean expression at the beginning of the loop and does not enter the loop at all if the expression is FALSE. -Il est utile d’initialiser la valeur testée dans l’expression booléenne juste avant d’entrer dans la boucle `While...End while`. Initialiser la valeur signifie lui affecter un contenu approprié, généralement pour que l’expression booléenne soit TRUE et que le programme entre dans la boucle. +It is common to initialize the value tested in the Boolean expression immediately before entering the `While...End while` loop. Initializing the value means setting it to something appropriate, usually so that the Boolean expression will be TRUE and `While...End while` executes the loop. -La valeur de l'expression booléenne doit pouvoir être modifiée par un élément situé à l'intérieur de la boucle, sinon elle s'exécutera indéfiniment. La boucle suivante est sans fin car _NeverStop_ est toujours TRUE : +The Boolean expression must be set by something inside the loop or else the loop will continue forever. The following loop continues forever because _NeverStop_ is always TRUE: ```4d NeverStop:=True While(NeverStop) End while ``` -Si vous vous retrouvez dans une telle situation (où une méthode s'exécute de manière incontrôlée), vous pouvez utiliser les fonctions de débogage de 4D et remonter à la source du problème. Pour plus d'informations sur ce point, reportez-vous à la section [Débogueur](error-handling.md). +If you find yourself in such a situation, where a method is executing uncontrolled, you can use the trace facilities to stop the loop and track down the problem. For more information about tracing a method, see the [Error handling](error-handling.md) page. -### Exemple +### Example ```4d - CONFIRM("Add a new record?") //L'utilisateur souhaite-t-il ajouter un enregistrement ? //L'utilisateur souhaite-t-il ajouter un enregistrement ? - While(OK=1) // Tant que l'utilisateur accepte - ADD RECORD([aTable]) // Ajouter un nouvel enregistrement -End while // Une boucle While se termine toujours par End while + CONFIRM("Add a new record?") //The user wants to add a record? + While(OK=1) //Loop as long as the user wants to + ADD RECORD([aTable]) //Add a new record + End while //The loop always ends with End while ``` -Dans cet exemple, la valeur de la variable système `OK` est définie par la commande `CONFIRM` avant que le programme n’entre dans la boucle. Si l’utilisateur clique sur le bouton **OK** dans la boîte de dialogue de confirmation, la variable `OK` prend la valeur 1 et la boucle est exécutée. Dans le cas contraire, la variable `OK` prend la valeur 0 et la boucle est ignorée. Une fois que le programme entre dans la boucle, la commande `ADD RECORD` permet de continuer à l’exécuter car elle met la variable système `OK` à 1 lorsque l’utilisateur sauvegarde l’enregistrement. Lorsque l’utilisateur annule (ne valide pas) le dernier enregistrement, la variable système `OK` prend la valeur 0 et la boucle s’arrête. +In this example, the `OK` system variable is set by the `CONFIRM` command before the loop starts. If the user clicks the **OK** button in the confirmation dialog box, the `OK` system variable is set to 1 and the loop starts. Otherwise, the `OK` system variable is set to 0 and the loop is skipped. Once the loop starts, the `ADD RECORD` command keeps the loop going because it sets the `OK` system variable to 1 when the user saves the record. When the user cancels (does not save) the last record, the `OK` system variable is set to 0 and the loop stops. ## Repeat...Until -La syntaxe de la structure répétitive (ou boucle) `Repeat...Until` est la suivante : +The formal syntax of the `Repeat...Until` control flow structure is: ```4d Repeat - instruction(s) + statement(s) Until(Boolean_Expression) ``` -La boucle `Repeat...Until` est semblable à la boucle [While...End while](flow-control#whileend-while), à la différence qu’elle teste la valeur de l’expression booléenne après l’exécution de la boucle et non avant. Ainsi, la boucle est toujours exécutée au moins une fois, tandis que si l’expression booléenne est initialement à Faux, la boucle `While...End while` ne s’exécute pas du tout. +A `Repeat...Until` loop is similar to a [While...End while](flow-control#whileend-while) loop, except that it tests the Boolean expression after the loop rather than before. Thus, a `Repeat...Until` loop always executes the loop once, whereas if the Boolean expression is initially False, a `While...End while` loop does not execute the loop at all. -L'autre particularité de la boucle `Repeat...Until` est qu’elle se poursuit jusqu’à ce que l’expression booléenne soit à TRUE. +The other difference with a `Repeat...Until` loop is that the loop continues until the Boolean expression is TRUE. -### Exemple +### Example -Comparez l’exemple suivant avec celui de la boucle `While...End while`. Vous constatez qu’il n’est pas nécessaire d’initialiser l’expression booléenne — il n’y a pas de commande `CONFIRM` pour initialiser la variable `OK`. +Compare the following example with the example for the `While...End while` loop. Note that the Boolean expression does not need to be initialized—there is no `CONFIRM` command to initialize the `OK` variable. ```4d Repeat @@ -62,194 +62,194 @@ Comparez l’exemple suivant avec celui de la boucle `While...End while`. Vous c ## For...End for -La syntaxe de la structure répétitive `For...End for` est la suivante : +The formal syntax of the `For...End for` control flow structure is: ```4d For(Counter_Variable;Start_Expression;End_Expression{;Increment_Expression}) - instruction(s) + statement(s) End for ``` -La structure `For...End for` est une boucle contrôlée par un compteur : +The `For...End for` loop is a loop controlled by a counter variable: -- La variable compteur *Counter_Variable* est une variable numérique (Réel ou Entier long) initialisée par `For...End for` à la valeur spécifiée par *Start_Expression*. -- La variable Variable_Compteur est incrémentée de la valeur spécifiée par le paramètre optionnel *Increment_Expression* à chaque fois que la boucle est exécutée. Si vous ne passez pas de valeur dans *Increment_Expression*, la variable compteur est incrémentée par défaut de un (1). -- Lorsque le compteur atteint la valeur définie par *End_Expression*, la boucle s'arrête. +- The counter variable *Counter_Variable* is a numeric variable (Real or Long Integer) that the `For...End for` loop initializes to the value specified by *Start_Expression*. +- Each time the loop is executed, the counter variable is incremented by the value specified in the optional value *Increment_Expression*. If you do not specify *Increment_Expression*, the counter variable is incremented by one (1), which is the default. +- When the counter variable passes the *End_Expression* value, the loop stops. -**Important :** Les expressions numériques *Start_Expression*, *End_Expression* et *Increment_Expression* sont évaluées une seule fois, au début de la boucle. Si ces expressions sont des variables, leur modification depuis l'intérieur de la boucle n'affectera pas l'exécution de la boucle. +**Important:** The numeric expressions *Start_Expression*, *End_Expression* and *Increment_Expression* are evaluated once at the beginning of the loop. If these expressions are variables, changing one of these variables within the loop will not affect the loop. -**Astuce :** En revanche, vous pouvez, si vous le souhaitez, modifier la valeur de la variable *Counter_Variable* depuis l'intérieur de la boucle et cela affectera l'exécution de la boucle. +**Tip:** However, for special purposes, you can change the value of the counter variable *Counter_Variable* within the loop; this will affect the loop. -- Généralement, *Start_Expression* est inférieure à *End_Expression*. -- Si les deux expressions sont égales, la boucle ne sera exécutée qu'une fois. -- Si *Start_Expression* est supérieure à *End_Expression*, la boucle ne s'exécutera pas du tout, à moins que vous ne spécifiiez une *Increment_Expression* négative. Reportez-vous ci-dessous au paragraphe décrivant ce point. +- Usually *Start_Expression* is less than *End_Expression*. +- If *Start_Expression* and *End_Expression* are equal, the loop will execute only once. +- If *Start_Expression* is greater than *End_Expression*, the loop will not execute at all unless you specify a negative *Increment_Expression*. See the examples. -### Exemples élémentaires +### Basic examples -1. La boucle suivante s'exécute 100 fois : +1. The following example executes 100 iterations: ```4d For(vCounter;1;100) - //Faire quelque chose + //Do something End for ``` -2. L'exemple suivant permet de traiter tous les éléments du tableau anArray : +2. The following example goes through all elements of the array anArray: ```4d For($vlElem;1;Size of array(anArray)) - //Faire quelque chose avec l'élément + //Do something with the element anArray{$vlElem}:=... End for ``` -3. L'exemple suivant permet d'examiner chaque caractère du texte vtSomeText : +3. The following example goes through all the characters of the text vtSomeText: ```4d For($vlChar;1;Length(vtSomeText)) - //Faire quelque chose avec le caractère si c'est une tabulation + //Do something with the character if it is a TAB If(Character code(vtSomeText[[$vlChar]])=Tab) //... End if End for ``` -4. L'exemple suivant permet de traiter tous les enregistrements de la sélection de la table [aTable] : +4. The following example goes through the selected records for the table [aTable]: ```4d FIRST RECORD([aTable]) For($vlRecord;1;Records in selection([aTable])) - //Faire quelque chose avec chaque enregistrement + //Do something with the record SEND RECORD([aTable]) //... - // Passer à l'enregistrement suivant + //Go to the next record NEXT RECORD([aTable]) End for ``` -La plupart des structures `For...End for` que vous écrirez dans vos projets ressembleront à celles présentées ci-dessus. +Most of the `For...End for` loops you will write in your projects will look like the ones listed in these examples. -### Décrémenter la variable Compteur +### Decrementing variable counter -Dans certains cas, vous pouvez souhaiter disposer d'une boucle dont la valeur de la variable compteur décroît au lieu de croître. Pour cela, *Start_Expression* doit être supérieure à *End_Expression* et *Increment_Expression* doit être négative. Les exemples suivants effectuent les mêmes tâches que les précédents, mais en sens inverse : +In some cases, you may want to have a loop whose counter variable is decreasing rather than increasing. To do so, you must specify *Start_Expression* greater than *End_Expression* and a negative *Increment_Expression*. The following examples do the same thing as the previous examples, but in reverse order: -5. La boucle suivante s'exécute 100 fois : +5. The following example executes 100 iterations: ```4d For(vCounter;100;1;-1) - //Faire quelque chose + //Do something End for ``` -6. L'exemple suivant permet de traiter tous les éléments du tableau anArray : +6. The following example goes through all elements of the array anArray: ```4d For($vlElem;Size of array(anArray);1;-1) - //Faire quelque chose avec l'élément + //Do something with the element anArray{$vlElem}:=... End for ``` -7. L'exemple suivant permet d'examiner chaque caractère du texte vtSomeText : +7. The following example goes through all the characters of the text vtSomeText: ```4d For($vlChar;Length(vtSomeText);1;-1) - //Faire quelque chose avec le caractère si c'est une tabulation + //Do something with the character if it is a TAB If(Character code(vtSomeText[[$vlChar]])=Tab) //... End if End for ``` -8. L'exemple suivant permet de traiter tous les enregistrements de la sélection de la table [aTable] : +8. The following example goes through the selected records for the table [aTable]: ```4d LAST RECORD([aTable]) For($vlRecord;Records in selection([aTable]);1;-1) - //Faire quelque chose avec chaque enregistrement + //Do something with the record SEND RECORD([aTable]) //... - //Passer à l'enregistrement précédent + //Go to the previous record PREVIOUS RECORD([aTable]) End for ``` -### Incrementer la variable compteur de plus de 1 +### Incrementing the counter variable by more than one -Si vous le souhaitez, vous pouvez passer dans *Increment_Expression* une valeur (positive ou négative) dont la valeur absolue est supérieure à un. +If you need to, you can use an *Increment_Expression* (positive or negative) whose absolute value is greater than one. -9. La boucle suivante ne traite que les éléments pairs du tableau anArray : +9. The following loop addresses only the even elements of the array anArray: ```4d For($vlElem;2;Size of array(anArray);2) - //Faire quelque chose avec l'élément 2,4...2n + //Do something with the element #2,#4...#2n anArray{$vlElem}:=... End for ``` -### Comparaison des structures répétitives +### Comparing looping structures -Revenons au premier exemple `For...End for`. La boucle suivante s'exécute 100 fois : +Let's go back to the first `For...End for` example. The following example executes 100 iterations: ```4d For(vCounter;1;100) - //Faire quelque chose + //Do something End for ``` -Il est intéressant d'examiner la manière dont les boucles `While...End while` et `Repeat...Until` effectuent la même action. Voici la boucle `While...End while` équivalente : +It is interesting to see how the `While...End while` loop and `Repeat...Until` loop would perform the same action. Here is the equivalent `While...End while` loop: ```4d - $i :=1 // Initialisation du compteur -While ($i<=100) // Boucle 100 fois - // Faire quelque chose - $i :=$i +1 // Il faut incrémenter le compteur + $i:=1 //Initialize the counter + While($i<=100) //Loop 100 times + //Do something + $i:=$i+1 //Need to increment the counter End while ``` -Voici la boucle `Repeat...Until` équivalente : +Here is the equivalent `Repeat...Until` loop: ```4d - $i :=1 // Initialisation du compteur + $i:=1 //Initialize the counter Repeat - // Faire quelque chose - $i :=$i +1 // Il faut incrémenter le compteur -Until($i=100) // Boucle 100 fois + //Do something + $i:=$i+1 //Need to increment the counter + Until($i=100) //Loop 100 times ``` -**Astuce :** La boucle `For...End for` est généralement plus rapide que les boucles `While...End while` et `Repeat...Until` car 4D teste la condition en interne pour chaque cycle de la boucle et incrémente lui-même le compteur. Par conséquent, nous vous conseillons de préférer à chaque fois que c'est possible la structure `For...End for`. +**Tip:** The `For...End for` loop is usually faster than the `While...End while` and `Repeat...Until` loops, because 4D tests the condition internally for each cycle of the loop and increments the counter. Therefore, use the `For...End for` loop whenever possible. -### Optimiser l'exécution de For...End for +### Optimizing the execution of the For...End for loops -Vous pouvez utiliser comme compteur une variable interprocess, process ou locale, et lui attribuer le type Réel, Entier ou Entier long. Pour des boucles longues, et particulièrement en mode compilé, nous vous conseillons d'employer des variables locales de type Entier long. +You can use Real and Long Integer variables as well as interprocess, process, and local variable counters. For lengthy repetitive loops, especially in compiled mode, use local Long Integer variables. -10. Voici un exemple : +10. Here is an example: ```4d - C_LONGINT($vlCounter) // Utilisons une variable locale de type Entier long -For($vlCounter;1;10000) - // Faire quelque chose - End for + C_LONGINT($vlCounter) //use local Long Integer variables + For($vlCounter;1;10000) + //Do something + End for ``` -### Structures For...End emboîtées +### Nested For...End for looping structures -Vous pouvez emboîter autant de structures répétitives que vous voulez (dans les limites du raisonnable). Cela s'applique aux structures de type `For...End for`. Il y a dans ce cas une erreur courante à éviter : assurez-vous d'utiliser une variable compteur différente par structure de boucle. +You can nest as many control structures as you (reasonably) need. This includes nesting `For...End for` loops. To avoid mistakes, make sure to use different counter variables for each looping structure. -Voici deux exemples : +Here are two examples: -11. L'exemple suivant permet de traiter tous les éléments d'un tableau à deux dimensions : +11. The following example goes through all the elements of a two-dimensional array: ```4d For($vlElem;1;Size of array(anArray)) //... - // Faire quelque chose avec la ligne - // ... + //Do something with the row + //... For($vlSubElem;1;Size of array(anArray{$vlElem})) - //Faire quelque chose avec l'élément + //Do something with the element anArray{$vlElem}{$vlSubElem}:=... End for End for ``` -12. L'exemple suivant construit un tableau de pointeurs vers tous les champs de type Date présents dans la base : +12. The following example builds an array of pointers to all the date fields present in the database: ```4d ARRAY POINTER($apDateFields;0) @@ -272,51 +272,51 @@ Voici deux exemples : ## For each...End for each -La syntaxe de la structure répétitive (ou boucle) `For each...End for each` est la suivante : +The formal syntax of the `For each...End for each` control flow structure is: ```4d - For each(Element_courant;Expression{;debut{;fin}}){Until|While}(Expression_booléenne)} - instruction(s) + For each(Current_Item;Expression{;begin{;end}}){Until|While}(Boolean_Expression)} + statement(s) End for each ``` -La structure `For each...End for each` exécute le cycle d'instructions définies pour chaque *Elément_courant* de *Expression*. Le type de *Elément_courant* dépend du type de *Expression*. La boucle `For each...End for each` peut itérer parmi trois types d'*Expression* : +The `For each...End for each` structure iterates a specified *Current_item* over all values of the *Expression*. The *Current_item* type depends on the *Expression* type. The `For each...End for each` loop can iterate through three *Expression* types: -- collections : boucle sur chaque élément de la collection, -- entity selections : boucle sur chaque entity, -- objets : boucle sur chaque propriété d'objet. +- collections: loop through each element of the collection, +- entity selections: loop through each entity, +- objects: loop through each object property. -Le tableau suivant compare les trois types de `Pour chaque...Fin de chaque` : +The following table compares the three types of `For each...End for each`: -| | Boucle sur collections | Boucle sur entity selections | Boucle sur objets | -| ----------------------------------------- | ------------------------------------------------------- | ---------------------------------- | ----------------------------- | -| Type Elément_courant | Variable du même type que les éléments de la collection | Entity | Variable texte | -| Types d’expressions | Collection (avec des éléments du même type) | Entity selection | Objet | -| Nombre de boucles (par défaut) | Nombre d'éléments de la collection | Nombre d'entités dans la sélection | Nombre de propriétés d'objets | -| Prise en charge de Paramètres début / fin | Oui | Oui | Non | +| | Loop through collections | Loop through entity selections | Loop through objects | +| --------------------------------- | ------------------------------------------------ | ----------------------------------- | --------------------------- | +| Current_Item type | Variable of the same type as collection elements | Entity | Text variable | +| Expression type | Collection (with elements of the same type) | Entity selection | Objet | +| Number of loops (by default) | Number of collection elements | Number of entities in the selection | Number of object properties | +| Support of begin / end parameters | Yes | Yes | No | -- Le nombre de boucles est évalué au démarrage et ne changera pas en cours de traitement. L'ajout ou la suppression d'éléments pendant la boucle est donc déconseillé car il pourra en résulter une redondance ou un manque d'itérations. -- Par défaut, les _instructions_ incluses sont exécutées pour chaque valeur de *Expression*. Il est toutefois possible de sortir de la boucle en testant une condition soit au début de chaque itération (`While`) ou à la fin de chaque itération (`Until`). -- Les paramètres optionnels *début* et *fin* peuvent être utilisés avec les collections et les entity selections afin de définir des bornes pour la boucle. -- La boucle `For each...End for each` peut être utilisée sur une **collection partagée** ou un **objet partagé**. Si vous souhaitez modifier un ou plusieurs éléments des propriétés d'objets ou de la collection dans le code, vous devez utiliser les mots-clés `Use...End use`. Vous pouvez, si vous le souhaitez, appeler les mots-clés `Use...End use` : - - avant de saisir la boucle, si les éléments doivent être modifiés ensemble pour des raisons d'intégrité, ou bien - - dans la boucle, lorsque quelques éléments/propriétés seulement doivent être modifiés et qu'aucune gestion de l'intégrité n'est requise. +- The number of loops is evaluated at startup and will not change during the processing. Adding or removing items during the loop is usually not recommended since it may result in missing or redundant iterations. +- By default, the enclosed _statement(s)_ are executed for each value in *Expression*. It is, however, possible to exit the loop by testing a condition either at the begining of the loop (`While`) or at the end of the loop (`Until`). +- The *begin* and *end* optional parameters can be used with collections and entity selections to define boundaries for the loop. +- The `For each...End for each` loop can be used on a **shared collection** or a **shared object**. If your code needs to modify one or more element(s) of the collection or object properties, you need to use the `Use...End use` keywords. Depending on your needs, you can call the `Use...End use` keywords: + - before entering the loop, if items should be modified together for integrity reasons, or + - within the loop when only some elements/properties need to be modified and no integrity management is required. -### Boucle sur collections +### Loop through collections -Lorsque `For each...End for each` est utilisée avec une _Expression_ de type _Collection_, le paramètre _Elément_courant_ est une variable du même type que les éléments de la collection. Par défaut, le nombre de boucles est basé sur le nombre d'éléments de la collection. +When `For each...End for each` is used with an _Expression_ of the _Collection_ type, the _Current_Item_ parameter is a variable of the same type as the collection elements. By default, the number of loops is based on the number of items of the collection. -La collection doit contenir uniquement des éléments du même type. Dans le cas contraire, une erreur sera retournée dès que la première valeur de type différent sera assignée à la variable _Elément_courant_. +The collection must contain only elements of the same type, otherwise an error will be returned as soon as the _Current_Item_ variable is assigned the first mismatched value type. -A chaque itération de la boucle, la variable _Elément_courant_ reçoit automatiquement l'élément correspondant de la collection. Vous devez tenir compte des points suivants : +At each loop iteration, the _Current_Item_ variable is automatically filled with the matching element of the collection. The following points must be taken into account: -- La variable _Elément_courant_ doit être du même type que les éléments de la collection. Si un seul élément de la collection n'est pas du même type que la variable, une erreur est générée et la boucle s'arrête. -- Si la variable _Elément_courant_ est de type objet ou collection (i.e. Si un seul élément de la collection n'est pas du même type que la variable, une erreur est générée et la boucle s'arrête. -- Si la collection contient des éléments de valeur **Null**, une erreur sera générée si le type de la variable _Elément_courant_ ne prend pas en charge la valeur **Null** (comme par exemple les variables entier long). +- If the _Current_Item_ variable is of the object type or collection type (i.e. if _Expression_ is a collection of objects or of collections), modifying this variable will automatically modify the matching element of the collection (because objects and collections share the same references). If the variable is of a scalar type, only the variable will be modified. +- The _Current_Item_ variable must be of the same type as the collection elements. If any collection item is not of the same type as the variable, an error is generated and the loop stops. +- If the collection contains elements with a **Null** value, an error will be generated if the _Current_Item_ variable type does not support **Null** values (such as longint variables). -#### Exemple +#### Example -Vous souhaitez calculer quelques statistiques sur une collection de nombres : +You want to compute some statistics for a collection of numbers: ```4d C_COLLECTION($nums) $nums:=New collection(10;5001;6665;33;1;42;7850) @@ -338,19 +338,19 @@ Vous souhaitez calculer quelques statistiques sur une collection de nombres : //$vUnder=4,$vOver=2 ``` -### Boucle sur entity selections +### Loop through entity selections -Lorsque `For each...End for each` est utilisée avec une _Expression_ de type _Entity selection_, le paramètre _Elément_courant_ contient l'entity en cours de traitement. +When `For each...End for each` is used with an _Expression_ of the _Entity selection_ type, the _Current_Item_ parameter is the entity that is currently processed. -Le nombre de boucles est basé sur le nombre d'entities présentes dans l'entity selection. A chaque itération de la boucle, le paramètre *Elément_courant* reçoit automatiquement l'entity qui est en cours de traitement. +The number of loops is based on the number of entities in the entity selection. On each loop iteration, the *Current_Item* parameter is automatically filled with the entity of the entity selection that is currently processed. -**Note :** Si l'entity selection contient une entity qui a été supprimée entre-temps par un autre process, elle est automatiquement ignorée durant la boucle. +**Note:** If the entity selection contains an entity that was removed meanwhile by another process, it is automatically skipped during the loop. -N'oubliez pas que toute modification effectuée sur l'entity en cours de traitement doit être explicitement sauvegardée (si nécessaire) à l'aide de la méthode `entity.save( )`. +Keep in mind that any modifications applied on the current entity must be saved explicitly using `entity.save( )`. -#### Exemple +#### Example -Vous souhaitez augmenter le salaire de tous les employés britanniques dans une entity selection : +You want to raise the salary of all British employees in an entity selection: ```4d C_OBJECT(emp) For each(emp;ds.Employees.query("country='UK'")) @@ -359,15 +359,15 @@ Vous souhaitez augmenter le salaire de tous les employés britanniques dans une End for each ``` -### Boucles sur des propriétés d'objets +### Loop through object properties -Lorsque `For each...End for each` est utilisée avec une *Expression* de type Objet, le paramètre *Elément_courant* est une variable texte qui reçoit automatiquement le nom de la propriété en cours de traitement. +When `For each...End for each` is used with an *Expression* of the Object type, the *Current_Item* parameter is a text variable automatically filled with the name of the currently processed property. -Les propriétés de l'objet sont itérées en fonction de leur ordre de création. Pendant la boucle, il est possible d'ajouter ou de supprimer des propriétés dans l'objet, sans pour autant modifier le nombre de boucles qui reste basé sur le nombre de propriétés initial de l'objet. +The properties of the object are processed according to their order of creation. During the loop, properties can be added to or removed from the object, without modifying the number of loops that will remain based on the original number of properties of the object. -#### Exemple +#### Example -Vous souhaitez passer en majuscules les propriétés contenant des noms dans l'objet suivant : +You want to switch the names to uppercase in the following object: ```4d { "firstname": "gregory", @@ -375,7 +375,7 @@ Vous souhaitez passer en majuscules les propriétés contenant des noms dans l'o "age": 20 } ``` -Vous pouvez écrire : +You can write: ```4d For each(property;vObject) If(Value type(vObject[property])=Is text) @@ -390,23 +390,23 @@ Vous pouvez écrire : "age": 20 } ``` -### Paramètres début / fin +### begin / end parameters -Vous pouvez définir des bornes pour l'itération à l'aide des paramètres optionnels début et fin. +You can define bounds to the iteration using the optional begin and end parameters. -**Note :** Les paramètres *début* et *fin* sont utilisables uniquement avec les boucles sur des collections et des entity selections (ils sont ignorés avec les boucles sur des propriétés d'objets). +**Note:** The *begin* and *end* parameters can only be used in iterations through collections and entity selections (they are ignored on object properties). -- Dans le paramètre *début*, passez la position de l'élément de *Expression* auquel démarrer l'itération (*début* est inclus). -- Dans le paramètre *fin*, vous pouvez passer la position de l'élément de *Expression* auquel stopper l'itération (*fin* est exclus). +- In the *begin* parameter, pass the element position in *Expression* at which to start the iteration (*begin* is included). +- In the *end* parameter, you can also pass the element position in *Expression* at which to stop the iteration (*end* is excluded). -Si *fin* est omis ou si *fin* est plus grand que le nombre d'éléments de *Expression*, les éléments sont itérés depuis *début* jusqu'au dernier inclus. Si les paramètres *début* et *fin* sont des valeurs positives, ils représentent des positions d'éléments dans *Expression*. Si *begin* est une valeur négative, elle est recalculée comme `begin:=begin+Taille expression` (elle est considérée comme un décalage à partir de la fin de *Expression*). Si la valeur calculée est négative, *begin* prend la valeur 0. **Note :** Même si début est une valeur négative, l'itération est toujours effectuée dans le même ordre. Si *fin* est une valeur négative, elle est recalculée comme `fin:=fin+Taille expression` +If *end* is omitted or if *end* is greater than the number of elements in *Expression*, elements are iterated from *begin* until the last one (included). If the *begin* and *end* parameters are positive values, they represent actual positions of elements in *Expression*. If *begin* is a negative value, it is recalculed as `begin:=begin+Expression size` (it is considered as the offset from the end of *Expression*). If the calculated value is negative, *begin* is set to 0. **Note:** Even if begin is negative, the iteration is still performed in the standard order. If *end* is a negative value, it is recalculed as `end:=end+Expression size` -Par exemple: -- une collection contient 10 éléments (numérotés de 0 à 9) -- début=-4 > début=-4+10=6 > l'itération démarre au 6e élément (numéro 5) -- fin=-2 > fin=-2+10=8 > l'itération stoppe avant le 8e élément (numéro 7), i.e. +For example: +- a collection contains 10 elements (numbered from 0 to 9) +- begin=-4 -> begin=-4+10=6 -> iteration starts at the 6th element (#5) +- end=-2 -> end=-2+10=8 -> iteration stops before the 8th element (#7), i.e. at the 7th element. -#### Exemple +#### Example ```4d C_COLLECTION($col;$col2) @@ -423,28 +423,28 @@ Par exemple: //$col2=[1,2,3,"a","b","c","d"] ``` -### Conditions Until et While +### Until and While conditions -Vous pouvez contrôler l'exécution de `For each...End for each` en ajoutant une condition `Jusque` ou `Tant que` à la boucle. When an `Until(condition)` statement is associated to the loop, the iteration will stop as soon as the condition is evaluated to `True`, whereas when is case of a `While(condition)` statement, the iteration will stop when the condition is first evaluated to `False`. +You can control the `For each...End for each` execution by adding an `Until` or a `While` condition to the loop. When an `Until(condition)` statement is associated to the loop, the iteration will stop as soon as the condition is evaluated to `True`, whereas when is case of a `While(condition)` statement, the iteration will stop when the condition is first evaluated to `False`. -Vous pouvez passer un mot-clé ou l'autre en fonction de vos besoins : +You can pass either keyword depending on your needs: -- La condition `Until` est testée à la fin de chaque itération, donc si *Expression* n'est ni vide ni Null, la boucle sera exécutée au moins une fois. -- La condition `While` est testée au début de chaque itération, donc en fonction du résultat de la condition, la boucle peut ne pas être exécutée du tout. +- The `Until` condition is tested at the end of each iteration, so if the *Expression* is not empty or null, the loop will be executed at least once. +- The `While` condition is tested at the beginning of each iteration, so according to the condition result, the loop may not be executed at all. -#### Exemple +#### Example ```4d $colNum:=New collection(1;2;3;4;5;6;7;8;9;10) $total:=0 - For each($num;$colNum)While($total<30) //testé au début + For each($num;$colNum)While($total<30) //tested at the beginning $total:=$total+$num End for each ALERT(String($total)) //$total = 36 (1+2+3+4+5+6+7+8) $total:=1000 - For each($num;$colNum)Until($total>30) //testé à la fin + For each($num;$colNum)Until($total>30) //tested at the end $total:=$total+$num End for each ALERT(String($total)) //$total = 1001 (1000+1) From f6faf5ba517605e11102e13713cdb5fadab88685 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:35:10 +0100 Subject: [PATCH 097/311] New translations arrays.md (French) --- website/translated_docs/fr/Concepts/arrays.md | 150 +++++++++--------- 1 file changed, 75 insertions(+), 75 deletions(-) diff --git a/website/translated_docs/fr/Concepts/arrays.md b/website/translated_docs/fr/Concepts/arrays.md index be6596c090aa53..bd827be6e8c781 100644 --- a/website/translated_docs/fr/Concepts/arrays.md +++ b/website/translated_docs/fr/Concepts/arrays.md @@ -3,33 +3,33 @@ id: arrays title: Tableaux --- -Un **tableau** est une série ordonnée de **variables** de même type. Chaque variable est appelée un **élément** du tableau. La taille du tableau doit être définie au moment de sa création ; vous pouvez ensuite la modifier aussi souvent que nécessaire en ajoutant, insérant, ou supprimant des éléments, ou en appelant de nouveau la commande que vous avez utilisée pour créer le tableau. Les éléments sont numérotés de 1 à N, où N est la taille du tableau. Un tableau a toujours un [élément zéro](#using-the-element-zero-of-an-array). Les tableaux sont des variables 4D. Comme toute variable, un tableau a une portée et suit les règles du langage 4D, bien qu'il existe quelques différences spécifiques. -> Généralement, il est recommandé d'utiliser des **collections** plutôt que des **tableaux**. Les collections sont plus souples et fournissent un large éventail de méthodes spécifiques. Pour plus d'informations, veuillez consutler la section [Collection](Concepts/dt_collection.md). +An **array** is an ordered series of **variables** of the same type. Each variable is called an **element** of the array. An array is given its size when it is created; you can then resize it as many times as needed by adding, inserting, or deleting elements, or by resizing the array using the same command used to create it. Array elements are numbered from 1 to N, where N is the size of the array. An array always has a special [element zero](#using-the-element-zero-of-an-array). Arrays are 4D variables. Like any variable, an array has a scope and follows the rules of the 4D language, though with some unique differences. +> In most cases, it is recommended to use **collections** instead of **arrays**. Collections are more flexible and provide a wide range of dedicated methods. For more information, please refer to the [Collection](Concepts/dt_collection.md) section. -## Créer des tableaux +## Creating Arrays -Vous créez un tableau au moyen de l'une des commandes de déclaration du thème "Tableaux". Chaque commande de déclaration de tableau peut créer ou redimensionner des tableaux à une ou à deux dimensions. Pour plus d'informations sur les tableaux à deux dimensions, reportez-vous à la section [Tableaux à deux dimensions](#two-dimensional-arrays). +You create an array with one of the array declaration commands from the "Array" theme. Each array declaration command can create or resize one-dimensional or two-dimensional arrays. For more information about two-dimensional arrays, see the [two dimensional arrays](#two-dimensional-arrays) section. -Cette ligne de code crée (déclare) un tableau d'entiers de 10 éléments : +The following line of code creates (declares) an Integer array of 10 elements: ```4d ARRAY INTEGER(aiAnArray;10) ``` -Ensuite, cette ligne de code redimensionne le même tableau à 20 éléments : +Then, the following code resizes that same array to 20 elements: ```4d ARRAY INTEGER(aiAnArray;20) ``` -Enfin, cette ligne de code redimensionne le même tableau à 0 élément : +Then, the following code resizes that same array to no elements: ```4d ARRAY INTEGER(aiAnArray;0) ``` -## Affecter des valeurs dans un tableau +## Assigning values in arrays -Vous référencez les éléments d'un tableau en utilisant des accolades ({…} ). Un nombre entre accolades donne accès à l'adresse d'un élément particulier. L'exemple ci-dessous place cinq noms dans le tableau nommé atNoms et les affiche ensuite dans une fenêtre d'alerte : +You reference the elements in an array by using curly braces ({…}). A number is used within the braces to address a particular element; this number is called the element number. The following lines put five names into the array called atNames and then display them in alert windows: ```4d ARRAY TEXT(atNames;5) @@ -42,84 +42,84 @@ Vous référencez les éléments d'un tableau en utilisant des accolades ({…} ALERT("The element #"+String($vlElem)+" is equal to: "+atNames{$vlElem}) End for ``` -Notez la syntaxe atNoms{$vlElem}. Au lieu de spécifier un nombre littéral comme atNoms{3}, vous pouvez utiliser une variable numérique indiquant à quel élément d'un tableau vous accédez. Si vous utilisez les itérations permises par les structures répétitives (`For...End for`, `Repeat...Until` or `While...End while`), vous pouvez accéder à tout ou partie des éléments d'un tableau avec très peu de code. +Note the syntax atNames{$vlElem}. Rather than specifying a numeric literal such as atNames{3}, you can use a numeric variable to indicate which element of an array you are addressing. Using the iteration provided by a loop structure (`For...End for`, `Repeat...Until` or `While...End while`), compact pieces of code can address all or part of the elements in an array. -**Important :** Veillez à ne pas confondre l'opérateur d'affectation (:=) avec l'opérateur de comparaison égal (=). L'affectation et la comparaison sont deux opérations totalement différentes. +**Important:** Be careful not to confuse the assignment operator (:=) with the comparison operator, equal (=). Assignment and comparison are very different operations. -### Affecter un tableau à un autre -Contrairement à ce que vous pouvez faire avec des variables de type Texte ou Chaîne, vous ne pouvez pas affecter un tableau à un autre tableau. Pour copier (affecter) un tableau à un autre, utilisez la fonction `COPY ARRAY`. +### Assigning an array to another array +Unlike text or string variables, you cannot assign one array to another. To copy (assign) an array to another one, use `COPY ARRAY`. -## Utiliser l'élément zéro d'un tableau +## Using the element zero of an array -Un tableau a toujours un élément zéro. Même si l'élément zéro n'est pas affiché lorsqu'un tableau est utilisé pour remplir un objet de formulaire, vous pouvez l'utiliser sans réserve(*) dans le langage. +An array always has an element zero. While element zero is not shown when an array supports a form object, there is no restriction(*) in using it with the language. -Voici un autre exemple : vous souhaitez initialiser un objet de formulaire avec une valeur texte mais sans définir de valeur par défaut. Vous pouvez utiliser l'élément zéro du tableau : +Here is another example: you want to initialize a form object with a text value but without setting a default value. You can use the element zero of the array: ```4d - // // méthode pour une combo box ou une liste déroulante - // liée au tableau de variables atName + // method for a combo box or drop-down list + // bound to atName variable array Case of - : Form event code=On Load) - // Initialise le tableau (comme indiqué ci-dessus) - // Mais utilise l'élément zéro + :(Form event code=On Load) + // Initialize the array (as shown further above) + // But use the element zero ARRAY TEXT(atName;5) - atName{0}:=Veuillez sélectionner un élément" + atName{0}:=Please select an item" atName{1}:="Text1" atName{2}:="Text2" atName{3}:="Text3" atName{4}:="Text4" atName{5}:="Text5" - // Positionne le tableau sur l'élément 0 - atName: = 0 + // Position the array to element 0 + atName:=0 End case ``` (*) However, there is one exception: in an array type List Box, the zero element is used internally to store the previous value of an element being edited, so it is not possible to use it in this particular context. -## Tableaux à deux dimensions +## Two-dimensional Arrays -Chaque commande de déclaration de tableau permet de créer ou de redimensionner des tableaux à une ou à deux dimensions. Exemple : +Each of the array declaration commands can create or resize one-dimensional or two-dimensional arrays. Example: ```4d - ARRAY TEXT(atTopics;100;50) // Créer un tableau texte composé de 100 lignes de 50 colonnes + ARRAY TEXT(atTopics;100;50) // Creates a text array composed of 100 rows of 50 columns ``` -Les tableaux à deux dimensions sont essentiellement des objets de langage ; vous ne pouvez ni les afficher ni les imprimer. +Two-dimensional arrays are essentially language objects; you can neither display nor print them. -Dans l'exemple prédédent : +In the previous example: -- atTopics est un tableau à deux dimensions -- atTopics{8}{5} est le 5e élément (5e colonne...) de la 8e ligne -- atTopics{20} est la 20e ligne et est elle-même un tableau à une dimension -- `Size of array(atTopics)` retourne 100, qui est le nombre de lignes -- `Size of array(atTopics{17})` retourne 50, qui est le nombre de colonnes de la 17e ligne +- atTopics is a two-dimensional array +- atTopics{8}{5} is the 5th element (5th column...) of the 8th row +- atTopics{20} is the 20th row and is itself a one-dimensional array +- `Size of array(atTopics)` returns 100, which is the number of rows +- `Size of array(atTopics{17})` returns 50, which the number of columns for the 17th row -Dans l'exemple suivant, un pointeur vers chaque champ de chaque table de la base est stocké dans un tableau à deux dimensions : +In the following example, a pointer to each field of each table in the database is stored in a two-dimensional array: ```4d C_LONGINT($vlLastTable;$vlLastField) C_LONGINT($vlFieldNumber) - // Créer autant de lignes (vides et sans colonnes) qu'il y a de tables - $vlLastTable:=Get last table number - ARRAY POINTER(<>apFields;$vlLastTable;0) //Tableau 2D avec N lignes et zéro colonnes - // Pour chaque table + // Create as many rows (empty and without columns) as there are tables + $vlLastTable:=Get last table number + ARRAY POINTER(<>apFields;$vlLastTable;0) //2D array with X rows and zero columns + // For each table For($vlTable;1;$vlLastTable) If(Is table number valid($vlTable)) $vlLastField:=Get last field number($vlTable) - // Donner la valeur des éléments - $vlColumnNumber:=0 + // Give value of elements + $vlColumnNumber:=0 For($vlField;1;$vlLastField) If(Is field number valid($vlTable;$vlField)) $vlColumnNumber:=$vlColumnNumber+1 - // Insérer une colonne dans la ligne de la table en cours - INSERT IN ARRAY(<>apFields{$vlTable};$vlColumnNumber;1) - // Affecter la "celulle" avec le pointeur + //Insert a column in a row of the table underway + INSERT IN ARRAY(<>apFields{$vlTable};$vlColumnNumber;1) + //Assign the "cell" with the pointer <>apFields{$vlTable}{$vlColumnNumber}:=Field($vlTable;$vlField) End if End for @@ -127,13 +127,13 @@ Dans l'exemple suivant, un pointeur vers chaque champ de chaque table de la base End for ``` -Dans la mesure où le tableau à deux dimensions a été initialisé, vous pouvez obtenir ainsi les pointeurs vers les champs d'une table de votre choix : +Provided that this two-dimensional array has been initialized, you can obtain the pointers to the fields for a particular table in the following way: ```4d - // Obtenir les pointeurs vers les champs pour la table affichée à l'écran: + // Get the pointers to the fields for the table currently displayed at the screen: COPY ARRAY(◊apFields{Table(Current form table)};$apTheFieldsIamWorkingOn) - // Initialiser les champs booléens et date -For($vlElem;1;Size of array($apTheFieldsIamWorkingOn)) + // Initialize Boolean and Date fields + For($vlElem;1;Size of array($apTheFieldsIamWorkingOn)) Case of :(Type($apTheFieldsIamWorkingOn{$vlElem}->)=Is date) $apTheFieldsIamWorkingOn{$vlElem}->:=Current date @@ -143,40 +143,40 @@ For($vlElem;1;Size of array($apTheFieldsIamWorkingOn)) End for ``` -**Note :** Comme le montre cet exemple, les lignes des tableaux à deux dimensions peuvent être ou non de la même taille. +**Note:** As this example suggests, rows of a two-dimensional arrays can be the same size or different sizes. -## Tableaux et mémoire +## Arrays and Memory -A la différence des données que vous stockez sur disque lorsque vous utilisez des tables ou des enregistrements, un tableau réside toujours en mémoire dans son intégralité. +Unlike the data you store on disk using tables and records, an array is always held in memory in its entirety. -Par exemple, si tous les codes postaux américains étaient saisis dans une table [Codes Postaux], celle-ci contiendrait environ 100 000 enregistrements. De plus, cette table comporterait plusieurs champs : le code postal lui-même ainsi que la ville, le comté et l'état correspondants. Si vous ne sélectionnez que les codes postaux de Californie, 4D crée la sélection d'enregistrements correspondante à l'intérieur de la table [Codes Postaux], et ensuite ne charge les enregistrements que lorsque vous en avez besoin (par exemple, pour les afficher ou les imprimer). En d'autres termes, vous travaillez avec une série ordonnée de valeurs (du même type pour chaque champ) partiellement chargée du disque en mémoire. +For example, if all US zip codes were entered in the [Zip Codes] table, it would contain about 100,000 records. In addition, that table would include several fields: the zip code itself and the corresponding city, county, and state. If you select only the zip codes from California, the 4D database engine creates the corresponding selection of records within the [Zip Codes] table, and then loads the records only when they are needed (i.e., when they are displayed or printed). In order words, you work with an ordered series of values (of the same type for each field) that is partially loaded from the disk into the memory by the database engine of 4D. -Procéder de la même manière avec les tableaux serait laborieux, pour les raisons suivantes : +Doing the same thing with arrays would be prohibitive for the following reasons: -- Pour maintenir les quatre types d'information (code postal, ville, comté, état), vous auriez besoin de quatre grands tableaux en mémoire. -- Comme un tableau réside en mémoire dans son intégralité, vous seriez obligé de garder tous les codes postaux en mémoire pendant toute la session de travail, même si les données n'étaient pas utilisées en permanence. -- Toujours parce qu'un tableau réside en mémoire dans son intégralité, les quatre tableaux devraient être chargés ou sauvegardés sur le disque à chaque fois que vous démarreriez ou quitteriez l'application, quand bien même les données ne seraient d'aucune utilité pour la session de travail. +- In order to maintain the four information types (zip code, city, county, state), you would have to maintain four large arrays in memory. +- Because an array is always held in memory in its entirety, you would have to keep all the zip codes information in memory throughout the whole working session, even though the data is not always in use. +- Again, because an array is always held in memory in its entirety, each time the application is started and then quit, the four arrays would have to be loaded and then saved on the disk, even though the data is not used or modified during the working session. -**Conclusion :** Les tableaux ont pour rôle de manipuler une certaine quantité de données pendant une période brève. En contrepartie, comme ils résident en mémoire, ils sont d'une utilisation rapide et facile. +**Conclusion:** Arrays are intended to hold reasonable amounts of data for a short period of time. On the other hand, because arrays are held in memory, they are easy to handle and quick to manipulate. -Cependant, dans certaines circonstances, vous pouvez avoir besoin de tableaux contenant des centaines ou des milliers d'éléments. Voici les formules à appliquer pour calculer la quantité de mémoire utilisée pour chaque type de tableau : +However, in some circumstances, you may need to work with arrays holding hundreds or thousands of elements. The following table lists the formulas used to calculate the amount of memory used for each array type: -| Type de Tableau | Calcul de la quantité de mémoire en octets | -| --------------- | ----------------------------------------------------------------------- | -| Blob | (1+nombre d'éléments) * 12 + somme de la taille de chaque blob | -| Booléen | (31+nombre d'éléments)/8 | -| Date | (1+nombre d'éléments) * 6 | -| Entier long | (1+nombre d'éléments) * 2 | -| Entier long | (1+nombre d'éléments) * 4 | -| Objet | (1+nombre d'éléments) * 8 + somme de la taille de chaque objet | -| Image | (1+nombre d'éléments) * 8 + somme de la taille de chaque image | -| Pointeur | (1+nombre d'éléments) * 8 + somme de la taille de chaque pointeur | -| Réel | (1+nombre d'éléments) * 8 | -| Texte | (1+nombre d'éléments) * 20 + (somme de la taille de chaque texte) * 2 | -| Heure | (1+nombre d'éléments) * 4 | -| Deux dimensions | (1+nombre d'éléments) * 16 + somme de la taille de chaque tableau | +| Array Type | Formula for determining Memory Usage in Bytes | +| --------------- | -------------------------------------------------------------------- | +| Blob | (1+number of elements) * 12 + Sum of the size of each blob | +| Booléen | (31+number of elements)\8 | +| Date | (1+number of elements) * 6 | +| Integer | (1+number of elements) * 2 | +| Long Integer | (1+number of elements) * 4 | +| Objet | (1+number of elements) * 8 + Sum of the size of each object | +| Image | (1+number of elements) * 8 + Sum of the size of each picture | +| Pointeur | (1+number of elements) * 8 + Sum of the size of each pointer | +| Real | (1+number of elements) * 8 | +| Text | (1+number of elements) * 20 + (Sum of the length of each text) * 2 | +| Heure | (1+number of elements) * 4 | +| Two-dimensional | (1+number of elements) * 16 + Sum of the size of each array | -**Notes :** +**Notes:** -- La taille d'un texte en mémoire se calcule par la formule ((Longueur + 1) * 2) -- Quelques octets supplémentaires sont requis pour le repérage de l'élément, le nombre d'éléments et le tableau lui-même. \ No newline at end of file +- The size of a text in memory is calculated using this formula: ((Length + 1) * 2) +- A few additional bytes are required to keep track of the selected element, the number of elements, and the array itself. \ No newline at end of file From 52e0de8d17070edb579a43d4ad15f982779d8a0d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:35:54 +0100 Subject: [PATCH 098/311] New translations about.md (French) --- website/translated_docs/fr/Concepts/about.md | 68 ++++++++++---------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/website/translated_docs/fr/Concepts/about.md b/website/translated_docs/fr/Concepts/about.md index ca317b8b3f399f..1163d11a82d5d6 100644 --- a/website/translated_docs/fr/Concepts/about.md +++ b/website/translated_docs/fr/Concepts/about.md @@ -3,60 +3,60 @@ id: about title: À propos du Langage 4D --- -Grâce à son langage 4D intégré, qui comprend plus de 1300 commandes, 4D est un outil de développement puissant pour les applications web, mobile ou desktop. Ce langage peut être utilisé pour effectuer plusieurs types de tâches allant de la réalisation de simples calculs à la création d’interfaces utilisateur personnalisées et complexes. Vous pouvez par exemple : +The 4D built-in language, consisting of more than 1300 commands, makes 4D a powerful development tool for web, mobile, or desktop applications. You can use the 4D language for many different tasks—from performing simple calculations to creating complex custom user interfaces. For example, you can: -- Accéder par programmation à tous les éditeurs de gestion des enregistrements (tris, recherches, etc.), -- Créer et imprimer des états et des étiquettes complexes avec les données de la base, -- Communiquer avec d’autres systèmes d’information, -- Envoyer des e-mails, -- Gérer des documents et des pages web, -- Importer et exporter des données entre des applications 4D et d’autres applications, -- Incorporer des procédures écrites dans d’autres langages que celui de 4D. +- Programmatically access any of the record management editors (order by, query, and so on), +- Create and print complex reports and labels with the information from the database, +- Communicate with other devices, +- Send emails, +- Manage documents and web pages, +- Import and export data between 4D applications and other applications, +- Incorporate procedures written in other languages into the 4D programming language. -La flexibilité et la puissance du langage de 4D en font l’outil idéal pour exécuter toute une gamme de fonctions de gestion de l’information. Les utilisateurs novices peuvent exécuter des calculs rapidement, les utilisateurs plus expérimentés peuvent personnaliser leurs applications sans connaissances préalables en programmation et les développeurs chevronnés peuvent utiliser ce langage puissant pour ajouter à leurs applications des fonctions sophistiquées, allant jusqu'au transfert de fichiers, aux communications et au suivi. Quant aux développeurs ayant une maîtrise de la programmation dans d’autres langages, ils peuvent ajouter leurs propres commandes au langage de 4D. +The flexibility and power of the 4D programming language make it the ideal tool for all levels of users and developers to accomplish a complete range of information management tasks. Novice users can quickly perform calculations. Experienced users without programming experience can customize their applications. Experienced developers can use this powerful programming language to add sophisticated features and capabilities to their applications, including file transfer, communications, monitoring. Developers with programming experience in other languages can add their own commands to the 4D language. -## Qu'est-ce qu'un langage ? +## What is a Language? -Le langage de 4D n’est pas très différent de celui que nous utilisons tous les jours. C’est une forme de communication qui permet d'exprimer des idées, d'informer ou de donner des instructions. Tout comme un langage parlé, celui de 4D se compose d'un vocabulaire, d’une grammaire et d’une syntaxe, que vous employez pour indiquer au programme comment gérer votre application et vos données. +The 4D language is not very different from the spoken language we use every day. It is a form of communication used to express ideas, inform, and instruct. Like a spoken language, 4D has its own vocabulary, grammar, and syntax; you use it to tell 4D how to manage your application and data. -Il n’est pas nécessaire de connaître entièrement le langage. Pour pouvoir vous exprimer en anglais, vous n’êtes pas obligé de connaître la totalité de la langue anglaise ; en réalité, un peu de vocabulaire suffit. Il en va de même pour 4D — il vous suffit de connaître un minimum du langage pour être productif, et vous en apprendrez de plus en plus au fur et à mesure de vos besoins. +You do not need to know everything in the language in order to work effectively with 4D. In order to speak, you do not need to know the entire English language; in fact, you can have a small vocabulary and still be quite eloquent. The 4D language is much the same—you only need to know a small part of the language to become productive, and you can learn the rest as the need arises. -## Pourquoi utiliser un langage ? +## Why use a Language? -À première vue, un langage de programmation dans 4D peut sembler inutile. En effet, 4D propose des outils puissants et entièrement paramétrables en mode Développement, permettant d'exécuter une grande variété de tâches de gestion des données sans programmation. Les opérations fondamentales telles que la saisie de données, les requêtes, les tris et la création d’états s'effectuent facilement. Il existe aussi de nombreuses autres possibilités, telles que les filtres de validation des données, les aides à la saisie, la représentation graphique et la génération d’étiquettes. +At first it may seem that there is little need for a programming language in 4D. In the Design environment, 4D provides flexible tools that require no programming to perform a wide variety of data management tasks. Fundamental tasks, such as data entry, queries, sorting, and reporting are handled with ease. In fact, many extra capabilities are available, such as data validation, data entry aids, graphing, and label generation. -Alors, pourquoi avons-nous besoin d'un langage 4D ? Voici quelques-uns de ses principaux rôles : +Then why do we need a 4D language? Here are some of its uses: -- Automatiser les tâches répétitives : par exemple la modification de données, la génération d’états complexes et la réalisation de longues séries d’opérations ne nécessitant pas l’intervention d’un utilisateur. -- Contrôler l’interface utilisateur : vous pouvez gérer les fenêtres et les menus, contrôler les formulaires et les objets d’interface. -- Gérer les données de manière très fine : cette gestion inclut le traitement de transactions, les systèmes de validation complexes, la gestion multi-utilisateurs, l’utilisation des ensembles et des sélections temporaires. -- Contrôler l’ordinateur : vous pouvez contrôler les communications par le port série, la gestion des documents et des erreurs. -- Créer des applications : vous pouvez créer des applications simples, personnalisées et autonomes. -- Ajouter des fonctionnalités au serveur Web 4D intégré : par exemple, vous pouvez créer et mettre à jour des pages web dynamiques contenant vos données. +- Automate repetitive tasks: These tasks include data modification, generation of complex reports, and unattended completion of long series of operations. +- Control the user interface: You can manage windows and menus, and control forms and interface objects. +- Perform sophisticated data management: These tasks include transaction processing, complex data validation, multi-user management, sets, and named selection operations. +- Control the computer: You can control serial port communications, document management, and error management. +- Create applications: You can create easy-to-use, customized applications that run stand-alone. +- Add functionality to the built-in 4D Web server: build and update dynamic web pages filled with your data. -Le langage vous permet de contrôler totalement la structure et le fonctionnement de votre application. 4D propose de puissants éditeurs “génériques”, mais le langage vous offre la possibilité de personnaliser votre application autant que vous voulez. +The language lets you take complete control over the design and operation of your application. 4D provides powerful “generic” editors, but the language lets you customize your application to whatever degree you require. -## Prendre le contrôle de vos données +## Taking Control of Your Data -Le langage de 4D vous permet de prendre le contrôle total de vos données, d’une manière à la fois puissante et élégante. Il reste d’un abord facile pour un débutant, et est suffisamment riche pour un développeur d’applications. Il permet de passer par étapes d’une simple exploitation des fonctions intégrées de 4D à une application entièrement personnalisée. +The 4D language lets you take complete control of your data in a powerful and elegant manner. The language is easy enough for a beginner, and sophisticated enough for an experienced application developer. It provides smooth transitions from built-in database functions to a completely customized application. -Les commandes du langage de 4D vous donnent la possibilité d’accéder aux éditeurs standard de gestion des enregistrements. Par exemple, lorsque vous utilisez la commande `QUERY`, vous accédez à l’Editeur de quêtes (accessible en mode Développement via la commande Chercher... dans le menu Enregistrements). Vous pouvez, si vous le voulez, indiquer explicitement à la commande Query ce qu’elle doit rechercher. Par exemple, `QUERY([People];[People]Last Name="Dupont")` trouvera toutes les personnes nommées Dupont dans votre base. +The commands in the 4D language provide access to the standard record management editors. For example, when you use the `QUERY` command, you are presented with the Query Editor (which can be accessed in the Design mode using the Query command in the Records menu. You can tell the command to search for explicitly described data. For example, `QUERY([People];[People]Last Name="Smith")` will find all the people named Smith in your database. -Le langage 4D est très puissant — une commande remplace souvent des centaines, voire des milliers de lignes de code écrites dans les langages informatiques traditionnels. Et cette puissance s’accompagne d'une réelle simplicité : les commandes sont écrites en français. Par exemple, vous utilisez la commande `QUERY` pour effectuer une recherche ; pour ajouter un nouvel enregistrement, vous appelez la commande `ADD RECORD`. +The 4D language is very powerful—one command often replaces hundreds or even thousands of lines of code written in traditional computer languages. Surprisingly enough, with this power comes simplicity—commands have plain English names. For example, to perform a query, you use the `QUERY` command; to add a new record, you use the `ADD RECORD` command. -Le langage est conçu de telle manière que vous puissiez facilement accomplir n’importe quelle tâche. L’ajout d’un enregistrement, le tri des enregistrements, la recherche de valeurs et les autres opérations de même type sont définies par des commandes simples et directes. Mais les routines peuvent également contrôler les ports série, lire des documents sur le disque, traiter des systèmes de transactions complexes, et plus encore. +The language is designed for you to easily accomplish almost any task. Adding a record, sorting records, searching for data, and similar operations are specified with simple and direct commands. But the language can also control the serial ports, read disk documents, control sophisticated transaction processing, and much more. -Même les opérations les plus compliquées se définissent de manière relativement simple. Il serait inimaginable de les réaliser sans le langage de 4D. Cependant, même à l’aide de la puissance des commandes du langage, certaines tâches peuvent se révéler complexes et difficiles. Ce n’est pas l’outil lui-même qui fait le travail ; une tâche peut représenter en soi une difficulté, l’outil ne fait que faciliter son traitement. Par exemple, un logiciel de traitement de texte permet d’écrire un livre plus rapidement et plus facilement, mais il ne l’écrira pas à votre place. Le langage de 4D vous permet de gérer plus facilement vos données et d’appréhender les tâches ardues en toute confiance. +The 4D language accomplishes even the most sophisticated tasks with relative simplicity. Performing these tasks without using the language would be unimaginable for many. Even with the language’s powerful commands, some tasks can be complex and difficult. A tool by itself does not make a task possible; the task itself may be challenging and the tool can only ease the process. For example, a word processor makes writing a book faster and easier, but it will not write the book for you. Using the 4D language will make the process of managing your data easier and will allow you to approach complicated tasks with confidence. -## Est-ce un langage informatique “traditionnel” ? +## Is it a “Traditional” Computer Language? -Si vous êtes familier avec les langages informatiques traditionnels, ce paragraphe peut vous intéresser. Si ce n’est pas le cas, vous pouvez passer directement au paragraphe suivant. +If you are familiar with traditional computer languages, this section may be of interest. If not, you may want to skip it. -Le langage 4D n’est pas un langage informatique traditionnel. C’est un des langages les plus souples et les plus innovants que l’on puisse trouver aujourd’hui sur micro-ordinateur. Le langage a été conçu pour s’adapter à vous, et non l’inverse. +The 4D language is not a traditional computer language. It is one of the most innovative and flexible languages available on a computer today. It is designed to work the way you do, and not the other way around. -Pour utiliser les langages traditionnels, vous devez avant tout réaliser des maquettes détaillées. C’est même l'une des principales phases d’un développement. 4D vous permet de commencer à utiliser le langage à tout moment et dans n’importe quelle partie de votre projet. Vous pouvez commencer par ajouter une méthode objet dans un formulaire, puis plus tard une ou deux méthodes formulaires. Comme votre projet devient plus sophistiquée, vous pouvez ajouter une méthode projet contrôlée par un menu. Vous êtes totalement libre d’utiliser une petite partie du langage ou une partie plus étendue. Ce n’est pas “tout ou rien”, comme c’est le cas dans beaucoup d’autres bases de données. +To use traditional languages, you must do extensive planning. In fact, planning is one of the major steps in development. 4D allows you to start using the language at any time and in any part of your project. You may start by adding a method to a form, then later add a few more methods. As your application becomes more sophisticated, you might add a project method controlled by a menu. You can use as little or as much of the language as you want. It is not “all or nothing,” as is the case with many other databases. -Les langages traditionnels vous obligent à définir et à pré-déclarer vos objets d'interface sous une forme syntaxique rigide. Dans 4D, créez simplement un objet, tel qu'un bouton, et utilisez-le. 4D se charge de la gestion de l'objet. Par exemple, pour utiliser un bouton, il suffit de le dessiner dans un formulaire et de lui donner un nom. Lorsque l’utilisateur clique sur le bouton, le langage déclenche automatiquement vos méthodes. +Traditional languages force you to define and pre-declare interface objects in formal syntactic terms. In 4D, you simply create an object, such as a button, and use it. 4D automatically manages the object for you. For example, to use a button, you draw it on a form and name it. When the user clicks the button, the language automatically notifies your methods. -Les langages traditionnels sont souvent rigides et inflexibles, et exigent que les commandes soient saisies dans un style très formel et contraignant. Le langage de 4D rompt avec la tradition, au grand bénéfice de l’utilisateur. \ No newline at end of file +Traditional languages are often rigid and inflexible, requiring commands to be entered in a very formal and restrictive style. The 4D language breaks with tradition, and the benefits are yours. \ No newline at end of file From 4181327dfa0232614bcd4bbad69a87a2735d6bed Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:35:56 +0100 Subject: [PATCH 099/311] New translations pop3TransporterClass.md (French) --- .../fr/API/pop3TransporterClass.md | 212 +++++++++--------- 1 file changed, 106 insertions(+), 106 deletions(-) diff --git a/website/translated_docs/fr/API/pop3TransporterClass.md b/website/translated_docs/fr/API/pop3TransporterClass.md index 031635ca74119b..f0d985d5d22baa 100644 --- a/website/translated_docs/fr/API/pop3TransporterClass.md +++ b/website/translated_docs/fr/API/pop3TransporterClass.md @@ -3,12 +3,12 @@ id: pop3TransporterClass title: POP3Transporter --- -La classe `POP3Transporter` vous permet de récupérer des messages à partir d'un serveur de messagerie POP3. +The `POP3Transporter` class allows you to retrieve messages from a POP3 email server. -### Objet POP3 Transporter +### POP3 Transporter object -Les objets Transporter POP3 sont instanciés avec la commande [POP3 New transporter](#pop3-new-transporter). They provide the following properties and functions: +POP3 Transporter objects are instantiated with the [POP3 New transporter](#pop3-new-transporter) command. They provide the following properties and functions: | | @@ -34,57 +34,57 @@ Les objets Transporter POP3 sont instanciés avec la commande [POP3 New transpor ## POP3 New transporter -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R2 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R2 | Added |
    **POP3 New transporter**( *server* : Object ) : 4D.POP3Transporter -| Paramètres | Type | | Description | -| ---------- | ------------------ |:--:| -------------------------------------------------- | -| server | object | -> | Mail server information | -| Résultat | 4D.POP3Transporter | <- | [Objet POP3 transporter](#pop3-transporter-object) | +| Parameter | Type | | Description | +| --------- | ------------------ |:--:| --------------------------------------------------- | +| server | object | -> | Mail server information | +| Result | 4D.POP3Transporter | <- | [POP3 transporter object](#pop3-transporter-object) | #### Description -La commande `POP3 New transporter` configure une nouvelle connexion POP3en fonction du paramètre *server* et retourne un nouvel objet *[POP3 transporter](#pop3-transporter-object)*. The returned transporter object will then usually be used to receive emails. +The `POP3 New transporter` command configures a new POP3 connectionaccording to the *server* parameter and returns a new *[POP3 transporter](#pop3-transporter-object)* object. The returned transporter object will then usually be used to receive emails. In the *server* parameter, pass an object containing the following properties: | *server* | Default value (if omitted) | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------- | -| [](#acceptunsecureconnection)

        | Faux | +| [](#acceptunsecureconnection)

        | False | | [](#authenticationmode)

        | the most secure authentication mode supported by the server is used | | [](#connectiontimeout)

        | 30 | | [](#host)

        | *mandatory* | | [](#logfile)

        | none | -| **.password** : Text

    Mot de passe utilisateur pour l'authentification sur le serveur (non retourné dans l'objet *[SMTP transporter](#smtptransporterobject)*) | none | +| **.password** : Text

    User password for authentication on the server (not returned in *[SMTP transporter](#smtptransporterobject)* object) | none | | [](#port)

        | 995 | | [](#user)

        | none | -#### Résultat +#### Result -La fonction retourne un [**objet POP3 transporter**](#pop3-transporter-object). All returned properties are **read-only**. -> La connexion POP3 est automatiquement fermée lorsque l'objet transporteur est détruit. +The function returns a [**POP3 transporter object**](#pop3-transporter-object). All returned properties are **read-only**. +> The POP3 connection is automatically closed when the transporter object is destroyed. -#### Exemple +#### Example ```4d var $server : Object $server:=New object - $server.host:="pop.gmail.com" //Obligatoire + $server.host:="pop.gmail.com" //Mandatory $server.port:=995 $server.user:="4d@gmail.com" $server.password:="XXXXXXXX" - $server.logFile:="LogTest.txt" //log à enregistrer dans le dossier Logs + $server.logFile:="LogTest.txt" //log to save in the Logs folder var $transporter : 4D.POP3Transporter $transporter:=POP3 New transporter($server) @@ -109,7 +109,7 @@ La fonction retourne un [**objet POP3 transporter**](#pop3-transporter-object). -#### Exemple +#### Example ```4d var $pw : Text @@ -142,19 +142,19 @@ La fonction retourne un [**objet POP3 transporter**](#pop3-transporter-object). ## .delete() -

    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R2 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R2 | Added |
    **.delete**( *msgNumber* : Integer ) -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| ------------------------------- | -| msgNumber | Entier long | -> | Number of the message to delete | +| Parameter | Type | | Description | +| --------- | ------- |:--:| ------------------------------- | +| msgNumber | Integer | -> | Number of the message to delete | @@ -167,20 +167,20 @@ In the *msgNumber* parameter, pass the number of the email to delete. This numbe Executing this method does not actually remove any email. The flagged email will be deleted from the POP3 server only when the `POP3_transporter` object (created with `POP3 New transporter`) is destroyed. The flag could be also be removed using the `.undeleteAll()` method. > If the current session unexpectedly terminates and the connection is closed (e.g., timeout, network failure, etc.), an error message is generated and messages marked for deletion will remain on the POP3 server. -##### Exemple +##### Example ```4d $mailInfoList:=$POP3_transporter.getMailInfoList() For each($mailInfo;$mailInfoList) - // Marquer votre e-mail comme "à supprimer à la fin de la session" + // Mark your mail as "to be deleted at the end of the session" $POP3_transporter.delete($mailInfo.number) End for each - // Forcer la fermeture de la session pour supprimer les e-mails marqués pour suppression + // Force the session closure to delete the mails marked for deletion CONFIRM("Selected messages will be deleted.";"Delete";"Undo") - If(OK=1) //suppression confirmée + If(OK=1) //deletion confirmed $POP3_transporter:=Null Else - $POP3_transporter.undeleteAll() //supprimer les marqueurs de suppression + $POP3_transporter.undeleteAll() //remove deletion flags End if ``` @@ -189,19 +189,19 @@ Executing this method does not actually remove any email. The flagged email will ## .getBoxInfo() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R2 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R2 | Added |
    **.getBoxInfo()** : Object -| Paramètres | Type | | Description | -| ---------- | ----- |:--:| -------------- | -| Résultat | Objet | <- | boxInfo object | +| Parameter | Type | | Description | +| --------- | ----- |:--:| -------------- | +| Result | Objet | <- | boxInfo object | @@ -211,20 +211,20 @@ The `.getBoxInfo()` function **.getMail**( *msgNumber* : Integer ) : Object -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| ------------------------------------------------ | -| msgNumber | Entier long | -> | Number of the message in the list | -| Résultat | Objet | <- | [Email object](emailObjectClass.md#email-object) | +| Parameter | Type | | Description | +| --------- | ------- |:--:| ------------------------------------------------ | +| msgNumber | Integer | -> | Number of the message in the list | +| Result | Objet | <- | [Email object](emailObjectClass.md#email-object) | @@ -266,8 +266,8 @@ Pass in *msgNumber* the number of the message to retrieve. This number is return The method returns Null if: -* *msgNumber* désigne un message inexistant, -* le message a été marqué pour suppression à l'aide de `.delete()`. +* *msgNumber* designates a non-existing message, +* the message was marked for deletion using `.delete( )`. **Returned object** @@ -275,7 +275,7 @@ The method returns Null if: `.getMail()` returns an [`Email` object](emailObjectClass.md#email-object). -##### Exemple +##### Example You want to know the sender of the first mail of the mailbox: @@ -285,7 +285,7 @@ You want to know the sender of the first mail of the mailbox: var $sender : Variant $server:=New object - $server.host:="pop.gmail.com" //Obligatoire + $server.host:="pop.gmail.com" //Mandatory $server.port:=995 $server.user:="4d@gmail.com" $server.password:="XXXXXXXX" @@ -301,20 +301,20 @@ You want to know the sender of the first mail of the mailbox: ## .getMailInfo() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R2 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R2 | Added |
    **.getMailInfo**( *msgNumber* : Integer ) : Object -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| --------------------------------- | -| msgNumber | Entier long | -> | Number of the message in the list | -| Résultat | Objet | <- | mailInfo object | +| Parameter | Type | | Description | +| --------- | ------- |:--:| --------------------------------- | +| msgNumber | Integer | -> | Number of the message in the list | +| Result | Objet | <- | mailInfo object | @@ -326,25 +326,25 @@ In *msgNumber*, pass the number of the message to retrieve. This number is retur The `mailInfo` object returned contains the following properties: -| Propriété | Type | Description | -| --------- | ------ | --------------------------- | -| size | Nombre | Taille du message en octets | -| id | Texte | ID unique du message | +| Property | Type | Description | +| -------- | ------ | ------------------------ | +| size | Number | Message size in bytes | +| id | Text | Unique ID of the message | The method returns **Null** if: -* *msgNumber* désigne un message inexistant, -* le message a été marqué pour suppression à l'aide de `.delete()`. +* *msgNumber* designates a non-existing message, +* the message was marked for deletion using `.delete( )`. -##### Exemple +##### Example ```4d var $server; $mailInfo : Object var $mailNumber : Integer - $server.host:="pop.gmail.com" //Obligatoire + $server.host:="pop.gmail.com" //Mandatory $server.port:=995 $server.user:="4d@gmail.com" $server.password:="XXXXXXXX" @@ -353,7 +353,7 @@ The method returns **Null** if: $transporter:=POP3 New transporter($server) //message info - $mailInfo:=$transporter.getMailInfo(1) //obtenir le premier e-mail + $mailInfo:=$transporter.getMailInfo(1) //get the first mail If($mailInfo #Null) ALERT("First mail size is:"+String($mailInfo.size)+" bytes.") End if @@ -364,19 +364,19 @@ The method returns **Null** if: ## .getMailInfoList() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R2 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R2 | Added |
    **.getMailInfoList()** : Collection -| Paramètres | Type | | Description | -| ---------- | ---------- |:--:| -------------------------------- | -| Résultat | Collection | <- | Collection of `mailInfo` objects | +| Parameter | Type | | Description | +| --------- | ---------- |:--:| -------------------------------- | +| Result | Collection | <- | Collection of `mailInfo` objects | @@ -386,11 +386,11 @@ The `.getMailInfoList()` function **.getMIMEAsBlob**( *msgNumber* : Integer ) : Blob -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| ----------------------------------------------------- | -| msgNumber | Entier long | -> | Number of the message in the list | -| Résultat | Blob | <- | Blob of the MIME string returned from the mail server | +| Parameter | Type | | Description | +| --------- | ------- |:--:| ----------------------------------------------------- | +| msgNumber | Integer | -> | Number of the message in the list | +| Result | Blob | <- | Blob of the MIME string returned from the mail server | @@ -458,8 +458,8 @@ In *msgNumber*, pass the number of the message to retrieve. This number is retur The method returns an empty BLOB if: -* *msgNumber* désigne un message inexistant, -* le message a été marqué pour suppression à l'aide de `.delete()`. +* *msgNumber* designates a non-existing message, +* the message was marked for deletion using `.delete()`. **Returned BLOB** @@ -467,7 +467,7 @@ The method returns an empty BLOB if: `.getMIMEAsBlob()` returns a `BLOB` which can be archived in a database or converted to an [`Email` object](emailObjectClass.md#email-object) with the `MAIL Convert from MIME` command. -##### Exemple +##### Example You want to know the total number and size of emails in the mailbox: @@ -511,19 +511,19 @@ You want to know the total number and size of emails in the mailbox: ## .undeleteAll() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R2 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R2 | Added |
    **.undeleteAll()** -| Paramètres | Type | | Description | -| ---------- | ---- |::| ------------------------------- | -| | | | Does not require any parameters | +| Parameter | Type | | Description | +| --------- | ---- |::| ------------------------------- | +| | | | Does not require any parameters | From 701d6f39fc6eb794230b41cab2df494a9144a307 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:35:58 +0100 Subject: [PATCH 100/311] New translations emailObjectClass.md (French) --- .../fr/API/emailObjectClass.md | 72 +++++++++---------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/website/translated_docs/fr/API/emailObjectClass.md b/website/translated_docs/fr/API/emailObjectClass.md index fa3fe6c7999dd2..3e681a9655c80c 100644 --- a/website/translated_docs/fr/API/emailObjectClass.md +++ b/website/translated_docs/fr/API/emailObjectClass.md @@ -47,7 +47,7 @@ Email objects provide the following properties: All properties that contain email addresses ([`from`](#from), [`cc`](#cc), [`bcc`](#bcc), [`to`](#to), [`sender`](#sender), [`replyTo`](#replyto)) accept a value of text, object, or collection type. -#### Texte +#### Text - single email: "somebody@domain.com" - single display name+email: "Somebody " @@ -57,10 +57,10 @@ All properties that contain email addresses ([`from`](#from), [`cc`](#cc), [`bcc An object with two properties: -| Propriété | Type | Description | -| --------- | ----- | -------------------------- | -| name | Texte | Display name (can be null) | -| email | Texte | Email address | +| Property | Type | Description | +| -------- | ---- | -------------------------- | +| name | Text | Display name (can be null) | +| email | Text | Email address | #### Collection @@ -145,15 +145,15 @@ The `.bodyStructure` property contains the -**.messageId** : Texte +**.messageId** : Text #### Description -La propriété `.messageId` contient un en-tête d'identificateur de message ("message-id"). +The `.messageId` property contains a message identifier header ("message-id"). -Cet en-tête est généralement "desChiffresOuDesLettres@nomdededomaine", par exemple "abcdef.123456@4d.com". Cet identifiant unique est notamment utilisé sur les forums ou les listes de diffusion publiques. En général, les serveurs de messagerie ajoutent automatiquement cet en-tête aux messages qu'ils envoient. +This header is usually "lettersOrNumbers@domainname", e.g. "abcdef.123456@4d.com". This unique ID is used in particular on forums or public mailing lists. In general, mail servers automatically add this header to the messages they send. ## .receivedAt -**.receivedAt** : Texte +**.receivedAt** : Text #### Description [IMAP transporter](imapTransporterClass.md) only. -La propriété `.receivedAt` contient l'horodatage de l'arrivée de l'e-mail sur le serveur IMAP au format ISO 8601 UTC (ex : 2020-09-13T16:11:53Z). +The `.receivedAt` property contains the timestamp of the email's arrival on the IMAP server in ISO 8601 UTC format (ex: 2020-09-13T16:11:53Z). @@ -400,7 +400,7 @@ La propriété `.receivedAt` contient collection de tous les identifiants de messages de la chaîne de réponses précédente. +The `.references` property contains the Collection of all message-ids of messages in the preceding reply chain. For specific formatting requirements, please consult the [RFC#5322](https://tools.ietf.org/html/rfc5322). @@ -410,7 +410,7 @@ For specific formatting requirements, please consult the [RFC#5322](https://tool ## .replyTo -**.replyTo** : Texte
    **.replyTo** : Objet
    **.replyTo** : Collection +**.replyTo** : Text
    **.replyTo** : Object
    **.replyTo** : Collection #### Description @@ -424,7 +424,7 @@ The `.replyTo` property contains the -**.sendAt** : Texte +**.sendAt** : Text #### Description @@ -437,7 +437,7 @@ The `.sendAt` property contains the -**.sender** : Texte
    **.sender** : Objet
    **.sender** : Collection +**.sender** : Text
    **.sender** : Object
    **.sender** : Collection #### Description @@ -473,7 +473,7 @@ The `.size` property contains the siz ## .subject -**.subject** : Texte +**.subject** : Text #### Description @@ -487,23 +487,23 @@ The `.subject` property contains the -**.textBody** : Texte +**.textBody** : Text #### Description -La propriété `.textBody` contient la représentation en texte brut du message électronique (le jeu de caractères par défaut est UTF-8) (facultatif, SMTP uniquement). See [Handling body part](#handling-body-part) section. +The `.textBody` property contains the Plain text representation of the email message (default charset is UTF-8) (optional, SMTP only). See [Handling body part](#handling-body-part) section. ## .to -**.to** : Texte
    **.to** : Objet
    **.to** : Collection +**.to** : Text
    **.to** : Object
    **.to** : Collection #### Description -La propriété `.to` contient le ou les [destinataires](#email-addresses) principaux de l'e-mail. +The `.to` property contains the primary recipient [addresse(s)](#email-addresses) of the email. From 43866977f22b321e5b57491bc869b32a07300da6 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:36:02 +0100 Subject: [PATCH 101/311] New translations entityClass.md (French) --- website/translated_docs/fr/API/entityClass.md | 542 +++++++++--------- 1 file changed, 271 insertions(+), 271 deletions(-) diff --git a/website/translated_docs/fr/API/entityClass.md b/website/translated_docs/fr/API/entityClass.md index d9f4fea2eb1d9d..4b95f0a81fe305 100644 --- a/website/translated_docs/fr/API/entityClass.md +++ b/website/translated_docs/fr/API/entityClass.md @@ -6,7 +6,7 @@ title: Entity An [entity](ORDA/dsMapping.md#entity) is an instance of a [Dataclass](ORDA/dsMapping.md#dataclass), like a record of the table matching the dataclass in its associated datastore. It contains the same attributes as the dataclass as well as the data values and specific properties and functions. -### Sommaire +### Summary | | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -41,10 +41,10 @@ An [entity](ORDA/dsMapping.md#entity) is an instance of a [Dataclass](ORDA/dsMap ## .*attributeName* -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -63,7 +63,7 @@ The attribute value type depends on the attribute [kind](dataclassAttributeClass * If *attributeName* kind is **relatedEntities**: `.attributeName` returns a new entity selection of related entities. Duplications are removed (an unordered entity selection is returned). -#### Exemple +#### Example ```4d var $myEntity : cs.EmployeeEntity @@ -81,10 +81,10 @@ The attribute value type depends on the attribute [kind](dataclassAttributeClass ## .clone() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -92,9 +92,9 @@ The attribute value type depends on the attribute [kind](dataclassAttributeClass **.clone()** : 4D.Entity -| Paramètres | Type | | Description | -| ---------- | --------- |:--:| --------------------------------- | -| Résultat | 4D.Entity | <- | New entity referencing the record | +| Parameter | Type | | Description | +| --------- | --------- |:--:| --------------------------------- | +| Result | 4D.Entity | <- | New entity referencing the record | @@ -106,7 +106,7 @@ The `.clone()` function creates in memo This function can only be used with entities already saved in the database. It cannot be called on a newly created entity (for which [`.isNew()`](#isnew) returns **True**). -#### Exemple +#### Example ```4d var $emp; $empCloned : cs.EmployeeEntity @@ -126,10 +126,10 @@ This function can only be used with entities already saved in the database. It c ## .diff() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -137,11 +137,11 @@ This function can only be used with entities already saved in the database. It c -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ------------------- | ---------- |:--:| ---------------------------------------------- | | entityToCompare | 4D.Entity | -> | Entity to be compared with the original entity | | attributesToCompare | Collection | -> | Name of attributes to be compared | -| Résultat | Collection | <- | Differences between the entities | +| Result | Collection | <- | Differences between the entities | @@ -155,11 +155,11 @@ In *attributesToCompare*, you can designate specific attributes to compare. If p The differences are returned as a collection of objects whose properties are: -| Nom de propriété | Type | Description | -| ---------------- | ------------------------------- | ------------------------------------------- | -| attributeName | Chaine | Name of the attribute | -| value | any - Depends on attribute type | Value of the attribute in the entity | -| otherValue | any - Depends on attribute type | Value of the attribute in *entityToCompare* | +| Property name | Type | Description | +| ------------- | ------------------------------- | ------------------------------------------- | +| attributeName | Chaine | Name of the attribute | +| value | any - Depends on attribute type | Value of the attribute in the entity | +| otherValue | any - Depends on attribute type | Value of the attribute in *entityToCompare* | Only attributes with different values are included in the collection. If no differences are found, `.diff()` returns an empty collection. @@ -167,7 +167,7 @@ The function applies for properties whose [kind](dataclassAttributeClass.md#kind If one of the compared entities is **Null**, an error is raised. -#### Exemple 1 +#### Example 1 ```4d @@ -218,7 +218,7 @@ $diff2: ] ``` -#### Exemple 2 +#### Example 2 ```4d var vCompareResult1; vCompareResult2; vCompareResult3; $attributesToInspect : Collection @@ -330,10 +330,10 @@ vCompareResult3 (only differences on $e1 touched attributes are returned) ## .drop() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -341,10 +341,10 @@ vCompareResult3 (only differences on $e1 touched attributes are returned) **.drop**( {*mode* : Integer} ) : Object -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| ------------------------------------------------------------------------------- | -| mode | Entier long | -> | `dk force drop if stamp changed`: Forces the drop even if the stamp has changed | -| Résultat | Objet | <- | Result of drop operation | +| Parameter | Type | | Description | +| --------- | ------- |:--:| ------------------------------------------------------------------------------- | +| mode | Integer | -> | `dk force drop if stamp changed`: Forces the drop even if the stamp has changed | +| Result | Objet | <- | Result of drop operation | #### Description @@ -357,42 +357,42 @@ By default, if the *mode* parameter is omitted, the function will return an erro Otherwise, you can pass the `dk force drop if stamp changed` option in the *mode* parameter: in this case, the entity is dropped even if the stamp has changed (and the primary key is still the same). -**Résultat** +**Result** The object returned by `.drop( )` contains the following properties: -| Propriété | | Type | Description | -| ------------- | ------------------- | ------------------- | --------------------------------------------------------------------------------------------------------------------- | -| success | | boolean | true if the drop action is successful, false otherwise. | -| | | | ***Available only in case of error:*** | -| status(*) | | number | Error code, see below | -| statusText(*) | | Texte | Description of the error, see below | -| | | | ***Available only in case of pessimistic lock error:*** | -| LockKindText | | Texte | "Locked by record" | -| lockInfo | | object | Information about the lock origin | -| | task_id | number | Process id | -| | user_name | Texte | Session user name on the machine | -| | user4d_id | Texte | User name in the 4D database directory | -| | host_name | Texte | Machine name | -| | task_name | Texte | Process name | -| | client_version | Texte | | -| | | | ***Available only in case of serious error (serious error can be trying to duplicate a primary key, disk full...):*** | -| errors | | collection d'objets | | -| | message | Texte | Error message | -| | component signature | Texte | internal component signature (e.g. "dmbg" stands for the database component) | -| | errCode | number | Error code | +| Property | | Type | Description | +| ------------- | ------------------- | --------------------- | --------------------------------------------------------------------------------------------------------------------- | +| success | | boolean | true if the drop action is successful, false otherwise. | +| | | | ***Available only in case of error:*** | +| status(*) | | number | Error code, see below | +| statusText(*) | | text | Description of the error, see below | +| | | | ***Available only in case of pessimistic lock error:*** | +| LockKindText | | text | "Locked by record" | +| lockInfo | | object | Information about the lock origin | +| | task_id | number | Process id | +| | user_name | text | Session user name on the machine | +| | user4d_id | text | User name in the 4D database directory | +| | host_name | text | Machine name | +| | task_name | text | Process name | +| | client_version | text | | +| | | | ***Available only in case of serious error (serious error can be trying to duplicate a primary key, disk full...):*** | +| errors | | collection of objects | | +| | message | text | Error message | +| | component signature | text | internal component signature (e.g. "dmbg" stands for the database component) | +| | errCode | number | Error code | (\*) The following values can be returned in the *status* and *statusText* properties of *Result* object in case of error: -| Constant | Valeur | Commentaire | -| ----------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `dk status entity does not exist anymore` | 5 | The entity no longer exists in the data. This error can occur in the following cases:
  • the entity has been dropped (the stamp has changed and the memory space is now free)
  • 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). 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 | The entity is locked by a pessimistic lock.
    **Associated statusText**: "Already locked" | -| `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 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"
  • | +| Constant | Value | Comment | +| ----------------------------------------- | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `dk status entity does not exist anymore` | 5 | The entity no longer exists in the data. This error can occur in the following cases:
  • the entity has been dropped (the stamp has changed and the memory space is now free)
  • 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). 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 | The entity is locked by a pessimistic lock.
    **Associated statusText**: "Already locked" | +| `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 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"
  • | -#### Exemple 1 +#### Example 1 Example without `dk force drop if stamp changed` option: @@ -411,7 +411,7 @@ Example without `dk force drop if stamp changed` option: End case ``` -#### Exemple 2 +#### Example 2 Example with `dk force drop if stamp changed` option: @@ -438,10 +438,10 @@ Example with `dk force drop if stamp changed` option: ## .first() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -449,9 +449,9 @@ Example with `dk force drop if stamp changed` option: **.first()**: 4D.Entity -| Paramètres | Type | | Description | -| ---------- | --------- |:--:| -------------------------------------------------------------------- | -| Résultat | 4D.Entity | <- | Reference to first entity of an entity selection (Null if not found) | +| Parameter | Type | | Description | +| --------- | --------- |:--:| -------------------------------------------------------------------- | +| Result | 4D.Entity | <- | Reference to first entity of an entity selection (Null if not found) | #### Description @@ -460,7 +460,7 @@ The `.first()` function returns a refer If the entity does not belong to any existing entity selection (i.e. [.getSelection( )](#getselection) returns Null), the function returns a Null value. -#### Exemple +#### Example ```4d var $employees : cs.EmployeeSelection @@ -477,10 +477,10 @@ If the entity does not belong to any existing entity selection (i.e. [.getSelect ## .fromObject() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -488,9 +488,9 @@ If the entity does not belong to any existing entity selection (i.e. [.getSelect **.fromObject**( *filler* : Object ) -| Paramètres | Type | | Description | -| ---------- | ----- |:--:| ------------------------------------ | -| filler | Objet | -> | Object from which to fill the entity | +| Parameter | Type | | Description | +| --------- | ----- |:--:| ------------------------------------ | +| filler | Objet | -> | Object from which to fill the entity | #### Description @@ -509,7 +509,7 @@ The mapping between the object and the entity is done on the attribute names: * *filler* contains a property object with the same name as the related entity, containing a single property named "\_\_KEY". * if the related entity does not exist, it is ignored. -#### Exemple +#### Example With the following $o object: @@ -566,10 +566,10 @@ You could also use a related entity given as an object: ## .getDataClass() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -577,9 +577,9 @@ You could also use a related entity given as an object: **.getDataClass()** : 4D.DataClass -| Paramètres | Type | | Description | -| ---------- | ------------ |:--:| -------------------------------------------- | -| Résultat | 4D.DataClass | <- | DataClass object to which the entity belongs | +| Parameter | Type | | Description | +| --------- | ------------ |:--:| -------------------------------------------- | +| Result | 4D.DataClass | <- | DataClass object to which the entity belongs | #### Description @@ -587,7 +587,7 @@ You could also use a related entity given as an object: The `.getDataClass()` function returns the dataclass of the entity. This function is useful when writing generic code. -#### Exemple +#### Example The following generic code duplicates any entity: @@ -613,10 +613,10 @@ The following generic code duplicates any entity: ## .getKey() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -624,11 +624,11 @@ The following generic code duplicates any entity: **.getKey**( { *mode* : Integer } ) : Text
    **.getKey**( { *mode* : Integer } ) : Integer -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| --------------------------------------------------------------------------------------- | -| mode | Entier long | -> | `dk key as string`: primary key is returned as a string, no matter the primary key type | -| Résultat | Texte | <- | Value of the text primary key of the entity | -| Résultat | Entier long | <- | Value of the numeric primary key of the entity | +| Parameter | Type | | Description | +| --------- | ------- |:--:| --------------------------------------------------------------------------------------- | +| mode | Integer | -> | `dk key as string`: primary key is returned as a string, no matter the primary key type | +| Result | Text | <- | Value of the text primary key of the entity | +| Result | Integer | <- | Value of the numeric primary key of the entity | @@ -638,7 +638,7 @@ The `.getKey()` function returns the p Primary keys can be numbers (Integer) or strings. You can "force" the returned primary key value to be a string, no matter the actual primary key type, by passing the `dk key as string` option in the *mode* parameter. -#### Exemple +#### Example ```4d @@ -657,10 +657,10 @@ Primary keys can be numbers (Integer) or strings. You can "force" the returned p ## .getSelection() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -668,9 +668,9 @@ Primary keys can be numbers (Integer) or strings. You can "force" the returned p **.getSelection()**: 4D.EntitySelection -| Paramètres | Type | | Description | -| ---------- | ------------------ |:--:| ---------------------------------------------------------------- | -| Résultat | 4D.EntitySelection | <- | Entity selection to which the entity belongs (Null if not found) | +| Parameter | Type | | Description | +| --------- | ------------------ |:--:| ---------------------------------------------------------------- | +| Result | 4D.EntitySelection | <- | Entity selection to which the entity belongs (Null if not found) | #### Description @@ -679,7 +679,7 @@ The `.getSelection()` function r If the entity does not belong to an entity selection, the function returns Null. -#### Exemple +#### Example ```4d @@ -701,10 +701,10 @@ If the entity does not belong to an entity selection, the function returns Null. ## .getStamp() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -712,9 +712,9 @@ If the entity does not belong to an entity selection, the function returns Null. **.getStamp()** : Integer -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| ------------------------------------------------------- | -| Résultat | Entier long | <- | Stamp of the entity (0 if entity has just been created) | +| Parameter | Type | | Description | +| --------- | ------- |:--:| ------------------------------------------------------- | +| Result | Integer | <- | Stamp of the entity (0 if entity has just been created) | #### Description @@ -725,7 +725,7 @@ The internal stamp is automatically incremented by 4D each time the entity is sa > For a new entity (never saved), the function returns 0. To know if an entity has just been created, it is recommended to use [.isNew()](#isnew). -#### Exemple +#### Example ```4d @@ -750,10 +750,10 @@ The internal stamp is automatically incremented by 4D each time the entity is sa ## .indexOf() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -761,10 +761,10 @@ The internal stamp is automatically incremented by 4D each time the entity is sa **.indexOf**( { *entitySelection* : 4D.EntitySelection } ) : Integer -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | --------------- | ------------------ |:--:| ------------------------------------------------------------------ | | entitySelection | 4D.EntitySelection | -> | Position of the entity is given according to this entity selection | -| Résultat | Entier long | <- | Position of the entity in an entity selection | +| Result | Integer | <- | Position of the entity in an entity selection | #### Description @@ -778,7 +778,7 @@ The resulting value is included between 0 and the length of the entity selection * If the entity does not have an entity selection or does not belong to *entitySelection*, the function returns -1. * If *entitySelection* is Null or does not belong to the same dataclass as the entity, an error is raised. -#### Exemple +#### Example ```4d @@ -800,10 +800,10 @@ The resulting value is included between 0 and the length of the entity selection ## .isNew() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -811,9 +811,9 @@ The resulting value is included between 0 and the length of the entity selection **.isNew()** : Boolean -| Paramètres | Type | | Description | -| ---------- | ------- |:--:| ------------------------------------------------------------------------- | -| Résultat | Booléen | <- | True if entity has just been created and not yet saved. Otherwise, False. | +| Parameter | Type | | Description | +| --------- | ------- |:--:| ------------------------------------------------------------------------- | +| Result | Booléen | <- | True if entity has just been created and not yet saved. Otherwise, False. | #### Description @@ -821,7 +821,7 @@ The resulting value is included between 0 and the length of the entity selection The `.isNew()` function returns True if the entity to which it is applied has just been created and has not yet been saved in the datastore. Otherwise, it returns False. -#### Exemple +#### Example ```4d @@ -841,10 +841,10 @@ The `.isNew()` function returns True i ## .last() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -852,9 +852,9 @@ The `.isNew()` function returns True i **.last()** : 4D.Entity -| Paramètres | Type | | Description | -| ---------- | --------- |:--:| ------------------------------------------------------------------- | -| Résultat | 4D.Entity | <- | Reference to last entity of an entity selection (Null if not found) | +| Parameter | Type | | Description | +| --------- | --------- |:--:| ------------------------------------------------------------------- | +| Result | 4D.Entity | <- | Reference to last entity of an entity selection (Null if not found) | #### Description @@ -864,7 +864,7 @@ The `.last()` function returns a referen If the entity does not belong to any existing entity selection (i.e. [.getSelection( )](#getselection) returns Null), the function returns a Null value. -#### Exemple +#### Example ```4d @@ -882,10 +882,10 @@ If the entity does not belong to any existing entity selection (i.e. [.getSelect ## .lock() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -893,10 +893,10 @@ If the entity does not belong to any existing entity selection (i.e. [.getSelect **.lock**( { *mode* : Integer } ) : Object -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| -------------------------------------------------------------------- | -| mode | Entier long | -> | `dk reload if stamp changed`: Reload before locking if stamp changed | -| Résultat | Objet | <- | Result of lock operation | +| Parameter | Type | | Description | +| --------- | ------- |:--:| -------------------------------------------------------------------- | +| mode | Integer | -> | `dk reload if stamp changed`: Reload before locking if stamp changed | +| Result | Objet | <- | Result of lock operation | #### Description @@ -914,46 +914,46 @@ By default, if the *mode* parameter is omitted, the function will return an erro Otherwise, you can pass the `dk reload if stamp changed` option in the *mode* parameter: in this case, no error is returned and the entity is reloaded when the stamp has changed (if the entity still exists and the primary key is still the same). -**Résultat** +**Result** The object returned by `.lock( )` contains the following properties: -| Propriété | | Type | Description | -| ---------------- | ------------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------- | -| success | | boolean | true if the lock action is successful (or if the entity is already locked in the current process), false otherwise. | -| | | | ***Available only if `dk reload if stamp changed` option is used:*** | -| **wasReloaded** | | boolean | true if the entity was reloaded with success, false otherwise. | -| | | | ***Available only in case of error:*** | -| status(\*) | | number | Error code, see below | -| statusText(\*) | | Texte | Description of the error, see below | -| | | | ***Available only in case of pessimistic lock error:*** | -| lockKindText | | Texte | "Locked by record" | -| lockInfo | | object | Information about the lock origin | -| | task_id | number | Process ID | -| | user_name | Texte | Session user name on the machine | -| | user4d_alias | Texte | Name or alias of the 4D user | -| | user4d_id | number | User id in the 4D database directory | -| | host_name | Texte | Machine name | -| | task_name | Texte | Process name | -| | client_version | Texte | | -| | | | ***Available only in case of serious error*** (primary key already exists, disk full...): | -| errors | | collection d'objets | | -| | message | Texte | Error message | -| | component signature | Texte | internal component signature (e.g. "dmbg" stands for the database component) | -| | errCode | number | Error code | +| Property | | Type | Description | +| ---------------- | ------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------- | +| success | | boolean | true if the lock action is successful (or if the entity is already locked in the current process), false otherwise. | +| | | | ***Available only if `dk reload if stamp changed` option is used:*** | +| **wasReloaded** | | boolean | true if the entity was reloaded with success, false otherwise. | +| | | | ***Available only in case of error:*** | +| status(\*) | | number | Error code, see below | +| statusText(\*) | | text | Description of the error, see below | +| | | | ***Available only in case of pessimistic lock error:*** | +| lockKindText | | text | "Locked by record" | +| lockInfo | | object | Information about the lock origin | +| | task_id | number | Process ID | +| | user_name | text | Session user name on the machine | +| | user4d_alias | text | Name or alias of the 4D user | +| | user4d_id | number | User id in the 4D database directory | +| | host_name | text | Machine name | +| | task_name | text | Process name | +| | client_version | text | | +| | | | ***Available only in case of serious error*** (primary key already exists, disk full...): | +| errors | | collection of objects | | +| | message | text | Error message | +| | component signature | text | internal component signature (e.g. "dmbg" stands for the database component) | +| | errCode | number | Error code | (\*) The following values can be returned in the *status* and *statusText* properties of the *Result* object in case of error: -| Constant | Valeur | Commentaire | -| ----------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `dk status entity does not exist anymore` | 5 | The entity no longer exists in the data. This error can occur in the following cases:
  • the entity has been dropped (the stamp has changed and the memory space is now free)
  • 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). When using `.drop( )`, this error can be returned when dk force drop if stamp changed option is used. When using `.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 | The entity is locked by a pessimistic lock.

    **Associated statusText**: "Already locked" | -| `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 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" | +| Constant | Value | Comment | +| ----------------------------------------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `dk status entity does not exist anymore` | 5 | The entity no longer exists in the data. This error can occur in the following cases:
  • the entity has been dropped (the stamp has changed and the memory space is now free)
  • 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). When using `.drop( )`, this error can be returned when dk force drop if stamp changed option is used. When using `.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 | The entity is locked by a pessimistic lock.

    **Associated statusText**: "Already locked" | +| `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 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" | -#### Exemple 1 +#### Example 1 Example with error: @@ -971,7 +971,7 @@ Example with error: ``` -#### Exemple 2 +#### Example 2 Example with `dk reload if stamp changed` option: @@ -995,10 +995,10 @@ Example with `dk reload if stamp changed` option: ## .next() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -1006,9 +1006,9 @@ Example with `dk reload if stamp changed` option: **.next()** : 4D.Entity -| Paramètres | Type | | Description | -| ---------- | --------- |:--:| -------------------------------------------------------------------- | -| Résultat | 4D.Entity | <- | Reference to next entity in the entity selection (Null if not found) | +| Parameter | Type | | Description | +| --------- | --------- |:--:| -------------------------------------------------------------------- | +| Result | 4D.Entity | <- | Reference to next entity in the entity selection (Null if not found) | #### Description @@ -1020,7 +1020,7 @@ If the entity does not belong to any existing entity selection (i.e. [.getSelect If there is no valid next entity in the entity selection (i.e. you are on the last entity of the selection), the function returns Null. If the next entity has been dropped, the function returns the next valid entity (and eventually Null). -#### Exemple +#### Example ```4d var $employees : cs.EmployeeSelection @@ -1037,10 +1037,10 @@ If there is no valid next entity in the entity selection (i.e. you are on the la ## .previous() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -1048,9 +1048,9 @@ If there is no valid next entity in the entity selection (i.e. you are on the la **.previous()** : 4D.Entity -| Paramètres | Type | | Description | -| ---------- | --------- |:--:| ------------------------------------------------------------------------ | -| Résultat | 4D.Entity | <- | Reference to previous entity in the entity selection (Null if not found) | +| Parameter | Type | | Description | +| --------- | --------- |:--:| ------------------------------------------------------------------------ | +| Result | 4D.Entity | <- | Reference to previous entity in the entity selection (Null if not found) | #### Description @@ -1062,7 +1062,7 @@ If the entity does not belong to any existing entity selection (i.e. [.getSelect If there is no valid previous entity in the entity selection (i.e. you are on the first entity of the selection), the function returns Null. If the previous entity has been dropped, the function returns the previous valid entity (and eventually Null). -#### Exemple +#### Example ```4d var $employees : cs.EmployeeSelection @@ -1079,10 +1079,10 @@ If there is no valid previous entity in the entity selection (i.e. you are on th ## .reload( ) -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -1090,34 +1090,34 @@ If there is no valid previous entity in the entity selection (i.e. you are on th **.reload()** : Object -| Paramètres | Type | | Description | -| ---------- | ----- |:--:| ------------- | -| Résultat | Objet | <- | Status object | +| Parameter | Type | | Description | +| --------- | ----- |:--:| ------------- | +| Result | Objet | <- | Status object | #### Description The `.reload()` function reloads the content of the entity in memory, according to information stored in the table related to the dataclass in the datastore. The reload is done only if the entity still exists with the same primary key. -**Résultat** +**Result** The object returned by `.reload( )` contains the following properties: -| Propriété | Type | Description | +| Property | Type | Description | | ---------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | success | boolean | True if the reload action is successful, False otherwise.

    ***Available only in case of error***: | | status(\*) | number | Error code, see below | -| statusText(\*) | Texte | Description of the error, see below | +| statusText(\*) | text | Description of the error, see below | (\*) The following values can be returned in the *status* and *statusText* properties of *Result* object in case of error: -| Constant | Valeur | Commentaire | -| ----------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `dk status entity does not exist anymore` | 5 | The entity no longer exists in the data. This error can occur in the following cases:

  • the entity has been dropped (the stamp has changed and the memory space is now free)
  • 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). When using `.drop( )`, this error can be returned when `dk force drop if stamp changed` option is used. When using `.lock( )`, this error can be returned when `dk reload if stamp changed` option is used

  • ***Associated statusText***: "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.
    ***Associated statusText***: "Other error" | +| Constant | Value | Comment | +| ----------------------------------------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `dk status entity does not exist anymore` | 5 | The entity no longer exists in the data. This error can occur in the following cases:
  • the entity has been dropped (the stamp has changed and the memory space is now free)
  • 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). When using `.drop( )`, this error can be returned when `dk force drop if stamp changed` option is used. When using `.lock( )`, this error can be returned when `dk reload if stamp changed` option is used

  • ***Associated statusText***: "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.
    ***Associated statusText***: "Other error" | -#### Exemple +#### Example ```4d var $employee : cs.EmployeeEntity @@ -1142,10 +1142,10 @@ The object returned by `.reload( )` contains the following properties: ## .save() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -1153,10 +1153,10 @@ The object returned by `.reload( )` contains the following properties: **.save**( { *mode* : Integer } ) : Object -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| ------------------------------------------------- | -| mode | Entier long | -> | `dk auto merge`: Enables the automatic merge mode | -| Résultat | Objet | <- | Result of save operation | +| Parameter | Type | | Description | +| --------- | ------- |:--:| ------------------------------------------------- | +| mode | Integer | -> | `dk auto merge`: Enables the automatic merge mode | +| Result | Objet | <- | Result of save operation | #### Description @@ -1172,20 +1172,20 @@ By default, if the *mode* parameter is omitted, the method will return an error Otherwise, you can pass the `dk auto merge` option in the *mode* parameter: when the automatic merge mode is enabled, a modification done concurrently by another process/user on the same entity but on a different attribute will not result in an error. The resulting data saved in the entity will be the combination (the "merge") of all non-concurrent modifications (if modifications were applied to the same attribute, the save fails and an error is returned, even with the auto merge mode). > The automatic merge mode is not available for attributes of Picture, Object, and Text type when stored outside of the record. Concurrent changes in these attributes will result in a `dk status stamp has changed` error. -**Résultat** +**Result** The object returned by `.save()` contains the following properties: -| Propriété | | Type | Description | +| Property | | Type | Description | | ---------------- | | ------- | ------------------------------------------------------- | | success | | boolean | True if the save action is successful, False otherwise. | | | | | ***Available only if `dk auto merge` option is used***: | | autoMerged | | boolean | True if an auto merge was done, False otherwise. | | | | | ***Available only in case of error***: | | status(\*) | | number | Error code, see below | -| statusText(\*) | | Texte | Description of the error, see below | +| statusText(\*) | | text | Description of the error, see below | | | | | ***Available only in case of pessimistic lock error***: | -| lockKindText | | Texte | "Locked by record" | +| lockKindText | | text | "Locked by record" | | lockInfo | | object | Information about the lock | origin| ||task_id| number| Process id| ||user_name |text| Session user name on the machine| ||user4d_id| text| User name in the 4D database directory| ||host_name |text |Machine name| ||task_name| text| Process name| ||client_version| text|| @@ -1194,16 +1194,16 @@ The object returned by `.save()` contains the following properties: (\*) The following values can be returned in the status and statusText properties of Result object in case of error: -| Constant | Valeur | Commentaire | -| ----------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `dk status automerge failed` | 6 | (Only if the `dk auto merge` option is used) The automatic merge option failed when saving the entity.

    **Associated statusText**: "Auto merge failed" | -| `dk status entity does not exist anymore` | 5 | The entity no longer exists in the data. This error can occur in the following cases:

  • the entity has been dropped (the stamp has changed and the memory space is now free)
  • 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). When using `.drop( )`, this error can be returned when `dk force drop if stamp changed` option is used. When using `.lock( )`, this error can be returned when `dk reload if stamp changed` option is used

  • **Associated statusText**: "Entity doesnot exist anymore" | -| `dk status locked` | 3 | The entity is locked by a pessimistic lock.

    **Associated statusText**: "Already locked" | -| `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 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" | +| Constant | Value | Comment | +| ----------------------------------------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `dk status automerge failed` | 6 | (Only if the `dk auto merge` option is used) The automatic merge option failed when saving the entity.

    **Associated statusText**: "Auto merge failed" | +| `dk status entity does not exist anymore` | 5 | The entity no longer exists in the data. This error can occur in the following cases:

  • the entity has been dropped (the stamp has changed and the memory space is now free)
  • 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). When using `.drop( )`, this error can be returned when `dk force drop if stamp changed` option is used. When using `.lock( )`, this error can be returned when `dk reload if stamp changed` option is used

  • **Associated statusText**: "Entity doesnot exist anymore" | +| `dk status locked` | 3 | The entity is locked by a pessimistic lock.

    **Associated statusText**: "Already locked" | +| `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 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" | -#### Exemple 1 +#### Example 1 Creating a new entity: @@ -1219,7 +1219,7 @@ Creating a new entity: End if ``` -#### Exemple 2 +#### Example 2 Updating an entity without `dk auto merge` option: @@ -1268,10 +1268,10 @@ Updating an entity with `dk auto merge` option: ## .toObject() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -1279,12 +1279,12 @@ Updating an entity with `dk auto merge` option: **.toObject**() : Object
    **.toObject**( *filterString* : Text { ; *options* : Integer} ) : Object
    **.toObject**( *filterCol* : Collection { ; *options* : Integer } ) : Object -| Paramètres | Type | | Description | -| ------------ | ----------- |:--:| ------------------------------------------------------------------------------------------------------- | -| filterString | Texte | -> | Attribute(s) to extract (comma-separated string) | -| filterCol | Collection | -> | Collection of attribute(s) to extract | -| options | Entier long | -> | `dk with primary key`: adds the \_KEY property;
    `dk with stamp`: adds the \_STAMP property | -| Résultat | Objet | <- | Object built from the entity | +| Parameter | Type | | Description | +| ------------ | ---------- |:--:| ------------------------------------------------------------------------------------------------------- | +| filterString | Text | -> | Attribute(s) to extract (comma-separated string) | +| filterCol | Collection | -> | Collection of attribute(s) to extract | +| options | Integer | -> | `dk with primary key`: adds the \_KEY property;
    `dk with stamp`: adds the \_STAMP property | +| Result | Objet | <- | Object built from the entity | #### Description @@ -1317,7 +1317,7 @@ If a filter is specified for attributes of the relatedEntities [kind](dataclassA In the *options* parameter, you can pass the `dk with primary key` and/or`dk with stamp` selector(s) to add the entity's primary keys and/or stamps in extracted objects. -#### Exemple 1 +#### Example 1 The following structure will be used throughout all examples of this section: @@ -1355,7 +1355,7 @@ Returns: -#### Exemple 2 +#### Example 2 Extracting the primary key and the stamp: @@ -1555,10 +1555,10 @@ Returns: ## .touched( ) -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -1566,9 +1566,9 @@ Returns: **.touched()** : Boolean -| Paramètres | Type | | Description | -| ---------- | ------- |:--:| ------------------------------------------------------------------------------------- | -| Résultat | Booléen | <- | True if at least one entity attribute has been modified and not yet saved, else False | +| Parameter | Type | | Description | +| --------- | ------- |:--:| ------------------------------------------------------------------------------------- | +| Result | Booléen | <- | True if at least one entity attribute has been modified and not yet saved, else False | #### Description @@ -1579,7 +1579,7 @@ If an attribute has been modified or calculated, the function returns True, else This function returns False for a new entity that has just been created (with [`.new( )`](dataclassClass.md#new)). Note however that if you use a function which calculates an attribute of the entity, the `.touched()` function will then return True. For example, if you call [`.getKey()`](#getkey) to calculate the primary key, `.touched()` returns True. -#### Exemple +#### Example In this example, we check to see if it is necessary to save the entity: @@ -1599,10 +1599,10 @@ In this example, we check to see if it is necessary to save the entity: ## .touchedAttributes( ) -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -1610,9 +1610,9 @@ In this example, we check to see if it is necessary to save the entity: **.touchedAttributes()** : Collection -| Paramètres | Type | | Description | -| ---------- | ---------- |:--:| ------------------------------------------------ | -| Résultat | Collection | <- | Names of touched attributes, or empty collection | +| Parameter | Type | | Description | +| --------- | ---------- |:--:| ------------------------------------------------ | +| Result | Collection | <- | Names of touched attributes, or empty collection | #### Description @@ -1625,7 +1625,7 @@ In the case of a related entity having been touched (i.e., the foreign key), the If no entity attribute has been touched, the method returns an empty collection. -#### Exemple 1 +#### Example 1 ```4d @@ -1641,7 +1641,7 @@ If no entity attribute has been touched, the method returns an empty collection. ``` -#### Exemple 2 +#### Example 2 ```4d @@ -1675,10 +1675,10 @@ In this case: ## .unlock() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -1686,9 +1686,9 @@ In this case: **.unlock()** : Object -| Paramètres | Type | | Description | -| ---------- | ----- |:--:| ------------- | -| Résultat | Objet | <- | Status object | +| Parameter | Type | | Description | +| --------- | ----- |:--:| ------------- | +| Result | Objet | <- | Status object | #### Description @@ -1698,7 +1698,7 @@ The `.unlock()` function removes the p > For more information, please refer to [Entity locking](ORDA/entities.md#entity-locking) section. A record is automatically unlocked when it is no longer referenced by any entities in the locking process (for example: if the lock is put only on one local reference of an entity, the entity and thus the record is unlocked when the process ends). -> When a record is locked, it must be unlocked from the locking process and on the entity reference which put the lock. Par exemple: +> When a record is locked, it must be unlocked from the locking process and on the entity reference which put the lock. For example: ```4d $e1:=ds.Emp.all()[0] @@ -1708,15 +1708,15 @@ A record is automatically unlocked when it is no longer referenced by any entiti $res:=$e1.unlock() //$res.success=true ``` -**Résultat** +**Result** The object returned by `.unlock()` contains the following property: -| Propriété | Type | Description | -| --------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| success | Booléen | True if the unlock action is successful, False otherwise. If the unlock is done on a dropped entity, on a non locked record, or on a record locked by another process or entity, success is False. | +| Property | Type | Description | +| -------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| success | Booléen | True if the unlock action is successful, False otherwise. If the unlock is done on a dropped entity, on a non locked record, or on a record locked by another process or entity, success is False. | -#### Exemple +#### Example ```4d var $employee : cs.EmployeeEntity From 15343fed7d984b66375d5c210d9e338293c935dd Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:36:05 +0100 Subject: [PATCH 102/311] New translations entitySelectionClass.md (French) --- .../fr/API/entitySelectionClass.md | 594 ++++++++++-------- 1 file changed, 340 insertions(+), 254 deletions(-) diff --git a/website/translated_docs/fr/API/entitySelectionClass.md b/website/translated_docs/fr/API/entitySelectionClass.md index 49a6eafadeadf6..6b65bce95e12b7 100644 --- a/website/translated_docs/fr/API/entitySelectionClass.md +++ b/website/translated_docs/fr/API/entitySelectionClass.md @@ -7,7 +7,7 @@ title: EntitySelection An entity selection is an object containing one or more reference(s) to [entities](ORDA/dsMapping.md#entity) belonging to the same [Dataclass](ORDA/dsMapping.md#dataclass). An entity selection can contain 0, 1 or X entities from the dataclass -- where X can represent the total number of entities contained in the dataclass. -### Sommaire +### Summary | | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -23,6 +23,7 @@ An entity selection is an object containing one or more reference(s) to [entitie | [](#extract)

        | | [](#first)

        | | [](#getdataclass)

        | +| [](#isalterable)

        | | [](#isordered)

        | | [](#last)

        | | [](#length)

        | @@ -43,14 +44,54 @@ An entity selection is an object containing one or more reference(s) to [entitie + +**Create entity selection** ( *dsTable* : Table { ; *settings* : Object } ) : 4D.EntitySelection + + +| Parameter | Type | | Description | +| --------- | ------------------ |:--:| ------------------------------------------------------------------------------------------- | +| dsTable | Table | -> | Table in the 4D database whose current selection will be used to build the entity selection | +| settings | Objet | -> | Build option: context | +| Result | 4D.EntitySelection | <- | Entity selection matching the dataclass related to the given table | + + + +#### Description + +The `Create entity selection` command builds and returns a new, [alterable](ORDA/entities.md#shareable-or-alterable-entity-selections) entity selection related to the dataclass matching the given *dsTable*, according to the current selection of this table. + +If the current selection is sorted, an [ordered](ORDA/dsMapping.md#ordered-or-unordered-entity-selection) entity selection is created (the order of the current selection is kept). If the current selection is unsorted, an unordered entity selection is created. + +If the *dsTable* is not exposed in [`ds`](API/datastoreClass.md#ds), an error is returned. This command cannot be used with a Remote datastore. + +In the optional *settings* parameter, you can pass an object containing the following property: + +| Property | Type | Description | +| -------- | ---- | ----------------------------------------------------------------------------------------------------------------- | +| context | Text | Label for the [optimization context](ORDA/entities.md#clientserver-optimization) applied to the entity selection. | + + +#### Example + +```4d +var $employees : cs.EmployeeSelection +ALL RECORDS([Employee]) +$employees:=Create entity selection([Employee]) +// The $employees entity selection now contains a set of reference +// on all entities related to the Employee dataclass +``` + +#### See also + +[`dataClass.newSelection()`](dataclassClass.md#newselection) ## [*index*] -

    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -68,7 +109,7 @@ Note that the corresponding entity is reloaded from the datastore. * If *index* is out of range, an error is returned. * If *index* corresponds to a dropped entity, a Null value is returned. -> **Warning**: `EntitySelection[index]` is a non assignable expression, which means that it cannot be used as en editable entity reference with methods like [`.lock()`](entityClass.md#lock) or [`.save()`](entityClass.md#save). To work with the corresponding entity, you need to assign the returned expression to an assignable expression, such as a variable. Voici quelques exemples : +> **Warning**: `EntitySelection[index]` is a non assignable expression, which means that it cannot be used as en editable entity reference with methods like [`.lock()`](entityClass.md#lock) or [`.save()`](entityClass.md#save). To work with the corresponding entity, you need to assign the returned expression to an assignable expression, such as a variable. Examples: ```4d $sel:=ds.Employee.all() //create the entity selection @@ -82,7 +123,7 @@ Note that the corresponding entity is reloaded from the datastore. $entity.save() //OK ``` -#### Exemple +#### Example ```4d @@ -100,10 +141,10 @@ Note that the corresponding entity is reloaded from the datastore. ## .*attributeName* -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -119,7 +160,7 @@ Any dataclass attribute can be used as a property of an entity selection to retu * If *attributeName* kind is `relatedEntities`: `.attributeName` returns a new entity selection of related values of the same type as *attributeName*. Duplications are removed (an unordered entity selection is returned). -Lorsqu'un attribut de relation est utilisé comme propriété d'une sélection d'entité, le résultat est toujours une autre sélection d'entité, même si une seule entité est retournée. In this case, if no entities are returned, the result is an empty entity selection. +When a relation attribute is used as a property of an entity selection, the result is always another entity selection, even if only one entity is returned. In this case, if no entities are returned, the result is an empty entity selection. If the attribute does not exist in the entity selection, an error is returned. @@ -128,7 +169,7 @@ If the attribute does not exist in the entity selection, an error is returned. -#### Exemple 1 +#### Example 1 Projection of storage values: @@ -149,7 +190,7 @@ The resulting collection is a collection of strings, for example: ] ``` -#### Exemple 2 +#### Example 2 Projection of related entity: @@ -180,11 +221,11 @@ The resulting object is an entity selection of Employee with duplications remove ## .add() -
    Historique -| Version | Modifications | -| ------- | --------------------------------------------- | -| v18 R5 | Only supports non-shareable entity selections | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ----------------------------------------- | +| v18 R5 | Only supports alterable entity selections | +| v17 | Added |
    @@ -192,10 +233,10 @@ The resulting object is an entity selection of Employee with duplications remove **.add**( *entity* : 4D.Entity ) : 4D.EntitySelection -| Paramètres | Type | | Description | -| ---------- | ------------------ |:--:| --------------------------------------------- | -| entity | 4D.Entity | -> | Entity to be added to the entity selection | -| Résultat | 4D.EntitySelection | -> | Entity selection including the added *entity* | +| Parameter | Type | | Description | +| --------- | ------------------ |:--:| --------------------------------------------- | +| entity | 4D.Entity | -> | Entity to be added to the entity selection | +| Result | 4D.EntitySelection | -> | Entity selection including the added *entity* | @@ -204,7 +245,7 @@ The resulting object is an entity selection of Employee with duplications remove The `.add()` function adds the specified *entity* to the entity selection and returns the modified entity selection. > This function modifies the original entity selection. -**Warning:** The entity selection must be *non-shareable*, i.e. it has been created for example by [`.newSelection()`](dataclassClass.md#newselection) or `Create entity selection`, otherwise `.add()` will return an error. Shareable entity selections do not accept the addition of entities. For more information, please refer to the [Shareable vs Non-shareable entity selections](ORDA/entities.md#shareable-or-non-shareable-entity-selections) section. +**Warning:** The entity selection must be *alterable*, i.e. it has been created for example by [`.newSelection()`](dataclassClass.md#newselection) or `Create entity selection`, otherwise `.add()` will return an error. Shareable entity selections do not accept the addition of entities. For more information, please refer to the [Shareable or alterable entity selections](ORDA/entities.md#shareable-or-alterable-entity-selections) section. * If the entity selection is ordered, *entity* is added at the end of the selection. If a reference to the same entity already belongs to the entity selection, it is duplicated and a new reference is added. @@ -215,7 +256,7 @@ The modified entity selection is returned by the function, so that function call An error occurs if *entity* and the entity selection are not related to the same Dataclass. If *entity* is Null, no error is raised. -#### Exemple 1 +#### Example 1 ```4d var $employees : cs.EmployeeSelection @@ -227,7 +268,7 @@ An error occurs if *entity* and the entity selection are not related to the same $employees.add($employee) //The $employee entity is added to the $employees entity selection ``` -#### Exemple 2 +#### Example 2 Calls to the function can be chained: @@ -248,10 +289,10 @@ Calls to the function can be chained: ## .and() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -259,11 +300,11 @@ Calls to the function can be chained: -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | --------------- | ------------------ |:--:| ------------------------------------------------------------------------------ | | entity | 4D.Entity | -> | Entity to intersect with | | entitySelection | 4D.EntitySelection | -> | Entity selection to intersect with | -| Résultat | 4D.EntitySelection | <- | New entity selection with the result of intersection with logical AND operator | +| Result | 4D.EntitySelection | <- | New entity selection with the result of intersection with logical AND operator | @@ -280,7 +321,7 @@ If the original entity selection or the *entitySelection* parameter is empty, or If the original entity selection and the parameter are not related to the same dataclass, an error is raised. -#### Exemple 1 +#### Example 1 ```4d @@ -297,7 +338,7 @@ If the original entity selection and the parameter are not related to the same d ``` -#### Exemple 2 +#### Example 2 We want to have a selection of employees named "Jones" who live in New York: @@ -314,10 +355,10 @@ We want to have a selection of employees named "Jones" who live in New York: ## .average() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -325,10 +366,10 @@ We want to have a selection of employees named "Jones" who live in New York: **.average**( *attributePath* : Text ) : Real -| Paramètres | Type | | Description | -| ------------- | ----- |:--:| ------------------------------------------------------------------------------------- | -| attributePath | Texte | -> | Attribute path to be used for calculation | -| Résultat | Réel | <- | Arithmetic mean (average) of entity attribute values (Null if empty entity selection) | +| Parameter | Type | | Description | +| ------------- | ---- |:--:| ------------------------------------------------------------------------------------- | +| attributePath | Text | -> | Attribute path to be used for calculation | +| Result | Real | <- | Arithmetic mean (average) of entity attribute values (Null if empty entity selection) | #### Description @@ -348,7 +389,7 @@ An error is returned if: * *attributePath* is not found in the entity selection dataclass. -#### Exemple +#### Example We want to obtain a list of employees whose salary is higher than the average salary: @@ -366,10 +407,10 @@ We want to obtain a list of employees whose salary is higher than the average sa ## .contains() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -377,10 +418,10 @@ We want to obtain a list of employees whose salary is higher than the average sa **.contains**( *entity* : 4D.Entity ) : Boolean -| Paramètres | Type | | Description | -| ---------- | --------- |:--:| -------------------------------------------------------------- | -| entity | 4D.Entity | -> | Entity to evaluate | -| Résultat | Booléen | <- | True if the entity belongs to the entity selection, else False | +| Parameter | Type | | Description | +| --------- | --------- |:--:| -------------------------------------------------------------- | +| entity | 4D.Entity | -> | Entity to evaluate | +| Result | Booléen | <- | True if the entity belongs to the entity selection, else False | #### Description @@ -391,7 +432,7 @@ In *entity*, specify the entity to search for in the entity selection. If entity If *entity* and the entity selection do not belong to the same dataclass, an error is raised. -#### Exemple +#### Example ```4d var $employees : cs.EmployeeSelection @@ -414,10 +455,10 @@ If *entity* and the entity selection do not belong to the same dataclass, an err ## .count() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -425,10 +466,10 @@ If *entity* and the entity selection do not belong to the same dataclass, an err **.count**( *attributePath* : Text ) : Real -| Paramètres | Type | | Description | -| ------------- | ----- |:--:| ----------------------------------------------------------------- | -| attributePath | Texte | -> | Path of the attribute to be used for calculation | -| Résultat | Réel | <- | Number of non null *attributePath* values in the entity selection | +| Parameter | Type | | Description | +| ------------- | ---- |:--:| ----------------------------------------------------------------- | +| attributePath | Text | -> | Path of the attribute to be used for calculation | +| Result | Real | <- | Number of non null *attributePath* values in the entity selection | #### Description @@ -441,7 +482,7 @@ An error is returned if: * *attributePath* is a related attribute, * *attributePath* is not found in the entity selection dataclass. -#### Exemple +#### Example We want to find out the total number of employees for a company without counting any whose job title has not been specified: @@ -459,10 +500,10 @@ We want to find out the total number of employees for a company without counting ## .copy() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R5 | Added |
    @@ -470,10 +511,10 @@ We want to find out the total number of employees for a company without counting **.copy**( { *option* : Integer } ) : 4D.EntitySelection -| Paramètres | Type | | Description | -| ---------- | ------------------ |:--:| ------------------------------------------------ | -| option | Entier long | -> | `ck shared`: return a shareable entity selection | -| Résultat | 4D.EntitySelection | <- | Copy of the entity selection | +| Parameter | Type | | Description | +| --------- | ------------------ |:--:| ------------------------------------------------ | +| option | Integer | -> | `ck shared`: return a shareable entity selection | +| Result | 4D.EntitySelection | <- | Copy of the entity selection | #### Description @@ -482,11 +523,11 @@ The `.copy()` function returns > This function does not modify the original entity selection. -By default, if the *option* parameter is omitted, the function returns a new, non-shareable entity selection (even if the function is applied to a shareable entity selection). Pass the `ck shared` constant in the *option* parameter if you want to create a shareable entity selection. +By default, if the *option* parameter is omitted, the function returns a new, alterable entity selection (even if the function is applied to a shareable entity selection). Pass the `ck shared` constant in the *option* parameter if you want to create a shareable entity selection. -> For information on the shareable property of entity selections, please refer to the [Shareable vs Non-shareable entity selections](ORDA/entities.md#shareable-or-non-shareable-entity-selections) section. +> For information on the shareable property of entity selections, please refer to the [Shareable or alterable entity selections](ORDA/entities.md#shareable-or-alterable-entity-selections) section. -#### Exemple +#### Example You create a new, empty entity selection of products when the form is loaded: @@ -522,10 +563,10 @@ Then this entity selection is updated with products and you want to share the pr ## .distinct() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -533,11 +574,11 @@ Then this entity selection is updated with products and you want to share the pr **.distinct**( *attributePath* : Text { ; *option* : Integer } ) : Collection -| Paramètres | Type | | Description | -| ------------- | ----------- |:--:| ---------------------------------------------------------------- | -| attributePath | Texte | -> | Path of attribute whose distinct values you want to get | -| option | Entier long | -> | `dk diacritical`: diacritical evaluation ("A" # "a" for example) | -| Résultat | Collection | <- | Collection with only distinct values | +| Parameter | Type | | Description | +| ------------- | ---------- |:--:| ---------------------------------------------------------------- | +| attributePath | Text | -> | Path of attribute whose distinct values you want to get | +| option | Integer | -> | `dk diacritical`: diacritical evaluation ("A" # "a" for example) | +| Result | Collection | <- | Collection with only distinct values | #### Description @@ -560,7 +601,7 @@ An error is returned if: * *attributePath* is a related attribute, * *attributePath* is not found in the entity selection dataclass. -#### Exemple +#### Example You want to get a collection containing a single element per country name: @@ -576,10 +617,10 @@ You want to get a collection containing a single element per country name: ## .drop() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -587,10 +628,10 @@ You want to get a collection containing a single element per country name: **.drop**( { *mode* : Integer } ) : 4D.EntitySelection -| Paramètres | Type | | Description | -| ---------- | ------------------ |:--:| ------------------------------------------------------------------------------------------------ | -| mode | Entier long | -> | `dk stop dropping on first error`: stops method execution on first non-droppable entity | -| Résultat | 4D.EntitySelection | <- | Empty entity selection if successful, else entity selection containing non-droppable entity(ies) | +| Parameter | Type | | Description | +| --------- | ------------------ |:--:| ------------------------------------------------------------------------------------------------ | +| mode | Integer | -> | `dk stop dropping on first error`: stops method execution on first non-droppable entity | +| Result | 4D.EntitySelection | <- | Empty entity selection if successful, else entity selection containing non-droppable entity(ies) | #### Description @@ -600,7 +641,7 @@ The `.drop()` function removes If a locked entity is encountered during the execution of `.drop()`, it is not removed. By default, the method processes all entities of the entity selection and returns non-droppable entities in the entity selection. If you want the method to stop execution at the first encountered non-droppable entity, pass the `dk stop dropping on first error` constant in the *mode* parameter. -#### Exemple +#### Example Example without the `dk stop dropping on first error` option: @@ -636,10 +677,10 @@ Example with the `dk stop dropping on first error` option: ## .extract() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R3 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R3 | Added |
    @@ -648,12 +689,12 @@ Example with the `dk stop dropping on first error` option: -| Paramètres | Type | | Description | -| ------------- | ----------- |:--:| --------------------------------------------------------------------------------------- | -| attributePath | Texte | -> | Attribute path whose values must be extracted to the new collection | -| targetPath | Texte | -> | Target attribute path or attribute name | -| option | Entier long | -> | `ck keep null`: include null attributes in the returned collection (ignored by default) | -| Résultat | Collection | <- | Collection containing extracted values | +| Parameter | Type | | Description | +| ------------- | ---------- |:--:| --------------------------------------------------------------------------------------- | +| attributePath | Text | -> | Attribute path whose values must be extracted to the new collection | +| targetPath | Text | -> | Target attribute path or attribute name | +| option | Integer | -> | `ck keep null`: include null attributes in the returned collection (ignored by default) | +| Result | Collection | <- | Collection containing extracted values | #### Description @@ -692,7 +733,7 @@ If several *attributePath* are given, a *targetPath* must be given for each. Onl > Entities of a collection of entities accessed by \[ ] are not reloaded from the database. -#### Exemple +#### Example Given the following table and relation: @@ -739,10 +780,10 @@ Given the following table and relation: ## .first() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -750,9 +791,9 @@ Given the following table and relation: **.first()** : 4D.Entity -| Paramètres | Type | | Description | -| ---------- | --------- |:--:| ---------------------------------------------------------------------------------- | -| Résultat | 4D.Entity | <- | Reference to the first entity of the entity selection (Null if selection is empty) | +| Parameter | Type | | Description | +| --------- | --------- |:--:| ---------------------------------------------------------------------------------- | +| Result | 4D.Entity | <- | Reference to the first entity of the entity selection (Null if selection is empty) | #### Description @@ -777,7 +818,7 @@ There is, however, a difference between both statements when the selection is em $entity:=$entitySel[0] //generates an error ``` -#### Exemple +#### Example ```4d @@ -796,20 +837,21 @@ There is, however, a difference between both statements when the selection is em ## .getDataClass() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    **.getDataClass()** : 4D.DataClass + -| Paramètres | Type | | Description | -| ---------- | ------------ |:--:| ------------------------------------------------------ | -| Résultat | 4D.DataClass | <- | Dataclass object to which the entity selection belongs | +| Parameter | Type | | Description | +| --------- | ------------ |:--:| ------------------------------------------------------ | +| Result | 4D.DataClass | <- | Dataclass object to which the entity selection belongs | #### Description @@ -818,7 +860,7 @@ The `.getDataClass()` function + +## .isAlterable() + +
    History + +| Version | Changes | +| ------- | ------- | +| v18 R5 | Added | + +
    + + +**.isAlterable()** : Boolean + + +| Parameter | Type | | Description | +| --------- | ------- |:--:| ---------------------------------------------------------- | +| Result | Booléen | <- | True if the entity selection is alterable, False otherwise | + + +#### Description + +The `.isAlterable()` function returns True if the entity selection is alterable, and False if the entity selection is not alterable. + +For more information, please refer to [Shareable or alterable entity selections](ORDA/entities.md#shareable-or-alterable-entity-selections). + +#### Example + +You are about to display `Form.products` in a [list box](FormObjects/listbox_overview.md) to allow the user to add new products. You want to make sure it is alterable so that the user can add new products without error: + +```4d +If (Not(Form.products.isAlterable())) + Form.products:=Form.products.copy() +End if +... +Form.products.add(Form.product) +``` + + + + ## .isOrdered() -
    Historique +
    History -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -858,9 +941,9 @@ The following generic code duplicates all entities of the entity selection: **.isOrdered()** : Boolean -| Paramètres | Type | | Description | -| ---------- | ------- |:--:| -------------------------------------------------------- | -| Résultat | Booléen | <- | True if the entity selection is ordered, False otherwise | +| Parameter | Type | | Description | +| --------- | ------- |:--:| -------------------------------------------------------- | +| Result | Booléen | <- | True if the entity selection is ordered, False otherwise | #### Description @@ -871,7 +954,7 @@ The `.isOrdered()` function ## .last() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -909,9 +992,9 @@ For more information, please refer to [Ordered or unordered entity selection](OR **.last()** : 4D.Entity -| Paramètres | Type | | Description | -| ---------- | --------- |:--:| ------------------------------------------------------------------------------------- | -| Résultat | 4D.Entity | <- | Reference to the last entity of the entity selection (Null if empty entity selection) | +| Parameter | Type | | Description | +| --------- | --------- |:--:| ------------------------------------------------------------------------------------- | +| Result | 4D.Entity | <- | Reference to the last entity of the entity selection (Null if empty entity selection) | #### Description @@ -927,7 +1010,7 @@ The result of this function is similar to: If the entity selection is empty, the function returns Null. -#### Exemple +#### Example ```4d @@ -946,10 +1029,10 @@ If the entity selection is empty, the function returns Null. ## .length -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -964,7 +1047,7 @@ The `.length` property returns Entity selections always have a `.length` property. -#### Exemple +#### Example ```4d var $vSize : Integer @@ -978,21 +1061,22 @@ Entity selections always have a `.length` property. ## .max() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    **.max**( *attributePath* : Text ) : any + -| Paramètres | Type | | Description | -| ------------- | ----- |:--:| ------------------------------------------------ | -| attributePath | Texte | -> | Path of the attribute to be used for calculation | -| Résultat | any | <- | Highest value of attribute | +| Parameter | Type | | Description | +| ------------- | ---- |:--:| ------------------------------------------------ | +| attributePath | Text | -> | Path of the attribute to be used for calculation | +| Result | any | <- | Highest value of attribute | #### Description @@ -1010,7 +1094,7 @@ An error is returned if: -#### Exemple +#### Example We want to find the highest salary among all the female employees: @@ -1027,10 +1111,10 @@ We want to find the highest salary among all the female employees: ## .min() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -1038,10 +1122,10 @@ We want to find the highest salary among all the female employees: **.min**( *attributePath* : Text ) : any -| Paramètres | Type | | Description | -| ------------- | ----- |:--:| ------------------------------------------------ | -| attributePath | Texte | -> | Path of the attribute to be used for calculation | -| Résultat | any | <- | Lowest value of attribute | +| Parameter | Type | | Description | +| ------------- | ---- |:--:| ------------------------------------------------ | +| attributePath | Text | -> | Path of the attribute to be used for calculation | +| Result | any | <- | Lowest value of attribute | #### Description @@ -1058,7 +1142,7 @@ An error is returned if: * *attributePath* is not found in the entity selection dataclass. -#### Exemple +#### Example In this example, we want to find the lowest salary among all the female employees: @@ -1075,10 +1159,10 @@ In this example, we want to find the lowest salary among all the female employee ## .minus() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -1086,11 +1170,11 @@ In this example, we want to find the lowest salary among all the female employee **.minus**( *entity* : 4D.Entity ) : 4D.EntitySelection
    **.minus**( *entitySelection* : 4D.EntitySelection ) : 4D.EntitySelection -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | --------------- | ------------------ |:--:| ------------------------------------------------------------------------ | | entity | 4D.Entity | -> | Entity to substract | | entitySelection | 4D.EntitySelection | -> | Entity selection to substract | -| Résultat | 4D.EntitySelection | <- | New entity selection or a new reference on the existing entity selection | +| Result | 4D.EntitySelection | <- | New entity selection or a new reference on the existing entity selection | #### Description @@ -1108,7 +1192,7 @@ If *entitySelection* is empty or if *entity* is Null, a new reference to the ori If the original entity selection and the parameter are not related to the same dataclass, an error is raised. -#### Exemple 1 +#### Example 1 ```4d var $employees; $result : cs.EmployeeSelection @@ -1124,7 +1208,7 @@ If the original entity selection and the parameter are not related to the same d ``` -#### Exemple 2 +#### Example 2 We want to have a selection of female employees named "Jones" who live in New York : @@ -1141,10 +1225,10 @@ We want to have a selection of female employees named "Jones" who live in New Yo ## .or() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -1152,11 +1236,11 @@ We want to have a selection of female employees named "Jones" who live in New Yo **.or**( *entity* : 4D.Entity ) : 4D.EntitySelection
    **.or**( *entitySelection* : 4D.EntitySelection ) : 4D.EntitySelection -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | --------------- | ------------------ |:--:| ---------------------------------------------------------------------- | | entity | 4D.Entity | -> | Entity to intersect with | | entitySelection | 4D.EntitySelection | -> | Entity selection to intersect with | -| Résultat | 4D.EntitySelection | <- | New entity selection or new reference to the original entity selection | +| Result | 4D.EntitySelection | <- | New entity selection or new reference to the original entity selection | #### Description @@ -1174,7 +1258,7 @@ If *entitySelection* is empty or if *entity* is Null, a new reference to the ori If the original entity selection and the parameter are not related to the same dataclass, an error is raised. -#### Exemple 1 +#### Example 1 ```4d var $employees1; $employees2; $result : cs.EmployeeSelection @@ -1183,7 +1267,7 @@ If the original entity selection and the parameter are not related to the same d $result:=$employees1.or($employees2) //$result contains "Colin Hetrick", "Grady Harness","Cath Kidston" ``` -#### Exemple 2 +#### Example 2 ```4d var $employees; $result : cs.EmployeeSelection @@ -1201,10 +1285,10 @@ If the original entity selection and the parameter are not related to the same d ## .orderBy() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -1212,11 +1296,11 @@ If the original entity selection and the parameter are not related to the same d **.orderBy**( *pathString* : Text ) : 4D.EntitySelection
    **.orderBy**( *pathObjects* : Collection ) : 4D.EntitySelection -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ----------- | ------------------ |:--:| --------------------------------------------------------------------- | -| pathString | Texte | -> | Attribute path(s) and sorting instruction(s) for the entity selection | +| pathString | Text | -> | Attribute path(s) and sorting instruction(s) for the entity selection | | pathObjects | Collection | -> | Collection of criteria objects | -| Résultat | 4D.EntitySelection | <- | New entity selection in the specified order | +| Result | 4D.EntitySelection | <- | New entity selection in the specified order | #### Description @@ -1249,7 +1333,7 @@ By default, attributes are sorted in ascending order ("descending" is false). You can add as many objects in the criteria collection as necessary. > Null values are evaluated as less than other values. -#### Exemple +#### Example ```4d @@ -1277,10 +1361,10 @@ You can add as many objects in the criteria collection as necessary. ## .orderByFormula( ) -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R6 | Added |
    @@ -1288,13 +1372,13 @@ You can add as many objects in the criteria collection as necessary. **.orderByFormula**( *formulaString* : Text { ; *sortOrder* : Integer } { ; *settings* : Object} ) : 4D.EntitySelection
    **.orderByFormula**( *formulaObj* : Object { ; *sortOrder* : Integer } { ; *settings* : Object} ) : 4D.EntitySelection -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ------------- | ------------------ |:--:| ------------------------------------------- | -| formulaString | Texte | -> | Formula string | +| formulaString | Text | -> | Formula string | | formulaObj | Objet | -> | Formula object | -| sortOrder | Entier long | -> | `dk ascending` (default) or `dk descending` | +| sortOrder | Integer | -> | `dk ascending` (default) or `dk descending` | | settings | Objet | -> | Parameter(s) for the formula | -| Résultat | 4D.EntitySelection | <- | New ordered entity selection | +| Result | 4D.EntitySelection | <- | New ordered entity selection | #### Description @@ -1312,16 +1396,16 @@ The *formulaString* or *formulaObj* is executed for each entity of the entity se By default if you omit the *sortOrder* parameter, the resulting entity selection is sorted in ascending order. Optionnally, you can pass one of the following values in the *sortOrder* parameter: -| Constant | Valeur | Commentaire | -| ------------- | ------ | ------------------------------ | -| dk ascending | 0 | Ascending sort order (default) | -| dk descending | 1 | Descending sort order | +| Constant | Value | Comment | +| ------------- | ----- | ------------------------------ | +| dk ascending | 0 | Ascending sort order (default) | +| dk descending | 1 | Descending sort order | Within the *formulaString* or *formulaObj*, the processed entity and thus its attributes are available through the `This` command (for example, `This.lastName`). You can pass parameter(s) to the formula using the `args` property (object) of the `settings` parameter: the formula receives the `settings.args` object in $1. -#### Exemple 1 +#### Example 1 Sorting students using a formula provided as text: @@ -1344,7 +1428,7 @@ Same sort order but using a formula object: ``` -#### Exemple 2 +#### Example 2 A formula is given as a formula object with parameters; `settings.args` object is received as $1 in the ***computeAverage*** method. @@ -1398,12 +1482,12 @@ In this example, the "marks" object field in the **Students** dataClass contains ## .query() -
    Historique -| Version | Modifications | +
    History +| Version | Changes | | ------- | ---------------------------------- | | v17 R6 | Support of Formula parameters | | v17 R5 | Support of placeholders for values | -| v17 | Ajoutées | +| v17 | Added |
    @@ -1411,13 +1495,13 @@ In this example, the "marks" object field in the **Students** dataClass contains **.query**( *queryString* : Text { ; *...value* : expression } { ; *querySettings* : Object } ) : 4D.EntitySelection
    **.query**( *formula* : Object { ; *querySettings* : Object } ) : 4D.EntitySelection -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ------------- | ------------------ |:--:| ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| queryString | Texte | -> | Search criteria as string | +| queryString | Text | -> | Search criteria as string | | formula | Objet | -> | Search criteria as formula object | | value | expression | -> | Value(s) to use for indexed placeholder(s) | | querySettings | Objet | -> | Query options: parameters, attributes, args, allowFormulas, context, queryPath, queryPlan | -| Résultat | 4D.EntitySelection | <- | New entity selection made up of entities from entity selection meeting the search criteria specified in *queryString* or *formula*| +| Result | 4D.EntitySelection | <- | New entity selection made up of entities from entity selection meeting the search criteria specified in *queryString* or *formula*| | @@ -1431,7 +1515,7 @@ If no matching entities are found, an empty `EntitySelection` is returned. For detailed information on how to build a query using *queryString*, *value*, and *querySettings* parameters, please refer to the DataClass [`.query()`](dataclassClass.md#query) function description. > By default if you omit the **order by** statement in the *queryString*, the returned entity selection is [not ordered](ORDA/dsMapping.md#ordered-or-unordered-entity-selection). Note however that, in Client/Server mode, it behaves like an ordered entity selection (entities are added at the end of the selection). -#### Exemple 1 +#### Example 1 ```4d @@ -1441,7 +1525,7 @@ For detailed information on how to build a query using *queryString*, *value*, a ``` -#### Exemple 2 +#### Example 2 More examples of queries can be found in the DataClass [`.query()`](dataclassClass.md#query) page. @@ -1452,10 +1536,10 @@ More examples of queries can be found in the DataClass [`.query()`](dataclassCla ## .queryPath -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -1476,10 +1560,10 @@ For more information, refer to the **querySettings parameter** paragraph in the ## .queryPlan -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -1499,10 +1583,10 @@ For more information, refer to the **querySettings parameter** paragraph in the ## .refresh() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R3 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R3 | Added |
    @@ -1510,9 +1594,9 @@ For more information, refer to the **querySettings parameter** paragraph in the **.refresh()** -| Paramètres | Type | | Description | -| ---------- | ---- |::| ------------------------------- | -| | | | Does not require any parameters | +| Parameter | Type | | Description | +| --------- | ---- |::| ------------------------------- | +| | | | Does not require any parameters | #### Description @@ -1522,7 +1606,7 @@ The `.refresh()` function im By default, the local ORDA cache is invalidated after 30 seconds. In the context of client / server applications using both ORDA and the classic language, this method allows you to make sure a remote application will always work with the latest data. -#### Exemple 1 +#### Example 1 In this example, classic and ORDA code modify the same data simultaneously: @@ -1550,7 +1634,7 @@ In this example, classic and ORDA code modify the same data simultaneously: ``` -#### Exemple 2 +#### Example 2 A list box displays the Form.students entity selection and several clients work on it. @@ -1579,10 +1663,10 @@ A list box displays the Form.students entity selection and several clients work ## .slice() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -1590,11 +1674,11 @@ A list box displays the Form.students entity selection and several clients work **.slice**( *startFrom* : Integer { ; *end* : Integer } ) : 4D.EntitySelection -| Paramètres | Type | | Description | -| ---------- | ------------------ |:--:| -------------------------------------------------------------- | -| startFrom | Entier long | -> | Index to start the operation at (included) | -| end | Entier long | -> | End index (not included) | -| Résultat | 4D.EntitySelection | <- | New entity selection containing sliced entities (shallow copy) | +| Parameter | Type | | Description | +| --------- | ------------------ |:--:| -------------------------------------------------------------- | +| startFrom | Integer | -> | Index to start the operation at (included) | +| end | Integer | -> | End index (not included) | +| Result | 4D.EntitySelection | <- | New entity selection containing sliced entities (shallow copy) | #### Description @@ -1611,7 +1695,7 @@ The returned entity selection contains the entities specified by *startFrom* and If the entity selection contains entities that were dropped in the meantime, they are also returned. -#### Exemple 1 +#### Example 1 You want to get a selection of the first 9 entities of the entity selection: @@ -1622,7 +1706,7 @@ $sliced:=$sel.slice(0;9) // ``` -#### Exemple 2 +#### Example 2 Assuming we have ds.Employee.all().length = 10 @@ -1638,10 +1722,10 @@ $slice:=ds.Employee.all().slice(-1;-2) //tries to return entities from index 9 t ## .sum( ) -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -1650,10 +1734,10 @@ $slice:=ds.Employee.all().slice(-1;-2) //tries to return entities from index 9 t **.sum**( *attributePath* : Text ) : Real -| Paramètres | Type | | Description | -| ------------- | ----- |:--:| ------------------------------------------------ | -| attributePath | Texte | -> | Path of the attribute to be used for calculation | -| Résultat | Réel | <- | Sum of entity selection values | +| Parameter | Type | | Description | +| ------------- | ---- |:--:| ------------------------------------------------ | +| attributePath | Text | -> | Path of the attribute to be used for calculation | +| Result | Real | <- | Sum of entity selection values | #### Description @@ -1672,7 +1756,7 @@ An error is returned if: -#### Exemple +#### Example ```4d var $sel : cs.EmployeeSelection @@ -1688,10 +1772,10 @@ $sum:=$sel.sum("salary") ## .toCollection( ) -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -1699,14 +1783,14 @@ $sum:=$sel.sum("salary") **.toCollection**( { *options* : Integer { ; *begin* : Integer { ; *howMany* : Integer } } ) : *Collection*
    **.toCollection**( *filterString* : Text {; *options* : Integer { ; *begin* : Integer { ; *howMany* : Integer }}} ) : *Collection*
    **.toCollection**( *filterCol* : Collection {; *options* : Integer { ; *begin* : Integer { ; *howMany* : Integer }}} ) : *Collection* -| Paramètres | Type | | Description | -| ------------ | ----------- |:--:| ------------------------------------------------------------------------------------ | -| filterString | Texte | -> | String with entity attribute path(s) to extract | -| filterCol | Collection | -> | Collection of entity attribute path(s) to extract | -| options | Entier long | -> | `dk with primary key`: adds the primary key
    `dk with stamp`: adds the stamp | -| begin | Entier long | -> | Designates the starting index | -| howMany | Entier long | -> | Number of entities to extract | -| Résultat | Collection | <- | Collection of objects containing attributes and values of entity selection | +| Parameter | Type | | Description | +| ------------ | ---------- |:--:| ------------------------------------------------------------------------------------ | +| filterString | Text | -> | String with entity attribute path(s) to extract | +| filterCol | Collection | -> | Collection of entity attribute path(s) to extract | +| options | Integer | -> | `dk with primary key`: adds the primary key
    `dk with stamp`: adds the stamp | +| begin | Integer | -> | Designates the starting index | +| howMany | Integer | -> | Number of entities to extract | +| Result | Collection | <- | Collection of objects containing attributes and values of entity selection | #### Description @@ -1748,7 +1832,7 @@ An empty collection is returned if: * *begin* is greater than the length of the entity selection. -#### Exemple 1 +#### Example 1 The following structure will be used throughout all examples of this section: @@ -1809,7 +1893,7 @@ Returns: ] ``` -#### Exemple 2 +#### Example 2 Example with options: @@ -1898,6 +1982,7 @@ Returns: "lastName": "Durham" } ] + ``` #### Example 4 @@ -2090,6 +2175,7 @@ Returns: }, { "firstName": "Gary", + "lastName": "Reichert", "directReports": [ { From 4fdf33f2a7a42b3e4352e41f84e1d2f9850b06bb Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:36:09 +0100 Subject: [PATCH 103/311] New translations fileClass.md (French) --- website/translated_docs/fr/API/fileClass.md | 226 ++++++++++---------- 1 file changed, 113 insertions(+), 113 deletions(-) diff --git a/website/translated_docs/fr/API/fileClass.md b/website/translated_docs/fr/API/fileClass.md index c6bb7bc8178a23..f7a26b8634de0b 100644 --- a/website/translated_docs/fr/API/fileClass.md +++ b/website/translated_docs/fr/API/fileClass.md @@ -5,7 +5,7 @@ title: File `File` objects are created with the [`File`](#file) command. They contain references to disk files that may or may not actually exist on disk. For example, when you execute the `File` command to create a new file, a valid `File` object is created but nothing is actually stored on disk until you call the [`file.create( )`](#create) function. -### Exemple +### Example The following example creates a preferences file in the project folder: @@ -53,10 +53,10 @@ $created:=File("/PACKAGE/SpecialPrefs/"+Current user+".myPrefs").create() ## File -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -64,13 +64,13 @@ $created:=File("/PACKAGE/SpecialPrefs/"+Current user+".myPrefs").create() -| Paramètres | Type | | Description | -| ------------ | ----------- |:--:| ----------------------------------------------- | -| path | Texte | -> | File path | -| fileConstant | Entier long | -> | 4D file constant | -| pathType | Entier long | -> | `fk posix path` (default) or `fk platform path` | -| * | | -> | * to return file of host database | -| Résultat | 4D.File | <- | New file object | +| Parameter | Type | | Description | +| ------------ | ------- |:--:| ----------------------------------------------- | +| path | Text | -> | File path | +| fileConstant | Integer | -> | 4D file constant | +| pathType | Integer | -> | `fk posix path` (default) or `fk platform path` | +| * | | -> | * to return file of host database | +| Result | 4D.File | <- | New file object | @@ -86,37 +86,37 @@ In the *path* parameter, pass a file path string. You can use a custom string or By default, 4D expects a path expressed with the POSIX syntax. If you work with platform pathnames (Windows or macOS), you must declare it using the *pathType* parameter. The following constants are available: -| Constant | Valeur | Commentaire | -| ---------------- | ------ | --------------------------------------------------------------------------------------- | -| fk platform path | 1 | Path expressed with a platform-specific syntax (mandatory in case of platform pathname) | -| fk posix path | 0 | Path expressed with POSIX syntax (default) | +| Constant | Value | Comment | +| ---------------- | ----- | --------------------------------------------------------------------------------------- | +| fk platform path | 1 | Path expressed with a platform-specific syntax (mandatory in case of platform pathname) | +| fk posix path | 0 | Path expressed with POSIX syntax (default) | **File ( fileConstant { ; \* } )** In the *fileConstant* parameter, pass a 4D built-in or system file, using one of the following constants: -| Constant | Valeur | Commentaire | -| ------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Backup history file | 19 | Backup history file (see Configuration and trace files). Stored in the backup destination folder. | -| Backup log file | 13 | Current backup journal file. Stored in the application Logs folder. | -| Backup settings file | 1 | Default backup.4DSettings file (xml format), stored in the Settings folder of the project | -| Backup settings file for data | 17 | backup.4DSettings file (xml format) for the data file, stored in the Settings folder of the data folder | -| Build application log file | 14 | Current log file in xml format of the application builder. Stored in the Logs folder. | -| Build application settings file | 20 | Default settings file of the application builder ("buildApp.4DSettings"). Stored in the Settings folder of the project. | -| Compacting log file | 6 | Log file of the most recent compacting done with the Compact data file command or the Maintenance and security center. Stored in the Logs folder. | -| Current backup settings file | 18 | backup.4DSettings file currently used by the application. It can be the backup settings file (default) or a custom user backup settings file defined for the data file | -| Debug log file | 12 | Log file created by the `SET DATABASE PARAMETER(Debug log recording)` command. Stored in the Logs folder. | -| Diagnostic log file | 11 | Log file created by the `SET DATABASE PARAMETER(Diagnostic log recording)` command. Stored in the Logs folder. | -| Directory file | 16 | directory.json file, containing the description of users and groups (if any) for the project application. It can be located either in the user settings folder (default, global to the project), or in the data settings folder (specific to a data file). | -| HTTP debug log file | 9 | Log file created by the `WEB SET OPTION(Web debug log)` command. Stored in the Logs folder. | -| HTTP log file | 8 | Log file created by the `WEB SET OPTION(Web log recording)` command. Stored in Logs folder. | -| Last backup file | 2 | Last backup file, named \[bkpNum].4BK, stored at a custom location. | -| Repair log file | 7 | Log file of database repairs made on the database in the Maintenance and Security Center (MSC). Stored in the Logs folder. | -| Request log file | 10 | Standard client/server request log file (excluding Web requests) created by the `SET DATABASE PARAMETER(4D Server log recording)` or `SET DATABASE PARAMETER(Client log recording)` commands. If executed on the server, the server log file is returned (stored in the Logs folder on the server). If executed on the client, the client log file is returned (stored in the client local Logs folder). | -| SMTP log file | 15 | Log file created by the `SET DATABASE PARAMETER(SMTP Log)` command. Stored in the Logs folder. | -| User settings file | 3 | settings.4DSettings file for all data files, stored in Preferences folder next to structure file if enabled. | -| User settings file for data | 4 | settings.4DSettings file for current data file, stored in Preferences folder next to the data file. | -| Verification log file | 5 | Log files created by the `VERIFY CURRENT DATA FILE` and `VERIFY DATA FILE` commands or the Maintenance and Security Center (MSC). Stored in the Logs folder. | +| Constant | Value | Comment | +| ------------------------------- | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Backup history file | 19 | Backup history file (see Configuration and trace files). Stored in the backup destination folder. | +| Backup log file | 13 | Current backup journal file. Stored in the application Logs folder. | +| Backup settings file | 1 | Default backup.4DSettings file (xml format), stored in the Settings folder of the project | +| Backup settings file for data | 17 | backup.4DSettings file (xml format) for the data file, stored in the Settings folder of the data folder | +| Build application log file | 14 | Current log file in xml format of the application builder. Stored in the Logs folder. | +| Build application settings file | 20 | Default settings file of the application builder ("buildApp.4DSettings"). Stored in the Settings folder of the project. | +| Compacting log file | 6 | Log file of the most recent compacting done with the Compact data file command or the Maintenance and security center. Stored in the Logs folder. | +| Current backup settings file | 18 | backup.4DSettings file currently used by the application. It can be the backup settings file (default) or a custom user backup settings file defined for the data file | +| Debug log file | 12 | Log file created by the `SET DATABASE PARAMETER(Debug log recording)` command. Stored in the Logs folder. | +| Diagnostic log file | 11 | Log file created by the `SET DATABASE PARAMETER(Diagnostic log recording)` command. Stored in the Logs folder. | +| Directory file | 16 | directory.json file, containing the description of users and groups (if any) for the project application. It can be located either in the user settings folder (default, global to the project), or in the data settings folder (specific to a data file). | +| HTTP debug log file | 9 | Log file created by the `WEB SET OPTION(Web debug log)` command. Stored in the Logs folder. | +| HTTP log file | 8 | Log file created by the `WEB SET OPTION(Web log recording)` command. Stored in Logs folder. | +| Last backup file | 2 | Last backup file, named \[bkpNum].4BK, stored at a custom location. | +| Repair log file | 7 | Log file of database repairs made on the database in the Maintenance and Security Center (MSC). Stored in the Logs folder. | +| Request log file | 10 | Standard client/server request log file (excluding Web requests) created by the `SET DATABASE PARAMETER(4D Server log recording)` or `SET DATABASE PARAMETER(Client log recording)` commands. If executed on the server, the server log file is returned (stored in the Logs folder on the server). If executed on the client, the client log file is returned (stored in the client local Logs folder). | +| SMTP log file | 15 | Log file created by the `SET DATABASE PARAMETER(SMTP Log)` command. Stored in the Logs folder. | +| User settings file | 3 | settings.4DSettings file for all data files, stored in Preferences folder next to structure file if enabled. | +| User settings file for data | 4 | settings.4DSettings file for current data file, stored in Preferences folder next to the data file. | +| Verification log file | 5 | Log files created by the `VERIFY CURRENT DATA FILE` and `VERIFY DATA FILE` commands or the Maintenance and Security Center (MSC). Stored in the Logs folder. | If the target *fileConstant* does not exist, a null object is returned. No errors are raised. @@ -132,10 +132,10 @@ If the command is called from a component, pass the optional * parameter to get ## .create() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -146,9 +146,9 @@ If the command is called from a component, pass the optional * parameter to get **.create()** : Boolean -| Paramètres | Type | | Description | -| ---------- | ------- | -- | ---------------------------------------------------------- | -| Résultat | Booléen | <- | True if the file was created successfully, false otherwise | +| Parameter | Type | | Description | +| --------- | ------- | -- | ---------------------------------------------------------- | +| Result | Booléen | <- | True if the file was created successfully, false otherwise | #### Description @@ -157,12 +157,12 @@ The `.create()` function creates a file If necessary, the function creates the folder hierachy as described in the [platformPath](#platformpath) or [path](#path) properties. If the file already exists on disk, the function does nothing (no error is thrown) and returns false. -**Valeur retournée** +**Returned value** * **True** if the file is created successfully; * **False** if a file with the same name already exists or if an error occured. -#### Exemple +#### Example Creation of a preferences file in the database folder: @@ -179,22 +179,22 @@ Creation of a preferences file in the database folder: ## .createAlias() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    **.createAlias**( *destinationFolder* : 4D.Folder ; *aliasName* : Text { ; *aliasType* : Integer } ) : 4D.File -| Paramètres | Type | | Description | -| ----------------- | ----------- | -- | -------------------------------------------- | -| destinationFolder | 4D.Folder | -> | Destination folder for the alias or shortcut | -| aliasName | Texte | -> | Name of the alias or shortcut | -| aliasType | Entier long | -> | Type of the alias link | -| Résultat | 4D.File | <- | Alias or shortcut file reference | +| Parameter | Type | | Description | +| ----------------- | --------- | -- | -------------------------------------------- | +| destinationFolder | 4D.Folder | -> | Destination folder for the alias or shortcut | +| aliasName | Text | -> | Name of the alias or shortcut | +| aliasType | Integer | -> | Type of the alias link | +| Result | 4D.File | <- | Alias or shortcut file reference | @@ -206,10 +206,10 @@ Pass the name of the alias or shortcut to create in the *aliasName* parameter. By default on macOS, the function creates a standard alias. You can also create a symbolic link by using the *aliasType* parameter. The following constants are available: -| Constant | Valeur | Commentaire | -| ------------------ | ------ | -------------------------- | -| `fk alias link` | 0 | Alias link (default) | -| `fk symbolic link` | 1 | Symbolic link (macOS only) | +| Constant | Value | Comment | +| ------------------ | ----- | -------------------------- | +| `fk alias link` | 0 | Alias link (default) | +| `fk symbolic link` | 1 | Symbolic link (macOS only) | On Windows, a shortcut (.lnk file) is always created (the *aliasType* parameter is ignored). @@ -218,7 +218,7 @@ On Windows, a shortcut (.lnk file) is always created (the *aliasType* parameter A `4D.File` object with the `isAlias` property set to **true**. -#### Exemple +#### Example You want to create an alias to a file in your database folder: @@ -243,10 +243,10 @@ You want to create an alias to a file in your database folder: ## .delete() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -255,9 +255,9 @@ You want to create an alias to a file in your database folder: -| Paramètres | Type | | Description | -| ---------- | ---- | | ------------------------------- | -| | | | Does not require any parameters | +| Parameter | Type | | Description | +| --------- | ---- | | ------------------------------- | +| | | | Does not require any parameters | @@ -270,7 +270,7 @@ If the file is currently open, an error is generated. If the file does not exist on disk, the function does nothing (no error is generated). > **WARNING**: `.delete( )` can delete any file on a disk. This includes documents created with other applications, as well as the applications themselves. `.delete( )` should be used with extreme caution. Deleting a file is a permanent operation and cannot be undone. -#### Exemple +#### Example You want to delete a specific file in the database folder: @@ -350,10 +350,10 @@ You want to delete a specific file in the database folder: ## .moveTo() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -361,11 +361,11 @@ You want to delete a specific file in the database folder: **.moveTo**( *destinationFolder* : 4D.Folder { ; *newName* : Text } ) : 4D.File -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ----------------- | --------- | -- | ---------------------------- | | destinationFolder | 4D.Folder | -> | Destination folder | -| newName | Texte | -> | Full name for the moved file | -| Résultat | 4D.File | <- | Moved file | +| newName | Text | -> | Full name for the moved file | +| Result | 4D.File | <- | Moved file | @@ -382,7 +382,7 @@ By default, the file retains its name when moved. If you want to rename the move The moved `File` object. -#### Exemple +#### Example ```4d @@ -418,10 +418,10 @@ $myFile.moveTo($DocFolder.folder("Archives");"Infos_old.txt") ## .rename() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -429,10 +429,10 @@ $myFile.moveTo($DocFolder.folder("Archives");"Infos_old.txt") **.rename**( *newName* : Text ) : 4D.File -| Paramètres | Type | | Description | -| ---------- | ------- | -- | -------------------------- | -| newName | Texte | -> | New full name for the file | -| Résultat | 4D.File | <- | Renamed file | +| Parameter | Type | | Description | +| --------- | ------- | -- | -------------------------- | +| newName | Text | -> | New full name for the file | +| Result | 4D.File | <- | Renamed file | #### Description @@ -448,7 +448,7 @@ Note that the function modifies the full name of the file, i.e. if you do not pa The renamed `File` object. -#### Exemple +#### Example You want to rename "ReadMe.txt" in "ReadMe_new.txt": @@ -463,10 +463,10 @@ You want to rename "ReadMe.txt" in "ReadMe_new.txt": ## .setContent() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -474,9 +474,9 @@ You want to rename "ReadMe.txt" in "ReadMe_new.txt": **.setContent** ( *content* : Blob ) -| Paramètres | Type | | Description | -| ---------- | ---- | -- | ------------------------- | -| content | BLOB | -> | New contents for the file | +| Parameter | Type | | Description | +| --------- | ---- | -- | ------------------------- | +| content | BLOB | -> | New contents for the file | @@ -485,7 +485,7 @@ You want to rename "ReadMe.txt" in "ReadMe_new.txt": The `.setContent( )` function rewrites the entire content of the file using the data stored in the *content* BLOB. For information on BLOBs, please refer to the [BLOB](Concepts/dt_blob.md) section. -#### Exemple +#### Example ```4d $myFile:=Folder(fk documents folder).file("Archives/data.txt") @@ -500,10 +500,10 @@ The `.setContent( )` function rewrit ## .setText() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -512,12 +512,12 @@ The `.setContent( )` function rewrit -| Paramètres | Type | | Description | -| ----------- | ----------- | -- | ---------------------------------------------------------- | -| Texte | Texte | -> | Text to store in the file | -| charSetName | Texte | -> | Name of character set | -| charSetNum | Entier long | -> | Number of character set | -| breakMode | Entier long | -> | Processing mode for line breaks| +| Parameter | Type | | Description | +| ----------- | ------- | -- | ---------------------------------------------------------- | +| text | Text | -> | Text to store in the file | +| charSetName | Text | -> | Name of character set | +| charSetNum | Integer | -> | Number of character set | +| breakMode | Integer | -> | Processing mode for line breaks| | @@ -540,19 +540,19 @@ If a Byte Order Mark (BOM) exists for the character set, 4D inserts it into the In *breakMode*, you can pass a number indicating the processing to apply to end-of-line characters before saving them in the file. The following constants, found in the **System Documents** theme are available: -| Constant | Valeur | Commentaire | -| ----------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Document unchanged` | 0 | No processing | -| `Document with native format` | 1 | (Default) Line breaks are converted to the native format of the operating system: CR (carriage return) in macOS, CRLF (carriage return + line feed) in Windows | -| `Document with CRLF` | 2 | Line breaks are converted to Windows format: CRLF (carriage return + line feed) | -| `Document with CR` | 3 | Line breaks are converted to OS X format: CR (carriage return) | -| `Document with LF` | 4 | Line breaks are converted to Unix format: LF (line feed) | +| Constant | Value | Comment | +| ----------------------------- | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Document unchanged` | 0 | No processing | +| `Document with native format` | 1 | (Default) Line breaks are converted to the native format of the operating system: CR (carriage return) in macOS, CRLF (carriage return + line feed) in Windows | +| `Document with CRLF` | 2 | Line breaks are converted to Windows format: CRLF (carriage return + line feed) | +| `Document with CR` | 3 | Line breaks are converted to OS X format: CR (carriage return) | +| `Document with LF` | 4 | Line breaks are converted to Unix format: LF (line feed) | By default, when you omit the *breakMode* parameter, line breaks are processed in native mode (1). -#### Exemple +#### Example ```4d $myFile:=File("C:\\Documents\\Hello.txt";fk platform path) From 3a5c0e1e3622b53c998aad5b85f1bf5cec08a6a3 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:36:12 +0100 Subject: [PATCH 104/311] New translations folderClass.md (French) --- website/translated_docs/fr/API/folderClass.md | 168 +++++++++--------- 1 file changed, 84 insertions(+), 84 deletions(-) diff --git a/website/translated_docs/fr/API/folderClass.md b/website/translated_docs/fr/API/folderClass.md index 32509d1784c0c2..8f20bc3e6cfcfe 100644 --- a/website/translated_docs/fr/API/folderClass.md +++ b/website/translated_docs/fr/API/folderClass.md @@ -7,7 +7,7 @@ title: Folder `Folder` objects are created with the [`Folder`](#folder) command. They contain references to folders that may or may not actually exist on disk. For example, when you execute the `Folder` command to create a new folder, a valid `Folder` object is created but nothing is actually stored on disk until you call the [`folder.create( )`](#create-) function. -### Exemple +### Example The following example creates a "JohnSmith" folder: @@ -49,10 +49,10 @@ Form.curfolder:=Folder("C:\\Users\\JohnSmith\\";fk platform path) ## Folder -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -60,13 +60,13 @@ Form.curfolder:=Folder("C:\\Users\\JohnSmith\\";fk platform path) -| Paramètres | Type | | Description | -| -------------- | ----------- |:--:| ----------------------------------------------- | -| path | Texte | -> | Folder path | -| folderConstant | Entier long | -> | 4D folder constant | -| pathType | Entier long | -> | `fk posix path` (default) or `fk platform path` | -| * | | -> | * to return folder of host database | -| Résultat | 4D.Folder | <- | New folder object | +| Parameter | Type | | Description | +| -------------- | --------- |:--:| ----------------------------------------------- | +| path | Text | -> | Folder path | +| folderConstant | Integer | -> | 4D folder constant | +| pathType | Integer | -> | `fk posix path` (default) or `fk platform path` | +| * | | -> | * to return folder of host database | +| Result | 4D.Folder | <- | New folder object | @@ -82,30 +82,30 @@ In the *path* parameter, pass a folder path string. You can use a custom string By default, 4D expects a path expressed with the POSIX syntax. If you work with platform pathnames (Windows or macOS), you must declare it using the *pathType* parameter. The following constants are available: -| Constant | Valeur | Commentaire | -| ---------------- | ------ | --------------------------------------------------------------------------------------- | -| fk platform path | 1 | Path expressed with a platform-specific syntax (mandatory in case of platform pathname) | -| fk posix path | 0 | Path expressed with POSIX syntax (default) | +| Constant | Value | Comment | +| ---------------- | ----- | --------------------------------------------------------------------------------------- | +| fk platform path | 1 | Path expressed with a platform-specific syntax (mandatory in case of platform pathname) | +| fk posix path | 0 | Path expressed with POSIX syntax (default) | **Folder ( folderConstant { ; \* } )** In the *folderConstant* parameter, pass a 4D built-in or system folder, using one of the following constants: -| Constant | Valeur | Commentaire | -| -------------------------- | ------ | --------------------------------------------------------------------------------------------------- | -| fk applications folder | 116 | | -| fk data folder | 9 | Associated filesystem: "/DATA" | -| fk database folder | 4 | Associated filesystem: "/PACKAGE" | -| fk desktop folder | 115 | | -| fk documents folder | 117 | Document folder of the user | -| fk licenses folder | 1 | Folder containing the machine's 4D license files | -| fk logs folder | 7 | Associated filesystem: "/LOGS" | -| fk mobileApps folder | 10 | Associated filesystem: "/DATA" | -| fk remote database folder | 3 | 4D database folder created on each 4D remote machine | -| fk resources folder | 6 | Associated filesystem: "/RESOURCES" | -| fk system folder | 100 | | -| fk user preferences folder | 0 | 4D folder that stores user preference files within the \ directory. | -| fk web root folder | 8 | Current Web root folder of the database: if within the package "/PACKAGE/path", otherwise full path | +| Constant | Value | Comment | +| -------------------------- | ----- | --------------------------------------------------------------------------------------------------- | +| fk applications folder | 116 | | +| fk data folder | 9 | Associated filesystem: "/DATA" | +| fk database folder | 4 | Associated filesystem: "/PACKAGE" | +| fk desktop folder | 115 | | +| fk documents folder | 117 | Document folder of the user | +| fk licenses folder | 1 | Folder containing the machine's 4D license files | +| fk logs folder | 7 | Associated filesystem: "/LOGS" | +| fk mobileApps folder | 10 | Associated filesystem: "/DATA" | +| fk remote database folder | 3 | 4D database folder created on each 4D remote machine | +| fk resources folder | 6 | Associated filesystem: "/RESOURCES" | +| fk system folder | 100 | | +| fk user preferences folder | 0 | 4D folder that stores user preference files within the \ directory. | +| fk web root folder | 8 | Current Web root folder of the database: if within the package "/PACKAGE/path", otherwise full path | If the command is called from a component, pass the optional * parameter to get the path of the host database. Otherwise, if you omit the * parameter, a null object is always returned. @@ -118,10 +118,10 @@ If the command is called from a component, pass the optional * parameter to get ## .create() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -130,9 +130,9 @@ If the command is called from a component, pass the optional * parameter to get **.create()** : Boolean -| Paramètres | Type | | Description | -| ---------- | ------- | -- | ------------------------------------------------------------ | -| Résultat | Booléen | <- | True if the folder was created successfully, false otherwise | +| Parameter | Type | | Description | +| --------- | ------- | -- | ------------------------------------------------------------ | +| Result | Booléen | <- | True if the folder was created successfully, false otherwise | @@ -143,12 +143,12 @@ The `.create()` function creates a fol If necessary, the function creates the folder hierachy as described in the [platformPath](#platformpath) or [path](#path) properties. If the folder already exists on disk, the function does nothing (no error is thrown) and returns false. -**Valeur retournée** +**Returned value** * **True** if the folder is created successfully; * **False** if a folder with the same name already exists or if an error occured. -#### Exemple 1 +#### Example 1 Create an empty folder in the database folder: @@ -157,7 +157,7 @@ var $created : Boolean $created:=Folder("/PACKAGE/SpecialPrefs").create() ``` -#### Exemple 2 +#### Example 2 Creation of the "/Archives2019/January/" folder in the database folder: @@ -178,10 +178,10 @@ End if ## .createAlias() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -191,12 +191,12 @@ End if -| Paramètres | Type | | Description | -| ----------------- | ----------- | -- | -------------------------------------------- | -| destinationFolder | 4D.Folder | -> | Destination folder for the alias or shortcut | -| aliasName | Texte | -> | Name of the alias or shortcut | -| aliasType | Entier long | -> | Type of the alias link | -| Résultat | 4D.File | <- | Alias or shortcut reference | +| Parameter | Type | | Description | +| ----------------- | --------- | -- | -------------------------------------------- | +| destinationFolder | 4D.Folder | -> | Destination folder for the alias or shortcut | +| aliasName | Text | -> | Name of the alias or shortcut | +| aliasType | Integer | -> | Type of the alias link | +| Result | 4D.File | <- | Alias or shortcut reference | @@ -208,10 +208,10 @@ Pass the name of the alias or shortcut to create in the *aliasName* parameter. By default on macOS, the function creates a standard alias. You can also create a symbolic link by using the *aliasType* parameter. The following constants are available: -| Constant | Valeur | Commentaire | -| ------------------ | ------ | -------------------------- | -| `fk alias link` | 0 | Alias link (default) | -| `fk symbolic link` | 1 | Symbolic link (macOS only) | +| Constant | Value | Comment | +| ------------------ | ----- | -------------------------- | +| `fk alias link` | 0 | Alias link (default) | +| `fk symbolic link` | 1 | Symbolic link (macOS only) | On Windows, a shortcut (.lnk file) is always created (the *aliasType* parameter is ignored). @@ -219,7 +219,7 @@ On Windows, a shortcut (.lnk file) is always created (the *aliasType* parameter A `4D.File` object with the `isAlias` property set to **true**. -#### Exemple +#### Example You want to create an alias to an archive folder in your database folder: @@ -240,10 +240,10 @@ $aliasFile:=$myFolder.createAlias(Folder("/PACKAGE");"Jan2019") ## .delete() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -253,9 +253,9 @@ $aliasFile:=$myFolder.createAlias(Folder("/PACKAGE");"Jan2019") -| Paramètres | Type | | Description | -| ---------- | ----------- | -- | ---------------------- | -| option | Entier long | -> | Folder deletion option | +| Parameter | Type | | Description | +| --------- | ------- | -- | ---------------------- | +| option | Integer | -> | Folder deletion option | @@ -266,10 +266,10 @@ The `.delete()` function deletes the f By default, for security reasons, if you omit the option parameter, `.delete( )` only allows empty folders to be deleted. If you want the command to be able to delete folders that are not empty, you must use the option parameter with one of the following constants: -| Constant | Valeur | Commentaire | -| ---------------------- | ------ | ------------------------------------------------ | -| `Delete only if empty` | 0 | Deletes folder only when it is empty | -| `Delete with contents` | 1 | Deletes folder along with everything it contains | +| Constant | Value | Comment | +| ---------------------- | ----- | ------------------------------------------------ | +| `Delete only if empty` | 0 | Deletes folder only when it is empty | +| `Delete with contents` | 1 | Deletes folder along with everything it contains | When `Delete only if empty` is passed or if you omit the option parameter: @@ -356,10 +356,10 @@ When `Delete with contents` is passed: ## .moveTo() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -367,11 +367,11 @@ When `Delete with contents` is passed: **.moveTo**( *destinationFolder* : 4D.Folder { ; *newName* : Text } ) : 4D.Folder -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ----------------- | --------- | -- | ------------------------------ | | destinationFolder | 4D.Folder | -> | Destination folder | -| newName | Texte | -> | Full name for the moved folder | -| Résultat | 4D.Folder | <- | Moved folder | +| newName | Text | -> | Full name for the moved folder | +| Result | 4D.Folder | <- | Moved folder | @@ -387,7 +387,7 @@ By default, the folder retains its name when moved. If you want to rename the mo The moved `Folder` object. -#### Exemple +#### Example You want to move and rename a folder: @@ -426,10 +426,10 @@ You want to move and rename a folder: ## .rename() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -437,10 +437,10 @@ You want to move and rename a folder: -| Paramètres | Type | | Description | -| ---------- | --------- | -- | ---------------------------- | -| newName | Texte | -> | New full name for the folder | -| Résultat | 4D.Folder | <- | Renamed folder | +| Parameter | Type | | Description | +| --------- | --------- | -- | ---------------------------- | +| newName | Text | -> | New full name for the folder | +| Result | 4D.Folder | <- | Renamed folder | @@ -456,7 +456,7 @@ The *newName* parameter must comply with naming rules (e.g., it must not contain The renamed `Folder` object. -#### Exemple +#### Example ```4d From d4e8cbe96fc92d41f8f4ed0e51ec901bca0d3865 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:36:15 +0100 Subject: [PATCH 105/311] New translations formulaClass.md (French) --- .../translated_docs/fr/API/formulaClass.md | 90 +++++++++---------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/website/translated_docs/fr/API/formulaClass.md b/website/translated_docs/fr/API/formulaClass.md index 40c314ea630813..d1a3ec095db790 100644 --- a/website/translated_docs/fr/API/formulaClass.md +++ b/website/translated_docs/fr/API/formulaClass.md @@ -24,16 +24,16 @@ This property is an "object function", i.e. a function which is bound to its par $f.message() //displays "Hello world" ``` -La syntaxe avec des crochets est également prise en charge : +Syntax with brackets is also supported: ```4d $f["message"]() //displays "Hello world" ``` -Note that, even if it does not have parameters (see below), an object function to be executed must be called with ( ) parenthesis. En appelant uniquement une seule propriété, une nouvelle référence à la formule sera retournée (et ne sera pas exécutée) : +Note that, even if it does not have parameters (see below), an object function to be executed must be called with ( ) parenthesis. Calling only the object property will return a new reference to the formula (and will not execute it): ```4d - $o:=$f.message //retourne l'objet formule en $o + $o:=$f.message //returns the formula object in $o ``` You can also execute a function using the [`apply()`](#apply) and [`call()`](#call) functions: @@ -44,7 +44,7 @@ You can also execute a function using the [`apply()`](#apply) and [`call()`](#ca #### Passing parameters -You can pass parameters to your formulas using the [sequential parameter syntax](Concepts/parameters.md#sequential-parameters) based upon $1, $2...$n. Par exemple, vous pouvez écrire : +You can pass parameters to your formulas using the [sequential parameter syntax](Concepts/parameters.md#sequential-parameters) based upon $1, $2...$n. For example, you can write: ```4d var $f : Object @@ -64,7 +64,7 @@ Or using the [.call()](#call) function: #### Parameters to a single method -For more convenience, when the formula is made of a single project method, parameters can be omitted in the formula object initialization. They can just be passed when the formula is called. Par exemple: +For more convenience, when the formula is made of a single project method, parameters can be omitted in the formula object initialization. They can just be passed when the formula is called. For example: ```4d var $f : 4D.Function @@ -95,7 +95,7 @@ A `4D.Function` object contains a piece of code that can be executed from an obj -### Sommaire +### Summary | | @@ -110,21 +110,21 @@ A `4D.Function` object contains a piece of code that can be executed from an obj ## Formula -
    Historique -| Version | Modifications | +
    History +| Version | Changes | | ------- | -------------------------------- | | v17 R6 | Renamed (New formula -> Formula) | -| v17 R3 | Ajoutées | +| v17 R3 | Added |
    **Formula** ( *formulaExp* : Expression ) : 4D.Function -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ---------- | ----------- |:--:| ----------------------------------------- | | formulaExp | Expression | -> | Formula to be returned as object | -| Résultat | 4D.Function | <- | Native function encapsulating the formula | +| Result | 4D.Function | <- | Native function encapsulating the formula | @@ -159,7 +159,7 @@ If *formulaExp* uses local variables, their values are copied and stored in the The object created by `Formula` can be saved, for example, in a database field or in a blob document. -#### Exemple 1 +#### Example 1 A simple formula: @@ -173,7 +173,7 @@ A simple formula: $result:=$o.f() // returns 3 ``` -#### Exemple 2 +#### Example 2 A formula using local variables: @@ -248,21 +248,21 @@ Calling a formula using object notation: ## Formula from string -
    Historique -| Version | Modifications | +
    History +| Version | Changes | | ------- | ------------------------------------------------------ | | v17 R6 | Renamed New formula from string -> Formula from string | -| v17 R3 | Ajoutées | +| v17 R3 | Added |
    **Formula from string**( *formulaString* : Text ) : 4D.Function -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ------------- | ----------- |:--:| --------------------------------------- | -| formulaString | Texte | -> | Text formula to be returned as object | -| Résultat | 4D.Function | <- | Native object encapsulating the formula | +| formulaString | Text | -> | Text formula to be returned as object | +| Result | 4D.Function | <- | Native object encapsulating the formula | @@ -274,7 +274,7 @@ This command is similar to [`Formula`](#formula), except that it handles a text- > Because local variable contents can not be accessed by name in compiled mode, they can not be used in *formulaString*. An attempt to access a local variable with `Formula from string` will result in an error (-10737). -#### Exemple +#### Example The following code will create a dialog accepting a formula in text format: @@ -305,21 +305,21 @@ The following code will create a dialog accepting a formula in text format: ## .apply() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R3 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R3 | Added |
    **.apply**() : any
    **.apply**( *thisObj* : Object { ; *formulaParams* : Collection } ) : any -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ------------- | ---------- |:--:| ----------------------------------------------------------------------- | | thisObj | Objet | -> | Object to be returned by the This command in the formula | | formulaParams | Collection | -> | Collection of values to be passed as $1...$n when `formula` is executed | -| Résultat | any | <- | Value from formula execution | +| Result | any | <- | Value from formula execution | @@ -335,7 +335,7 @@ You can also pass a collection to be used as $1...$n parameters in the formula u Note that `.apply()` is similar to [`.call()`](#call) except that parameters are passed as a collection. This can be useful for passing calculated results. -#### Exemple 1 +#### Example 1 ```4d var $f : 4D.Function @@ -346,7 +346,7 @@ Note that `.apply()` is similar to [`.call()`](#call) except that parameters are ``` -#### Exemple 2 +#### Example 2 ```4d var $calc : 4D.Function @@ -366,21 +366,21 @@ Note that `.apply()` is similar to [`.call()`](#call) except that parameters are ## .call() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R3 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R3 | Added |
    **.call**() : any
    **.call**( *thisObj* : Object { ; ...*params* : any } ) : any -| Paramètres | Type | | Description | -| ---------- | ----- | -- | --------------------------------------------------------- | -| thisObj | Objet | -> | Object to be returned by the This command in the formula | -| params | any | -> | Value(s) to be passed as $1...$n when formula is executed | -| Résultat | any | <- | Value from formula execution | +| Parameter | Type | | Description | +| --------- | ----- | -- | --------------------------------------------------------- | +| thisObj | Objet | -> | Object to be returned by the This command in the formula | +| params | any | -> | Value(s) to be passed as $1...$n when formula is executed | +| Result | any | <- | Value from formula execution | @@ -394,7 +394,7 @@ You can also pass values to be used as *$1...$n* parameters in the formula using Note that `.call()` is similar to [`.apply()`](#apply) except that parameters are passed directly. -#### Exemple 1 +#### Example 1 ```4d var $f : 4D.Function @@ -402,7 +402,7 @@ Note that `.call()` is similar to [`.apply()`](#apply) except that parameters ar $result:=$f.call(Null;"hello") // returns "HELLO" ``` -#### Exemple 2 +#### Example 2 ```4d $o:=New object("value";50) @@ -417,10 +417,10 @@ Note that `.call()` is similar to [`.apply()`](#apply) except that parameters ar ## .source -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R2 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R2 | Added |
    @@ -431,9 +431,9 @@ Note that `.call()` is similar to [`.apply()`](#apply) except that parameters ar The `.source` property contains the source expression of the `formula` as text. -Cette propriété est en **lecture seule**. +This property is **read-only**. -#### Exemple +#### Example ```4d var $of : 4D.Function From ef68b7c17c4b5ac1d9ec2f8cb3a724ffb57c5b82 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:36:18 +0100 Subject: [PATCH 106/311] New translations imapTransporterClass.md (French) --- .../fr/API/imapTransporterClass.md | 356 +++++++++--------- 1 file changed, 178 insertions(+), 178 deletions(-) diff --git a/website/translated_docs/fr/API/imapTransporterClass.md b/website/translated_docs/fr/API/imapTransporterClass.md index 887e53b2d8f4e8..c41739c5d42814 100644 --- a/website/translated_docs/fr/API/imapTransporterClass.md +++ b/website/translated_docs/fr/API/imapTransporterClass.md @@ -38,20 +38,20 @@ IMAP Transporter objects are instantiated with the [IMAP New transporter](#imap- ## IMAP New transporter -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
    **IMAP New transporter**( *server* : Object ) : 4D.IMAPTransporter -| Paramètres | Type | | Description | -| ---------- | ------------------ |:--:| --------------------------------------------------- | -| server | Objet | -> | Mail server information | -| Résultat | 4D.IMAPTransporter | <- | [IMAP transporter object](#imap-transporter-object) | +| Parameter | Type | | Description | +| --------- | ------------------ |:--:| --------------------------------------------------- | +| server | Objet | -> | Mail server information | +| Result | 4D.IMAPTransporter | <- | [IMAP transporter object](#imap-transporter-object) | @@ -63,7 +63,7 @@ In the *server* parameter, pass an object containing the following properties: | *server* | Default value (if omitted) | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | -| [](#acceptunsecureconnection)

        | Faux | +| [](#acceptunsecureconnection)

        | False | | [](#authenticationmode)

        | the most secure authentication mode supported by the server is used | | [](#checkconnectiondelay)

        | 300 | | [](#connectiontimeout)

        | 30 | @@ -75,12 +75,12 @@ In the *server* parameter, pass an object containing the following properties: > **Warning**: Make sure the defined timeout is lower than the server timeout, otherwise the client timeout will be useless. -#### Résultat +#### Result The function returns an [**IMAP transporter object**](#imap-transporter-object). All returned properties are **read-only**. > The IMAP connection is automatically closed when the transporter object is destroyed. -#### Exemple +#### Example ```4d $server:=New object @@ -117,10 +117,10 @@ The function returns an [**IMAP transporter object**](#imap-transporter-object). ## .checkConnectionDelay -

    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
    @@ -141,21 +141,21 @@ The `.checkConnectionDelay` property contains ## .copy() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R5 | Added |
    **.copy**( *msgsIDs* : Collection ; *destinationBox* : Text ) : Object
    **.copy**( *allMsgs* : Integer ; *destinationBox* : Text ) : Object -| Paramètres | Type | | Description | -| -------------- | ----------- |:--:| ------------------------------------------------ | -| msgsIDs | Collection | -> | Collection of message unique IDs (strings) | -| allMsgs | Entier long | -> | `IMAP all`: All messages in the selected mailbox | -| destinationBox | Texte | -> | Mailbox to receive copied messages | -| Résultat | Objet | <- | Status of the copy operation | +| Parameter | Type | | Description | +| -------------- | ---------- |:--:| ------------------------------------------------ | +| msgsIDs | Collection | -> | Collection of message unique IDs (strings) | +| allMsgs | Integer | -> | `IMAP all`: All messages in the selected mailbox | +| destinationBox | Text | -> | Mailbox to receive copied messages | +| Result | Objet | <- | Status of the copy operation | @@ -175,19 +175,19 @@ The *destinationBox* parameter allows you to pass a text value with the name of The function returns an object describing the IMAP status: -| Propriété | | Type | Description | +| Property | | Type | Description | | ---------- | ----------------------- | ---------- | ---------------------------------------------------------------------------------------- | | success | | Booléen | True if the operation is successful, False otherwise | -| statusText | | Texte | Status message returned by the IMAP server, or last error returned in the 4D error stack | +| statusText | | Text | Status message returned by the IMAP server, or last error returned in the 4D error stack | | errors | | Collection | 4D error stack (not returned if a IMAP server response is received) | -| errors | \[].errcode | Nombre | 4D error code | -| errors | \[].message | Texte | Description of the 4D error | -| errors | \[].componentSignature | Texte | Signature of the internal component which returned the error | +| errors | \[].errcode | Number | 4D error code | +| errors | \[].message | Text | Description of the 4D error | +| errors | \[].componentSignature | Text | Signature of the internal component which returned the error | -#### Exemple 1 +#### Example 1 To copy a selection of messages: @@ -215,7 +215,7 @@ To copy a selection of messages: $status:=$transporter.copy($mailIds;"documents") ``` -#### Exemple 2 +#### Example 2 To copy all messages in the current mailbox: @@ -246,21 +246,21 @@ To copy all messages in the current mailbox: ## .delete() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R5 | Added |
    **.delete**( *msgsIDs* : Collection ) : Object
    **.delete**( *allMsgs* : Integer ) : Object -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| ------------------------------------------------ | -| msgsIDs | Collection | -> | Collection of message unique IDs (strings) | -| allMsgs | Entier long | -> | `IMAP all`: All messages in the selected mailbox | -| Résultat | Objet | <- | Status of the delete operation | +| Parameter | Type | | Description | +| --------- | ---------- |:--:| ------------------------------------------------ | +| msgsIDs | Collection | -> | Collection of message unique IDs (strings) | +| allMsgs | Integer | -> | `IMAP all`: All messages in the selected mailbox | +| Result | Objet | <- | Status of the delete operation | @@ -280,19 +280,19 @@ Executing this function does not actually remove messages. Messages with the "de The function returns an object describing the IMAP status: -| Propriété | | Type | Description | +| Property | | Type | Description | | ---------- | ----------------------- | ---------- | ---------------------------------------------------------------------------------------- | | success | | Booléen | True if the operation is successful, False otherwise | -| statusText | | Texte | Status message returned by the IMAP server, or last error returned in the 4D error stack | +| statusText | | Text | Status message returned by the IMAP server, or last error returned in the 4D error stack | | errors | | Collection | 4D error stack (not returned if a IMAP server response is received) | -| errors | \[].errcode | Nombre | 4D error code | -| errors | \[].message | Texte | Description of the 4D error | -| errors | \[].componentSignature | Texte | Signature of the internal component which returned the error | +| errors | \[].errcode | Number | 4D error code | +| errors | \[].message | Text | Description of the 4D error | +| errors | \[].componentSignature | Text | Signature of the internal component which returned the error | -#### Exemple 1 +#### Example 1 To delete a selection of messages: @@ -320,7 +320,7 @@ To delete a selection of messages: $status:=$transporter.delete($mailIds) ``` -#### Exemple 2 +#### Example 2 To delete all messages in the current mailbox: @@ -351,21 +351,21 @@ To delete all messages in the current mailbox: ## .getBoxInfo() -
    Historique -| Version | Modifications | +
    History +| Version | Changes | | ------- | ---------------- | | v18 R5 | name is optional | -| v18 R4 | Ajoutées | +| v18 R4 | Added |
    **.getBoxInfo**( { *name* : Text }) : Object -| Paramètres | Type | | Description | -| ---------- | ----- |:--:| ------------------- | -| name | Texte | -> | Name of the mailbox | -| Résultat | Objet | <- | boxInfo object | +| Parameter | Type | | Description | +| --------- | ----- |:--:| ------------------- | +| name | Text | -> | Name of the mailbox | +| Result | Objet | <- | boxInfo object | @@ -380,15 +380,15 @@ In the optional *name* parameter, pass the name of the mailbox to access. The na The `boxInfo` object returned contains the following properties: -| Propriété | Type | Description | +| Property | Type | Description | | ---------- | ------ | ------------------------------------------------------------------- | -| name | Texte | Name of the mailbox | -| mailCount | number | Nombre de messages contenus dans la boîte de réception | +| name | text | Name of the mailbox | +| mailCount | number | Number of messages in the mailbox | | mailRecent | number | Number of messages with the "recent" flag (indicating new messages) | -#### Exemple +#### Example ```4d var $transporter : 4D.IMAPTransporter @@ -406,19 +406,19 @@ The `boxInfo` object returned contains the following properties: ## .getBoxList() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
    **.getBoxList()** : Collection -| Paramètres | Type | | Description | -| ---------- | ---------- |:--:| ----------------------------- | -| Résultat | Collection | <- | Collection of mailbox objects | +| Parameter | Type | | Description | +| --------- | ---------- |:--:| ----------------------------- | +| Result | Collection | <- | Collection of mailbox objects | @@ -426,13 +426,13 @@ The `boxInfo` object returned contains the following properties: The `.getBoxList()` function returns a collection of mailboxes describing all of the available mailboxes. This function allows you to locally manage the list of messages located on the IMAP mail server. -#### Résultat +#### Result Each object of the returned collection contains the following properties: -| Propriété | Type | Description | +| Property | Type | Description | | ---------------- | ------- | ------------------------------------------------------------------------------------------------------------------- | -| \[].name | Texte | Name of the mailbox | +| \[].name | text | Name of the mailbox | | \[].selectable | boolean | Indicates whether or not the access rights allow the mailbox to be selected:
    • true - the mailbox can be selected
    • false - the mailbox can not be selected
    | | \[].inferior | boolean | Indicates whether or not the access rights allow creating a lower hierachy in the mailbox:
    • true - a lower level can be created
    • false - a lower level can not be created
    | | \[].interesting | boolean | Indicates if the mailbox has been marked "interesting" by the server:
    • true - The mailbox has been marked "interesting" by the server. For example, it may contain new messages.
    • false - The mailbox has not been marked "interesting" by the server.
    | @@ -443,7 +443,7 @@ If the account does not contain any mailboxes, an empty collection is returned. > * If the connection has not been used since the designated connection delay (see `IMAP New transporter`), the `.checkConnection( )` function is automatically called. -#### Exemple +#### Example ```4d @@ -467,19 +467,19 @@ If the account does not contain any mailboxes, an empty collection is returned. ## .getDelimiter() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
    **.getDelimiter()** : Text -| Paramètres | Type | | Description | -| ---------- | ----- |:--:| ----------------------------- | -| Résultat | Texte | <- | Hierarchy delimiter character | +| Parameter | Type | | Description | +| --------- | ---- |:--:| ----------------------------- | +| Result | Text | <- | Hierarchy delimiter character | @@ -493,7 +493,7 @@ The delimiter is a character which can be used to: * search higher or lower within the mailbox hierarchy -#### Résultat +#### Result Mailbox name delimiter character. > * If there is no open connection, `.getDelimiter( )` will open a connection. @@ -501,7 +501,7 @@ Mailbox name delimiter character. -#### Exemple +#### Example ```4d @@ -525,22 +525,22 @@ Mailbox name delimiter character. ## .getMail() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
    **.getMail**( *msgNumber*: Integer { ; *options* : Object } ) : Object
    **.getMail**( *msgID*: Text { ; *options* : Object } ) : Object -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| ------------------------------------------------ | -| msgNumber | Entier long | -> | Sequence number of the message | -| msgID | Texte | -> | ID unique du message | -| options | Objet | -> | Message handling instructions | -| Résultat | Objet | <- | [Email object](emailObjectClass.md#email-object) | +| Parameter | Type | | Description | +| --------- | ------- |:--:| ------------------------------------------------ | +| msgNumber | Integer | -> | Sequence number of the message | +| msgID | Text | -> | Unique ID of the message | +| options | Objet | -> | Message handling instructions | +| Result | Objet | <- | [Email object](emailObjectClass.md#email-object) | @@ -555,7 +555,7 @@ In the first parameter, you can pass either: The optional *options* parameter allows you pass an object defining additional instructions for handling the message. The following properties are available: -| Propriété | Type | Description | +| Property | Type | Description | | ---------- | ------- | --------------------------------------------------------------------------------------------------------------------------- | | updateSeen | boolean | If True, the message is marked as "seen" in the mailbox. If False, the message is not marked as "seen". Default value: True | | withBody | boolean | Pass True to return the body of the message. If False, only the message header is returned. Default value: True | @@ -564,11 +564,11 @@ The optional *options* parameter allows you pass an object defining additional i > * If there is no open connection, `.getMail()` will open a connection the last mailbox specified with [`.selectBox()`](#selectbox)`. -#### Résultat +#### Result `.getMail()` returns an [`Email` object](emailObjectClass.md#email-object) with the following specific IMAP properties: *id*, *receivedAt*, and *size*. -#### Exemple +#### Example You want to get the message with ID = 1: @@ -600,23 +600,23 @@ You want to get the message with ID = 1: ## .getMails() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R5 | Added |
    **.getMails**( *ids* : Collection { ; *options* : Object } ) : Object
    **.getMails**( *startMsg* : Integer ; *endMsg* : Integer { ; *options* : Object } ) : Object -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| ------------------------------------------------------ | -| ids | Collection | -> | Collection of message ID | -| startMsg | Entier long | -> | Sequence number of the first message | -| endMsg | Entier long | -> | Sequence number of the last message | -| options | Objet | -> | Message handling instructions | -| Résultat | Objet | <- | Object containing:
    • a collection of [Email objects](emailObjectClass.md#email-object) and
    • a collection of IDs or numbers for missing messages, if any
    | +| Parameter | Type | | Description | +| --------- | ---------- |:--:| ------------------------------------------------------ | +| ids | Collection | -> | Collection of message ID | +| startMsg | Integer | -> | Sequence number of the first message | +| endMsg | Integer | -> | Sequence number of the last message | +| options | Objet | -> | Message handling instructions | +| Result | Objet | <- | Object containing:
    • a collection of [Email objects](emailObjectClass.md#email-object) and
    • a collection of IDs or numbers for missing messages, if any
    | @@ -648,7 +648,7 @@ The optional *options* parameter allows you to define the parts of the messages **Options** -| Propriété | Type | Description | +| Property | Type | Description | | ---------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------- | | updateSeen | Booléen | If True, the specified messages are marked as "seen" in the mailbox. If False, the messages are not marked as "seen". Default value: True | | withBody | Booléen | Pass True to return the body of the specified messages. If False, only the message headers are returned. Default value: True | @@ -656,18 +656,18 @@ The optional *options* parameter allows you to define the parts of the messages > * If there is no open connection, `.getMails()` will open a connection the last mailbox specified with [`.selectBox()`](#selectbox). -#### Résultat +#### Result `.getMails()` returns an object containing the following collections: -| Propriété | Type | Description | -| --------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------- | -| liste | Collection | Collection of [`Email` objects](emailObjectClass.md#email-object). If no Email objects are found, an empty collection is returned. | -| notFound | Collection | Collection of:
    • first syntax - previously passed message IDs that do not exist
    • second syntax - sequence numbers of messages between startMsg and endMsg that do not exist
    An empty collection is returned if all messages are found. | +| Property | Type | Description | +| -------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| list | Collection | Collection of [`Email` objects](emailObjectClass.md#email-object). If no Email objects are found, an empty collection is returned. | +| notFound | Collection | Collection of:
    • first syntax - previously passed message IDs that do not exist
    • second syntax - sequence numbers of messages between startMsg and endMsg that do not exist
    An empty collection is returned if all messages are found. | -#### Exemple +#### Example You want to retrieve the 20 most recent emails without changing their "seen" status: @@ -704,10 +704,10 @@ You want to retrieve the 20 most recent emails without changing their "seen" sta ## .getMIMEAsBlob() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
    @@ -715,12 +715,12 @@ You want to retrieve the 20 most recent emails without changing their "seen" sta -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| --------------------------------------------------------------------------------------------- | -| msgNumber | Entier long | -> | Sequence number of the message | -| msgID | Texte | -> | ID unique du message | -| updateSeen | Booléen | -> | If True, the message is marked "seen" in the mailbox. If False the message is left untouched. | -| Résultat | BLOB | <- | Blob of the MIME string returned from the mail server | +| Parameter | Type | | Description | +| ---------- | ------- |:--:| --------------------------------------------------------------------------------------------- | +| msgNumber | Integer | -> | Sequence number of the message | +| msgID | Text | -> | Unique ID of the message | +| updateSeen | Booléen | -> | If True, the message is marked "seen" in the mailbox. If False the message is left untouched. | +| Result | BLOB | <- | Blob of the MIME string returned from the mail server | @@ -742,12 +742,12 @@ The optional *updateSeen* parameter allows you to specify if the message is mark > * If there is no open connection, `.getMIMEAsBlob()` will open a connection the last mailbox specified with `.selectBox( )`. -#### Résultat +#### Result `.getMIMEAsBlob()` returns a `BLOB` which can be archived in a database or converted to an [`Email` object](emailObjectClass.md#email-object) with the `MAIL Convert from MIME` command. -#### Exemple +#### Example ```4d @@ -788,22 +788,22 @@ The optional *updateSeen* parameter allows you to specify if the message is mark ## .move() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R5 | Added |
    **.move**( *msgsIDs* : Collection ; *destinationBox* : Text ) : Object
    **.move**( *allMsgs* : Integer ; *destinationBox* : Text ) : Object -| Paramètres | Type | | Description | -| -------------- | ----------- |:--:| ------------------------------------------------ | -| msgsIDs | Collection | -> | Collection of message unique IDs (strings) | -| allMsgs | Entier long | -> | `IMAP all`: All messages in the selected mailbox | -| destinationBox | Texte | -> | Mailbox to receive moved messages | -| Résultat | Objet | <- | Status of the move operation | +| Parameter | Type | | Description | +| -------------- | ---------- |:--:| ------------------------------------------------ | +| msgsIDs | Collection | -> | Collection of message unique IDs (strings) | +| allMsgs | Integer | -> | `IMAP all`: All messages in the selected mailbox | +| destinationBox | Text | -> | Mailbox to receive moved messages | +| Result | Objet | <- | Status of the move operation | @@ -825,19 +825,19 @@ The *destinationBox* parameter allows you to pass a text value with the name of The function returns an object describing the IMAP status: -| Propriété | | Type | Description | +| Property | | Type | Description | | ---------- | ----------------------- | ---------- | ---------------------------------------------------------------------------------------- | | success | | Booléen | True if the operation is successful, False otherwise | -| statusText | | Texte | Status message returned by the IMAP server, or last error returned in the 4D error stack | +| statusText | | Text | Status message returned by the IMAP server, or last error returned in the 4D error stack | | errors | | Collection | 4D error stack (not returned if a IMAP server response is received) | -| errors | \[].errcode | Nombre | 4D error code | -| errors | \[].message | Texte | Description of the 4D error | -| errors | \[].componentSignature | Texte | Signature of the internal component which returned the error | +| errors | \[].errcode | Number | 4D error code | +| errors | \[].message | Text | Description of the 4D error | +| errors | \[].componentSignature | Text | Signature of the internal component which returned the error | -#### Exemple 1 +#### Example 1 To move a selection of messages: @@ -864,7 +864,7 @@ To move a selection of messages: $status:=$transporter.move($mailIds;"documents") ``` -#### Exemple 2 +#### Example 2 To move all messages in the current mailbox: @@ -895,21 +895,21 @@ To move all messages in the current mailbox: ## .numToID() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R5 | Added |
    **.numToID**( *startMsg* : Integer ; *endMsg* : Integer ) : Collection -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| ------------------------------------ | -| startMsg | Entier long | -> | Sequence number of the first message | -| endMsg | Entier long | -> | Sequence number of the last message | -| Résultat | Collection | <- | Collection of unique IDs | +| Parameter | Type | | Description | +| --------- | ---------- |:--:| ------------------------------------ | +| startMsg | Integer | -> | Sequence number of the first message | +| endMsg | Integer | -> | Sequence number of the last message | +| Result | Collection | <- | Collection of unique IDs | @@ -922,11 +922,11 @@ In the *startMsg* parameter, pass an integer value corresponding to the number o In the *endMsg* parameter, pass an integer value corresponding to the number of the last message to be included in a sequential range. If you pass a negative number (*endMsg* <= 0), the last message of the mailbox will be used as the end of the sequence. -#### Résultat +#### Result The function returns a collection of strings (unique IDs). -#### Exemple +#### Example ```4d @@ -962,20 +962,20 @@ The function returns a collection of strings (unique IDs). ## .searchMails() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R5 | Added |
    **.searchMails**( *searchCriteria* : Text ) : Collection -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | -------------- | ---------- |:--:| ----------------------------- | -| searchCriteria | Texte | -> | Search criteria | -| Résultat | Collection | <- | Collection of message numbers | +| searchCriteria | Text | -> | Search criteria | +| Result | Collection | <- | Collection of message numbers | @@ -985,7 +985,7 @@ The function returns a collection of strings (unique IDs). The `.searchMails()` function searches for messages that match the given *searchCriteria* in the current mailbox. *searchCriteria* consists of one or more search keys. -*searchCriteria* is a text parameter listing one or more search keys (see [Authorized search-keys](#authorized-search-keys) below) associated or not with values to look for. A search key may be a single or multiple items. Par exemple: +*searchCriteria* is a text parameter listing one or more search keys (see [Authorized search-keys](#authorized-search-keys) below) associated or not with values to look for. A search key may be a single or multiple items. For example: ``` SearchKey1 = FLAGGED @@ -1085,7 +1085,7 @@ Search-keys may request the value to search for: **LARGER** : Messages with a size larger than the specified number of bytes. **SMALLER** : Messages with a size smaller than the specified number of bytes. **NOT** : Messages that do not match the specified search key. -**OU** : Messages that match either search key. +**OR** : Messages that match either search key. @@ -1094,21 +1094,21 @@ Search-keys may request the value to search for: ## .selectBox() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
    **.selectBox**( *name* : Text { ; *state* : Integer } ) : Object -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| --------------------- | -| name | Texte | -> | Name of the mailbox | -| state | Entier long | -> | Mailbox access status | -| Résultat | Objet | <- | boxInfo object | +| Parameter | Type | | Description | +| --------- | ------- |:--:| --------------------- | +| name | Text | -> | Name of the mailbox | +| state | Integer | -> | Mailbox access status | +| Result | Objet | <- | boxInfo object | @@ -1121,10 +1121,10 @@ In the *name* parameter, pass the name of the mailbox to access. The name repres The optional *state* parameter defines the type of access to the mailbox. The possible values are: -| Constant | Valeur | Commentaire | -| --------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| IMAP read only state | 1 | The selected mailbox is accessed with read only privileges. Messages with a "recent" flag (indicating new messages) remain unchanged. | -| IMAP read write state | 0 | The selected mailbox is accessed with read and write privileges. Messages are considered "seen" and lose the "recent" flag (indicating new messages). (Default value) | +| Constant | Value | Comment | +| --------------------- | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| IMAP read only state | 1 | The selected mailbox is accessed with read only privileges. Messages with a "recent" flag (indicating new messages) remain unchanged. | +| IMAP read write state | 0 | The selected mailbox is accessed with read and write privileges. Messages are considered "seen" and lose the "recent" flag (indicating new messages). (Default value) | > * The function generates an error and returns **Null** if name designates a non-existing mailbox. > * If there is no open connection, `.selectBox()` will open a connection. > * If the connection has not been used since the designated connection delay (see `IMAP New transporter`), the [`.checkConnection()`](#checkconnection) function is automatically called. @@ -1133,14 +1133,14 @@ The optional *state* parameter defines the type of access to the mailbox. The po The `boxInfo` object returned contains the following properties: -| Propriété | Type | Description | -| ---------- | ------ | ------------------------------------------------------ | -| name | Texte | Name of the mailbox | -| mailCount | number | Nombre de messages contenus dans la boîte de réception | -| mailRecent | number | Number of messages with the "recent" flag | +| Property | Type | Description | +| ---------- | ------ | ----------------------------------------- | +| name | Text | Name of the mailbox | +| mailCount | number | Number of messages in the mailbox | +| mailRecent | number | Number of messages with the "recent" flag | -#### Exemple +#### Example ```4d From ecd0ae1ea7cb744eb854fabc257fa5ba8aab7be8 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:36:20 +0100 Subject: [PATCH 107/311] New translations overview.md (French) --- website/translated_docs/fr/API/overview.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/website/translated_docs/fr/API/overview.md b/website/translated_docs/fr/API/overview.md index 40ed294fbbcb5e..1a3cc49931b167 100644 --- a/website/translated_docs/fr/API/overview.md +++ b/website/translated_docs/fr/API/overview.md @@ -1,27 +1,27 @@ --- id: overview -title: Aperçu - API des classes +title: Class API Overview --- -Cette section décrit l'API de classes 4D intégrées ainsi que les commandes associées du constructeur. Les propriétés et fonctions de classe 4D sont disponibles via les objets d'instance de classe. +This section describes the built-in 4D class API as well as the associated constructor commands. 4D class functions and properties are available through class instance objects. - functions must be called on instances with the () operator. For example, `collection.sort()`. - properties are accessed without parentheses, for example `file.creationTime`. You can also use the \[] syntax, for example `file["creationTime"]`. -## Conventions d'écriture +## Writing conventions -Les conventions suivantes sont utilisées dans la syntaxe de la fonction : +The following conventions are used in the function syntax: -- les caractères `{ }` (accolades) indiquent des paramètres facultatifs. Par exemple, `.delete( { option : Integer } )` signifie que le paramètre *option* peut être omis lors de l'appel de la fonction. -- la notation `{ ; ...param }` indique un nombre illimité de paramètres. Par exemple, `.concat( value : any { ;...valueN } ) : Collection` signifie qu'un nombre illimité de valeurs de n'importe quel type peut être passé à la fonction. +- the `{ }` characters (braces) indicate optional parameters. For example, `.delete( { option : Integer } )` means that the *option* parameter may be omitted when calling the function. +- the `{ ; ...param }` notation indicates an unlimited number of parameters. For example, `.concat( value : any { ;...valueN } ) : Collection` means that an unlimited number of values of any type can be passed to the function. - the `any` keyword is used for parameters that can be of any type that can be stored within attributes (number, text, boolean, date, time, object, collection...). -## Autres ressources +## Other resources -Pour une présentation générale des fondements et concepts du langage 4D, veuillez consulter la section [Concepts du langage 4D](Concepts/about.md). +For an overall presentation of the 4D Language basics and concepts, please go to the [4D Language Concepts](Concepts/about.md) section. -Pour une description du langage «classique» de 4D, veuillez vous reporter au manuel de *Langage 4D* sur [doc.4d.com](https://doc.4d.com). +For a description of the 4D "classic" language, please go to the *4D Language Reference* on [doc.4d.com](https://doc.4d.com). From 5548982d53ac5d6fcbcd1243d49cc8aafdf519e6 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:36:23 +0100 Subject: [PATCH 108/311] New translations signalClass.md (French) --- website/translated_docs/fr/API/signalClass.md | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/website/translated_docs/fr/API/signalClass.md b/website/translated_docs/fr/API/signalClass.md index 8a33c4ba60b3d2..458776bd1b2298 100644 --- a/website/translated_docs/fr/API/signalClass.md +++ b/website/translated_docs/fr/API/signalClass.md @@ -40,7 +40,7 @@ Once a signal has been released using a `signal.trigger()` call, it cannot be re Since a signal object is a [shared object](Concepts/shared.md), you can use it to return results from called workers/processes, provided that you do not forget to write values within a `Use...End use` structure (see example). -### Exemple +### Example ```4d var $signal : 4D.Signal @@ -80,7 +80,7 @@ Since a signal object is a [shared object](Concepts/shared.md), you can use it t $signal.trigger() ``` -### Sommaire +### Summary | | @@ -97,20 +97,20 @@ Since a signal object is a [shared object](Concepts/shared.md), you can use it t ## New signal -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R4 | Added |
    **New signal** { ( *description* : Text ) } : 4D.Signal -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ----------- | --------- |:--:| -------------------------------------- | -| description | Texte | -> | Description for the signal | -| Résultat | 4D.Signal | <- | Native object encapsulating the signal | +| description | Text | -> | Description for the signal | +| Result | 4D.Signal | <- | Native object encapsulating the signal | @@ -128,11 +128,11 @@ Optionally, in the *description* parameter you can pass a custom text describing Since the signal object is a shared object, it can also be used to maintain user properties, including the [`.description`](#description) property, by calling the `Use...End use` structure. -**Valeur retournée** +**Returned value** A new [`4D.Signal` object](#signal-object). -#### Exemple +#### Example Here is a typical example of a worker that sets a signal: @@ -169,10 +169,10 @@ The ***doSomething*** method could be like: ## .description -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R4 | Added |
    @@ -193,10 +193,10 @@ This property is **read-write**. ## .signaled -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R4 | Added |
    @@ -207,7 +207,7 @@ This property is **read-write**. The `.signaled` property contains the current state of the `Signal` object. When the signal is created, `.signaled` is **False**. It becomes **True** when the `.trigger( )` is called on the object. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -216,19 +216,19 @@ Cette propriété est en **lecture seule**. ## .trigger() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R4 | Added |
    **.trigger( )** -| Paramètres | Type | | Description | -| ---------- | ---- |::| ------------------------------- | -| | | | Does not require any parameters | +| Parameter | Type | | Description | +| --------- | ---- |::| ------------------------------- | +| | | | Does not require any parameters | @@ -245,20 +245,20 @@ If the signal is already in the signaled state (i.e., the `signaled` property is ## .wait() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R4 | Added |
    **.wait**( { *timeout* : Real } ) : Boolean -| Paramètres | Type | | Description | -| ---------- | ------- | -- | ---------------------------------------------- | -| timeout | Réel | -> | Maximum waiting time for the signal in seconds | -| Résultat | Booléen | <- | State of the `.signaled` property | +| Parameter | Type | | Description | +| --------- | ------- | -- | ---------------------------------------------- | +| timeout | Real | -> | Maximum waiting time for the signal in seconds | +| Result | Booléen | <- | State of the `.signaled` property | From 078653c679df94707d78241734f7638e10352a4e Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:36:25 +0100 Subject: [PATCH 109/311] New translations directory.md (French) --- website/translated_docs/fr/API/directory.md | 340 ++++++++++---------- 1 file changed, 170 insertions(+), 170 deletions(-) diff --git a/website/translated_docs/fr/API/directory.md b/website/translated_docs/fr/API/directory.md index ec12f2a22a8d75..292320e367505c 100644 --- a/website/translated_docs/fr/API/directory.md +++ b/website/translated_docs/fr/API/directory.md @@ -1,6 +1,6 @@ --- id: directory -title: Classe Directory +title: Directory Class --- ## Description @@ -9,10 +9,10 @@ title: Classe Directory ## .creationDate -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -21,9 +21,9 @@ title: Classe Directory #### Description -La propriété `.creationDate` retourne la date de création du dossier.. +The `.creationDate` property returns the creation date of the folder. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -32,10 +32,10 @@ Cette propriété est en **lecture seule**. ## .creationTime -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -45,9 +45,9 @@ Cette propriété est en **lecture seule**. #### Description -La propriété `.creationTime` retourne l'heure de création du dossier (exprimée en nombre de secondes, commençant à 00:00). +The `.creationTime` property returns the creation time of the folder (expressed as a number of seconds beginning at 00:00). -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -57,10 +57,10 @@ Cette propriété est en **lecture seule**. ## .exists -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -69,9 +69,9 @@ Cette propriété est en **lecture seule**. #### Description -La propriété `.exists` retourne true si le dossier existe sur le disque, et retourne false dans le cas contraire. +The `.exists` property returns true if the folder exists on disk, and false otherwise. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -82,10 +82,10 @@ Cette propriété est en **lecture seule**. ## .extension -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -94,9 +94,9 @@ Cette propriété est en **lecture seule**. #### Description -La propriété `.extension` retourne l'extension du nom du dossier (le cas échéant). Une extension commence toujours par ".". La propriété retourne une chaîne vide si le nom du dossier n'a pas d'extension. +The `.extension` property returns the extension of the folder name (if any). An extension always starts with ".". The property returns an empty string if the folder name does not have an extension. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -106,10 +106,10 @@ Cette propriété est en **lecture seule**. ## .fullName -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -118,9 +118,9 @@ Cette propriété est en **lecture seule**. #### Description -La propriété `.fullName` retourne le nom complet du dossier, y compris son extension (le cas échéant). +The `.fullName` property returns the full name of the folder, including its extension (if any). -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -130,10 +130,10 @@ Cette propriété est en **lecture seule**. ## .hidden -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -142,9 +142,9 @@ Cette propriété est en **lecture seule**. #### Description -La propriété `.hidden` retourne true si le dossier est défini comme "hidden" au niveau du système, et retourne false dans le cas contraire. +The `.hidden` property returns true if the folder is set as "hidden" at the system level, and false otherwise. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -154,10 +154,10 @@ Cette propriété est en **lecture seule**. ## .isAlias -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -167,9 +167,9 @@ Cette propriété est en **lecture seule**. #### Description -La propriété `.isAlias` retourne toujours **false** pour un objet `Folder`. +The `.isAlias` property returns always **false** for a `Folder` object. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -178,10 +178,10 @@ Cette propriété est en **lecture seule**. ## .isFile -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -190,9 +190,9 @@ Cette propriété est en **lecture seule**. #### Description -La propriété `.isFile` retournetoujours **false** pour un dossier. +The `.isFile` property returns always **false** for a folder. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -201,10 +201,10 @@ Cette propriété est en **lecture seule**. ## .isFolder -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -213,9 +213,9 @@ Cette propriété est en **lecture seule**. #### Description -La propriété `.isFolder` retourne toujours **false** pour un dossier. +The `.isFolder` property returns always **true** for a folder. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -224,10 +224,10 @@ Cette propriété est en **lecture seule**. ## .isPackage -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -236,11 +236,11 @@ Cette propriété est en **lecture seule**. #### Description -La propriété `.isPackage` retourne true si le dossier est un package sous macOS (et s'il existe sur le disque). Sinon, elle retourne false. +The `.isPackage` property returns true if the folder is a package on macOS (and exists on disk). Otherwise, it returns false. -Sous Windows, `.isPackage` retourne toujours **false**. +On Windows, `.isPackage` always returns **false**. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -250,10 +250,10 @@ Cette propriété est en **lecture seule**. ## .modificationDate -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -264,7 +264,7 @@ Cette propriété est en **lecture seule**. The `.modificationDate` property returns the date of the folder's last modification. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -274,10 +274,10 @@ Cette propriété est en **lecture seule**. ## .modificationTime -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -288,7 +288,7 @@ Cette propriété est en **lecture seule**. The `.modificationTime` property returns the time of the folder's last modification (expressed as a number of seconds beginning at 00:00). -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -297,10 +297,10 @@ Cette propriété est en **lecture seule**. ## .name -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -313,7 +313,7 @@ Cette propriété est en **lecture seule**. The `.name` property returns the name of the folder, without extension (if any). -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -322,10 +322,10 @@ Cette propriété est en **lecture seule**. ## .original -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -336,7 +336,7 @@ Cette propriété est en **lecture seule**. The `.original` property returns the same Folder object as the folder. -Cette propriété est en **lecture seule**. +This property is **read-only**. > This property is available on folders to allow generic code to process folders or files. @@ -347,10 +347,10 @@ Cette propriété est en **lecture seule**. ## .parent -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -363,7 +363,7 @@ The `.parent` property returns the parent If the folder does not have a parent (root), the null value is returned. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -373,10 +373,10 @@ Cette propriété est en **lecture seule**. ## .path -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -387,7 +387,7 @@ Cette propriété est en **lecture seule**. The `.path` property returns the POSIX path of the folder. If the path represents a filesystem (e.g., "/DATA/"), the filesystem is returned. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -396,10 +396,10 @@ Cette propriété est en **lecture seule**. ## .platformPath -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -410,7 +410,7 @@ Cette propriété est en **lecture seule**. The `.platformPath` property returns the path of the folder expressed with the current platform syntax. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -424,22 +424,22 @@ Cette propriété est en **lecture seule**. ## .copyTo() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    **.copyTo**( *destinationFolder* : 4D.Folder { ; *newName* : Text } { ; *overwrite* : Integer } ) : 4D Folder -| Paramètres | Type | | Description | -| ----------------- | ----------- |:--:| ------------------------------------------- | -| destinationFolder | 4D.Folder | -> | Destination folder | -| newName | Texte | -> | Name for the copy | -| overwrite | Entier long | -> | `fk overwrite` to replace existing elements | -| Résultat | 4D.Folder | <- | Copied file or folder | +| Parameter | Type | | Description | +| ----------------- | --------- |:--:| ------------------------------------------- | +| destinationFolder | 4D.Folder | -> | Destination folder | +| newName | Text | -> | Name for the copy | +| overwrite | Integer | -> | `fk overwrite` to replace existing elements | +| Result | 4D.Folder | <- | Copied file or folder | @@ -453,16 +453,16 @@ By default, the folder is copied with the name of the original folder. If you wa If a folder with the same name already exists in the *destinationFolder*, by default 4D generates an error. You can pass the `fk overwrite` constant in the *overwrite* parameter to ignore and overwrite the existing file -| Constant | Valeur | Commentaire | -| -------------- | ------ | ----------------------------------- | -| `fk overwrite` | 4 | Overwrite existing elements, if any | +| Constant | Value | Comment | +| -------------- | ----- | ----------------------------------- | +| `fk overwrite` | 4 | Overwrite existing elements, if any | -**Valeur retournée** +**Returned value** The copied `Folder` object. -#### Exemple +#### Example You want to copy a Pictures *folder* from the user's Document folder to the Database folder: @@ -480,20 +480,20 @@ $copiedImages:=$userImages.copyTo(Folder(fk database folder);fk overwrite) ## .file() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    **.file**( *path* : Text ) : 4D.File -| Paramètres | Type | | Description | -| ---------- | ------- | -- | ------------------------------------ | -| path | Texte | -> | Relative POSIX file pathname | -| Résultat | 4D.File | <- | `File` object (null if invalid path) | +| Parameter | Type | | Description | +| --------- | ------- | -- | ------------------------------------ | +| path | Text | -> | Relative POSIX file pathname | +| Result | 4D.File | <- | `File` object (null if invalid path) | #### Description @@ -502,11 +502,11 @@ The `.file()` function creates a `File` ob In *path*, pass a relative POSIX path to designate the file to return. The path will be evaluated from the parent folder as root. -**Valeur retournée** +**Returned value** A `File` object or null if *path* is invalid. -#### Exemple +#### Example ```4d var $myPDF : 4D.File @@ -520,20 +520,20 @@ $myPDF:=Folder(fk documents folder).file("Pictures/info.pdf") ## .files() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    **.files**( { *options* : Integer } ) : Collection -| Paramètres | Type | | Description | -| ---------- | ----------- | -- | ----------------------------------- | -| options | Entier long | -> | File list options | -| Résultat | Collection | <- | Collection of children file objects | +| Parameter | Type | | Description | +| --------- | ---------- | -- | ----------------------------------- | +| options | Integer | -> | File list options | +| Result | Collection | <- | Collection of children file objects | #### Description @@ -543,16 +543,16 @@ The `.files()` function returns a collect By default, if you omit the *options* parameter, only the files at the first level of the folder are returned in the collection, as well as invisible files or folders. You can modify this by passing, in the *options* parameter, one or more of the following constants: -| Constant | Valeur | Commentaire | -| --------------------- | ------ | ----------------------------------------------------------------------------------- | -| `fk recursive` | 1 | The collection contains files or folders of the specified folder and its subfolders | -| `fk ignore invisible` | 8 | Invisible files or folders are not listed | +| Constant | Value | Comment | +| --------------------- | ----- | ----------------------------------------------------------------------------------- | +| `fk recursive` | 1 | The collection contains files or folders of the specified folder and its subfolders | +| `fk ignore invisible` | 8 | Invisible files or folders are not listed | -**Valeur retournée** +**Returned value** Collection of `File` objects. -#### Exemple 1 +#### Example 1 You want to know if there are invisible files in the Database folder: @@ -565,7 +565,7 @@ You want to know if there are invisible files in the Database folder: End if ``` -#### Exemple 2 +#### Example 2 You want to get all files that are not invisible in the Documents folder: @@ -581,20 +581,20 @@ You want to get all files that are not invisible in the Documents folder: ## .folder() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    **.folder**( *path* : Text ) : 4D.Folder -| Paramètres | Type | | Description | -| ---------- | --------- | -- | ---------------------------------------------- | -| path | Texte | -> | Relative POSIX file pathname | -| Résultat | 4D.Folder | <- | Created folder object (null if invalid *path*) | +| Parameter | Type | | Description | +| --------- | --------- | -- | ---------------------------------------------- | +| path | Text | -> | Relative POSIX file pathname | +| Result | 4D.Folder | <- | Created folder object (null if invalid *path*) | #### Description @@ -603,11 +603,11 @@ The `.folder()` function creates a `Fold In *path*, pass a relative POSIX path to designate the folder to return. The path will be evaluated from the parent folder as root. -**Valeur retournée** +**Returned value** A `Folder` object or null if *path* is invalid. -#### Exemple +#### Example ```4d var $mypicts : 4D.Folder @@ -621,20 +621,20 @@ A `Folder` object or null if *path* is invalid. ## .folders() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    **.folders**( { *options* : Integer } ) : Collection -| Paramètres | Type | | Description | -| ---------- | ----------- | -- | ------------------------------------- | -| options | Entier long | -> | Folder list options | -| Résultat | Collection | <- | Collection of children folder objects | +| Parameter | Type | | Description | +| --------- | ---------- | -- | ------------------------------------- | +| options | Integer | -> | Folder list options | +| Result | Collection | <- | Collection of children folder objects | #### Description @@ -643,16 +643,16 @@ The `.folders()` function returns a col By default, if you omit the *options* parameter, only the folders at the first level of the folder are returned in the collection. You can modify this by passing, in the *options* parameter, one or more of the following constants: -| Constant | Valeur | Commentaire | -| --------------------- | ------ | ----------------------------------------------------------------------------------- | -| `fk recursive` | 1 | The collection contains files or folders of the specified folder and its subfolders | -| `fk ignore invisible` | 8 | Invisible files or folders are not listed | +| Constant | Value | Comment | +| --------------------- | ----- | ----------------------------------------------------------------------------------- | +| `fk recursive` | 1 | The collection contains files or folders of the specified folder and its subfolders | +| `fk ignore invisible` | 8 | Invisible files or folders are not listed | -**Valeur retournée** +**Returned value** Collection of `Folder` objects. -#### Exemple +#### Example You want the collection of all folders and subfolders of the database folder: @@ -668,20 +668,20 @@ You want the collection of all folders and subfolders of the database folder: ## .getIcon() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    **.getIcon**( { *size* : Integer } ) : Picture -| Paramètres | Type | | Description | -| ---------- | ----------- | -- | --------------------------------------------- | -| size | Entier long | -> | Side length for the returned picture (pixels) | -| Résultat | Image | <- | Icône | +| Parameter | Type | | Description | +| --------- | ------- | -- | --------------------------------------------- | +| size | Integer | -> | Side length for the returned picture (pixels) | +| Result | Image | <- | Icon | @@ -693,7 +693,7 @@ The optional *size* parameter specifies the dimensions in pixels of the returned If the folder does not exist on disk, a default blank icon is returned. -**Valeur retournée** +**Returned value** Folder icon [picture](Concepts/dt_picture.md). From 65d35f5242b8a110a516941e9a968566a6f9f71e Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:36:28 +0100 Subject: [PATCH 110/311] New translations smtpTransporterClass.md (French) --- .../fr/API/smtpTransporterClass.md | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/website/translated_docs/fr/API/smtpTransporterClass.md b/website/translated_docs/fr/API/smtpTransporterClass.md index 9623cc5a6b20ff..90731f3c31acef 100644 --- a/website/translated_docs/fr/API/smtpTransporterClass.md +++ b/website/translated_docs/fr/API/smtpTransporterClass.md @@ -33,22 +33,22 @@ SMTP Transporter objects are instantiated with the [SMTP New transporter](#smtp- ## SMTP New transporter -
    Historique -| Version | Modifications | +
    History +| Version | Changes | | ------- | -------------------------------------------- | | v18 | New logFile property | | v17 R5 | New bodyCharset and headerCharset properties | -| v17 R4 | Ajoutées | +| v17 R4 | Added |
    **SMTP New transporter**( *server* : Object ) : 4D.SMTPTransporter -| Paramètres | Type | | Description | -| ---------- | ------------------ |:--:| --------------------------------------------------- | -| server | Objet | -> | Mail server information | -| Résultat | 4D.SMTPTransporter | <- | [SMTP transporter object](#smtp-transporter-object) | +| Parameter | Type | | Description | +| --------- | ------------------ |:--:| --------------------------------------------------- | +| server | Objet | -> | Mail server information | +| Result | 4D.SMTPTransporter | <- | [SMTP transporter object](#smtp-transporter-object) | @@ -67,17 +67,17 @@ In the *server* parameter, pass an object containing the following properties: | *server* | Default value (if omitted) | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------- | -| [](#acceptunsecureconnection)

        | Faux | +| [](#acceptunsecureconnection)

        | False | |[](#authenticationmode)

        |the most secure authentication mode supported by the server is used| |[](#bodycharset)

        |`mail mode UTF8` (US-ASCII_UTF8_QP)| |[](#connectiontimeout)

        |30| |[](#headercharset)

        |`mail mode UTF8` (US-ASCII_UTF8_QP)| |[](#host)

        |*mandatory* |[](#keepalive)

        |True| |[](#logfile)

        |none| |**password** : Text

    User password for authentication on the server (not returned in *[SMTP transporter](#smtp-transporter-object)* object)|none| |[](#port)

        |587| |[](#sendtimeout)

        |100| |[](#user)

        |none| -#### Résultat +#### Result The function returns a [**SMTP transporter object**](#smtp-transporter-object). All returned properties are **read-only**. -#### Exemple +#### Example ```4d $server:=New object @@ -128,7 +128,7 @@ The function returns a [**SMTP transporter object**](#smtp-transporter-object). For information about SMTP status codes, please refer to [this page](https://www.usps.org/info/smtp_status.html). -#### Exemple +#### Example ```4d var $pw : Text @@ -174,10 +174,10 @@ For information about SMTP status codes, please refer to [this page](https://www ## .keepAlive -

    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R4 | Added |
    @@ -210,21 +210,21 @@ The SMTP connection is automatically closed: ## .send() -
    Historique -| Version | Modifications | +
    History +| Version | Changes | | ------- | ------------------------ | | v17 R5 | Support of mime contents | -| v17 R4 | Ajoutées | +| v17 R4 | Added |
    **.send**( *mail* : Object ) : Object -| Paramètres | Type | | Description | -| ---------- | ----- |:--:| ------------------------------------------------- | -| mail | Objet | -> | [Email](emailObjectClass.md#email-object) to send | -| Résultat | Objet | <- | SMTP status | +| Parameter | Type | | Description | +| --------- | ----- |:--:| ------------------------------------------------- | +| mail | Objet | -> | [Email](emailObjectClass.md#email-object) to send | +| Result | Objet | <- | SMTP status | From 0bc7746ca3ae376c42687cd280f4acac4b8f717e Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:36:30 +0100 Subject: [PATCH 111/311] New translations transporter.md (French) --- website/translated_docs/fr/API/transporter.md | 112 +++++++++--------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/website/translated_docs/fr/API/transporter.md b/website/translated_docs/fr/API/transporter.md index 30edc38f46764e..85e0473f0086d4 100644 --- a/website/translated_docs/fr/API/transporter.md +++ b/website/translated_docs/fr/API/transporter.md @@ -1,6 +1,6 @@ --- id: transporter -title: Classe Transporter +title: Transporter Class --- ## Description @@ -9,10 +9,10 @@ title: Classe Transporter ## .acceptUnsecureConnection -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R4 | Added |
    @@ -45,10 +45,10 @@ Available secured ports are: ## .authenticationMode -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R4 | Added |
    @@ -62,7 +62,7 @@ By default, the most secured mode supported by the server is used. Possible values are: -| Valeur | Constantes | Commentaire | +| Value | Constants | Comment | | -------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------- | | APOP | `POP3 authentication APOP` | Authentication using APOP protocol (POP3 only) | | CRAM-MD5 | `SMTP authentication CRAM MD5`, `POP3 authentication CRAM-MD5`, `IMAP authentication CRAM MD5` | Authentication using CRAM-MD5 protocol | @@ -76,11 +76,11 @@ Possible values are: ## .bodyCharset -
    Historique -| Version | Modifications | +
    History +| Version | Changes | | ------- | ----------------------- | | v18 | Support for UTF8 base64 | -| v17 R5 | Ajoutées | +| v17 R5 | Added |
    @@ -95,9 +95,9 @@ The `.bodyCharset` property contains ## .connectionTimeOut -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -135,10 +135,10 @@ The `.connectionTimeOut` property contains ## .headerCharset -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -153,9 +153,9 @@ The `.headerCharset` property contains ## .host -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -191,10 +191,10 @@ The `.host` property contains the name or ## .logFile -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -222,10 +222,10 @@ Unlike regular log files (enabled via the `SET DATABASE PARAMETER` command), ext ## .port -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R4 | Added |
    @@ -250,10 +250,10 @@ The `.port` property contains the port nu ## .sendTimeOut -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R4 | Added |
    @@ -271,10 +271,10 @@ The `.sendTimeOut` property contains ## .user -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R4 | Added |
    @@ -291,19 +291,19 @@ The `.user` property contains the user na ## .checkConnection() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R4 | Added |
    **.checkConnection()** : Object -| Paramètres | Type | | Description | -| ---------- | ----- |:--:| ------------------------------------------- | -| Résultat | Objet | <- | Status of the transporter object connection | +| Parameter | Type | | Description | +| --------- | ----- |:--:| ------------------------------------------- | +| Result | Objet | <- | Status of the transporter object connection | @@ -316,15 +316,15 @@ The `.checkConnection()` function ## .creationDate -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -23,7 +23,7 @@ title: Document Class The `.creationDate` property returns the creation date of the file. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -31,10 +31,10 @@ Cette propriété est en **lecture seule**. ## .creationTime -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -45,7 +45,7 @@ Cette propriété est en **lecture seule**. The `.creationTime` property returns the creation time of the file (expressed as a number of seconds beginning at 00:00). -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -55,10 +55,10 @@ Cette propriété est en **lecture seule**. ## .exists -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -69,7 +69,7 @@ Cette propriété est en **lecture seule**. The `.exists` property returns true if the file exists on disk, and false otherwise. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -81,10 +81,10 @@ Cette propriété est en **lecture seule**. ## .extension -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -92,9 +92,9 @@ Cette propriété est en **lecture seule**. #### Description -The `.extension` property returns the extension of the file name (if any). Une extension commence toujours par ".". The property returns an empty string if the file name does not have an extension. +The `.extension` property returns the extension of the file name (if any). An extension always starts with ".". The property returns an empty string if the file name does not have an extension. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -105,10 +105,10 @@ Cette propriété est en **lecture seule**. ## .fullName -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -118,7 +118,7 @@ Cette propriété est en **lecture seule**. The `.fullName` property returns the full name of the file, including its extension (if any). -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -128,10 +128,10 @@ Cette propriété est en **lecture seule**. ## .hidden -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -142,7 +142,7 @@ Cette propriété est en **lecture seule**. The `.hidden` property returns true if the file is set as "hidden" at the system level, and false otherwise. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -152,10 +152,10 @@ Cette propriété est en **lecture seule**. ## .isAlias -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -166,7 +166,7 @@ Cette propriété est en **lecture seule**. The `.isAlias` property returns true if the file is an alias, a shortcut, or a symbolic link, and false otherwise. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -175,10 +175,10 @@ Cette propriété est en **lecture seule**. ## .isFile -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -189,7 +189,7 @@ Cette propriété est en **lecture seule**. The `.isFile` property returns always true for a file. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -198,10 +198,10 @@ Cette propriété est en **lecture seule**. ## .isFolder -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -212,7 +212,7 @@ Cette propriété est en **lecture seule**. The `.isFolder` property returns always false for a file. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -222,10 +222,10 @@ Cette propriété est en **lecture seule**. ## .isWritable -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -237,9 +237,9 @@ Cette propriété est en **lecture seule**. The `.isWritable` property returns true if the file exists on disk and is writable. > The property checks the ability of the 4D application to write on the disk (access rights), it does not solely rely on the *writable* attribute of the file. -Cette propriété est en **lecture seule**. +This property is **read-only**. -**Exemple** +**Example** ```4d $myFile:=File("C:\\Documents\\Archives\\ReadMe.txt";fk platform path) @@ -256,10 +256,10 @@ Cette propriété est en **lecture seule**. ## .modificationDate -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -270,7 +270,7 @@ Cette propriété est en **lecture seule**. The `.modificationDate` property returns the date of the file's last modification. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -280,10 +280,10 @@ Cette propriété est en **lecture seule**. ## .modificationTime -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -294,7 +294,7 @@ Cette propriété est en **lecture seule**. The `.modificationTime` property returns the time of the file's last modification (expressed as a number of seconds beginning at 00:00). -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -303,10 +303,10 @@ Cette propriété est en **lecture seule**. ## .name -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -317,7 +317,7 @@ Cette propriété est en **lecture seule**. The `.name` property returns the name of the file without extension (if any). -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -325,10 +325,10 @@ Cette propriété est en **lecture seule**. ## .original -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -344,7 +344,7 @@ The `.original` property returns the targ For non-alias files, the property returns the same file object as the file. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -354,10 +354,10 @@ Cette propriété est en **lecture seule**. ## .parent -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -368,7 +368,7 @@ Cette propriété est en **lecture seule**. The `.parent` property returns the parent folder object of the file. If the path represents a system path (e.g., "/DATA/"), the system path is returned. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -378,10 +378,10 @@ Cette propriété est en **lecture seule**. ## .path -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -392,7 +392,7 @@ Cette propriété est en **lecture seule**. The `.path` property returns the POSIX path of the file. If the path represents a filesystem (e.g., "/DATA/"), the filesystem is returned. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -401,10 +401,10 @@ Cette propriété est en **lecture seule**. ## .platformPath -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -415,7 +415,7 @@ Cette propriété est en **lecture seule**. The `.platformPath` property returns the path of the file expressed with the current platform syntax. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -425,10 +425,10 @@ Cette propriété est en **lecture seule**. ## .size -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -439,7 +439,7 @@ Cette propriété est en **lecture seule**. The `.size` property returns the size of the file expressed in bytes. If the file does not exist on disk, the size is 0. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -455,22 +455,22 @@ Cette propriété est en **lecture seule**. ## .copyTo() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    **.copyTo**( *destinationFolder* : 4D.Folder { ; *newName* : Text } { ; *overwrite* : Integer } ) : 4D.File -| Paramètres | Type | | Description | -| ----------------- | ----------- |:--:| ------------------------------------------- | -| destinationFolder | 4D.Folder | -> | Destination folder | -| newName | Texte | -> | Name for the copy | -| overwrite | Entier long | -> | `fk overwrite` to replace existing elements | -| Résultat | 4D.File | <- | Copied file | +| Parameter | Type | | Description | +| ----------------- | --------- |:--:| ------------------------------------------- | +| destinationFolder | 4D.Folder | -> | Destination folder | +| newName | Text | -> | Name for the copy | +| overwrite | Integer | -> | `fk overwrite` to replace existing elements | +| Result | 4D.File | <- | Copied file | @@ -484,16 +484,16 @@ By default, the file is copied with the name of the original file. If you want t If a file with the same name already exists in the *destinationFolder*, by default 4D generates an error. You can pass the `fk overwrite` constant in the *overwrite* parameter to ignore and overwrite the existing file -| Constant | Valeur | Commentaire | -| -------------- | ------ | ----------------------------------- | -| `fk overwrite` | 4 | Overwrite existing elements, if any | +| Constant | Value | Comment | +| -------------- | ----- | ----------------------------------- | +| `fk overwrite` | 4 | Overwrite existing elements, if any | -**Valeur retournée** +**Returned value** The copied `File` object. -#### Exemple +#### Example You want to copy a picture *file* from the user's document folder to the application folder: @@ -510,19 +510,19 @@ $copy:=$source.copyTo(Folder("/PACKAGE");fk overwrite) ## .getContent() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    **.getContent( )** : Blob -| Paramètres | Type | | Description | -| ---------- | ---- | -- | ------------ | -| Résultat | Blob | <- | File content | +| Parameter | Type | | Description | +| --------- | ---- | -- | ------------ | +| Result | Blob | <- | File content | @@ -530,11 +530,11 @@ $copy:=$source.copyTo(Folder("/PACKAGE");fk overwrite) The `.getContent()` function returns a `BLOB` containing the entire content of a file. For information on BLOBs, please refer to the [BLOB](Concepts/dt_blob.md) section. -**Valeur retournée** +**Returned value** A `Blob`. -#### Exemple +#### Example To save a document's contents in a `BLOB` field: @@ -553,20 +553,20 @@ To save a document's contents in a `BLOB` field: ## .getIcon() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    **.getIcon**( { *size* : Integer } ) : Picture -| Paramètres | Type | | Description | -| ---------- | ----------- | -- | --------------------------------------------- | -| size | Entier long | -> | Side length for the returned picture (pixels) | -| Résultat | Image | <- | Icône | +| Parameter | Type | | Description | +| --------- | ------- | -- | --------------------------------------------- | +| size | Integer | -> | Side length for the returned picture (pixels) | +| Result | Image | <- | Icon | @@ -578,7 +578,7 @@ The optional *size* parameter specifies the dimensions in pixels of the returned If the file does not exist on disk, a default blank icon is returned. -**Valeur retournée** +**Returned value** File icon [picture](../Concepts/picture.html). @@ -591,10 +591,10 @@ File icon [picture](../Concepts/picture.html). ## .getText() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -602,12 +602,12 @@ File icon [picture](../Concepts/picture.html). -| Paramètres | Type | | Description | -| ----------- | ----------- | -- | ------------------------------- | -| charSetName | Texte | -> | Name of character set | -| charSetNum | Entier long | -> | Number of character set | -| breakMode | Entier long | -> | Processing mode for line breaks | -| Résultat | Texte | <- | Text from the document | +| Parameter | Type | | Description | +| ----------- | ------- | -- | ------------------------------- | +| charSetName | Text | -> | Name of character set | +| charSetNum | Integer | -> | Number of character set | +| breakMode | Integer | -> | Processing mode for line breaks | +| Result | Text | <- | Text from the document | @@ -625,21 +625,21 @@ If the document contains a Byte Order Mark (BOM), 4D uses the character set that In *breakMode*, you can pass a number indicating the processing to apply to end-of-line characters in the document. The following constants of the "System Documents" theme are available: -| Constant | Valeur | Commentaire | -| ----------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Document unchanged` | 0 | No processing | -| `Document with native format` | 1 | (Default) Line breaks are converted to the native format of the operating system: CR (carriage return) under OS X, CRLF (carriage return + line feed) under Windows | -| `Document with CRLF` | 2 | Line breaks are converted to Windows format: CRLF (carriage return + line feed) | -| `Document with CR` | 3 | Line breaks are converted to OS X format: CR (carriage return) | -| `Document with LF` | 4 | Line breaks are converted to Unix format: LF (line feed) | +| Constant | Value | Comment | +| ----------------------------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Document unchanged` | 0 | No processing | +| `Document with native format` | 1 | (Default) Line breaks are converted to the native format of the operating system: CR (carriage return) under OS X, CRLF (carriage return + line feed) under Windows | +| `Document with CRLF` | 2 | Line breaks are converted to Windows format: CRLF (carriage return + line feed) | +| `Document with CR` | 3 | Line breaks are converted to OS X format: CR (carriage return) | +| `Document with LF` | 4 | Line breaks are converted to Unix format: LF (line feed) | By default, when you omit the *breakMode* parameter, line breaks are processed in native mode (1). -**Valeur retournée** +**Returned value** Text of the file. -#### Exemple +#### Example Given the following text document (fields are separated by tabs): From 135563251e9afb5d258cf2cb8ad1e8a524319d80 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:36:52 +0100 Subject: [PATCH 120/311] New translations datastoreClass.md (French) --- .../translated_docs/fr/API/datastoreClass.md | 319 ++++++++++-------- 1 file changed, 177 insertions(+), 142 deletions(-) diff --git a/website/translated_docs/fr/API/datastoreClass.md b/website/translated_docs/fr/API/datastoreClass.md index 5574e1eb193b71..478a9d29dfc1bd 100644 --- a/website/translated_docs/fr/API/datastoreClass.md +++ b/website/translated_docs/fr/API/datastoreClass.md @@ -8,15 +8,16 @@ A [Datastore](ORDA/dsMapping.md#datastore) is the interface object provided by O * [ds](#ds): a shortcut to the main datastore * [Open datastore](#open-datastore): to open any remote datastore -### Sommaire +### Summary -| | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [](#canceltransaction)

        | | [](#dataclassname)

         | | [](#encryptionstatus)

         | | [](#getinfo)

         | | [](#getrequestlog)

         | +| [](#makeSelectionsAlterable)

         | | [](#providedatakey)

         | | [](#startrequestlog)

         | | [](#starttransaction)

         | @@ -29,21 +30,21 @@ A [Datastore](ORDA/dsMapping.md#datastore) is the interface object provided by O ## ds -

    Historique -| Version | Modifications | +
    History +| Version | Changes | | ------- | ---------------------------- | | v18 | Support of localID parameter | -| v17 | Ajoutées | +| v17 | Added |
    **ds** { ( *localID* : Text ) } : cs.DataStore -| Paramètres | Type | | Description | -| ---------- | ------------ | -- | ------------------------------------------ | -| localID | Texte | -> | Local ID of the remote datastore to return | -| Résultat | cs.DataStore | <- | Reference to the datastore | +| Parameter | Type | | Description | +| --------- | ------------ | -- | ------------------------------------------ | +| localID | Text | -> | Local ID of the remote datastore to return | +| Result | cs.DataStore | <- | Reference to the datastore | @@ -65,7 +66,7 @@ Using `ds` requires that the target database is compliant with ORDA, as specifie -#### Exemple 1 +#### Example 1 Using the main datastore on the 4D database: @@ -73,9 +74,9 @@ Using the main datastore on the 4D database: $result:=ds.Employee.query("firstName = :1";"S@") ``` -#### Exemple 2 +#### Example 2 -```4d +```4d var $connectTo; $firstFrench; $firstForeign : Object var $frenchStudents; $foreignStudents : cs.DataStore @@ -92,7 +93,7 @@ Using the main datastore on the 4D database: ``` ```4d - //méthode getFirst + //getFirst method //getFirst(localID;dataclass) -> entity #DECLARE( $localId : Text; $dataClassName : Text ) -> $entity : 4D.Entity @@ -104,21 +105,21 @@ Using the main datastore on the 4D database: ## Open datastore -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 | Added |
    **Open datastore**( *connectionInfo* : Object ; *localID* : Text ) : cs.DataStore -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | -------------- | ------------ | -- | ------------------------------------------------------------------------- | | connectionInfo | Objet | -> | Connection properties used to reach the remote datastore | -| localID | Texte | -> | Id to assign to the opened datastore on the local application (mandatory) | -| Résultat | cs.DataStore | <- | Datastore object | +| localID | Text | -> | Id to assign to the opened datastore on the local application (mandatory) | +| Result | cs.DataStore | <- | Datastore object | @@ -146,14 +147,14 @@ Once the session is opened, the following statements become equivalent and retur 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*): -| Propriété | Type | Description | -| ----------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| hostname | Texte | Name or IP address of the remote database + ":" + port number (port number is mandatory) | -| user | Texte | User name | -| password | Texte | User password | -| idleTimeout | Entier long | 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 | Booléen | Use secured connection(*). If omitted, false by default. Using a secured connection is recommended whenever possible. | -| type | Texte | Must be "4D Server" | +| Property | Type | Description | +| ----------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| hostname | Text | Name or IP address of the remote database + ":" + port number (port number is mandatory) | +| user | Text | User name | +| password | Text | User password | +| idleTimeout | Longint | 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 | Booléen | Use secured connection(*). If omitted, false by default. Using a secured connection is recommended whenever possible. | +| type | Text | Must be "4D Server" | (*) If tls is true, the HTTPS protocol is used if: @@ -161,24 +162,24 @@ Pass in *connectionInfo* an object describing the remote datastore you want to c * the given port is the right HTTPS port configured in the database settings * a valid certificate and private encryption key are installed in the database. Otherwise, error "1610 - A remote request to host xxx has failed" is raised -#### Exemple 1 +#### Example 1 Connection to a remote datastore without user / password: ```4d - var $connectTo : Object + var $connectTo : Object var $remoteDS : cs.DataStore $connectTo:=New object("type";"4D Server";"hostname";"192.168.18.11:8044") $remoteDS:=Open datastore($connectTo;"students") ALERT("This remote datastore contains "+String($remoteDS.Students.all().length)+" students") ``` -#### Exemple 2 +#### Example 2 Connection to a remote datastore with user / password / timeout / tls: ```4d - var $connectTo : Object + var $connectTo : Object var $remoteDS : cs.DataStore $connectTo:=New object("type";"4D Server";"hostname";\"192.168.18.11:4443";\ "user";"marie";"password";$pwd;"idleTimeout";70;"tls";True) @@ -191,7 +192,7 @@ Connection to a remote datastore with user / password / timeout / tls: Working with several remote datastores: ```4d - var $connectTo : Object + var $connectTo : Object var $frenchStudents; $foreignStudents : cs.DataStore $connectTo:=New object("hostname";"192.168.18.11:8044") $frenchStudents:=Open datastore($connectTo;"french") @@ -203,17 +204,17 @@ Working with several remote datastores: #### Error management -In case of error, the command returns **Null**. If the remote datastore cannot be reached (wrong address, web server not started, http and https not enabled...), error 1610 "A remote request to host XXX has failed" is raised. You can intercept this error with a method installed by `ON ERR CALL`. +In case of error, the command returns **Null**. If the remote datastore cannot be reached (wrong address, web server not started, http and https not enabled...), error 1610 "A remote request to host XXX has failed" is raised. You can intercept this error with a method installed by `ON ERR CALL`. ## *.dataclassName* -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -225,7 +226,7 @@ In case of error, the command returns **Null**. If the remote datastore cannot b Each dataclass in a datastore is available as a property of the [DataStore object](ORDA/dsMapping.md#datastore)data. The returned object contains a description of the dataclass. -#### Exemple +#### Example ```4d var $emp : cs.Employee @@ -246,10 +247,10 @@ Each dataclass in a datastore is available as a property of the [DataStore objec ## .cancelTransaction() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 | Added |
    @@ -257,9 +258,9 @@ Each dataclass in a datastore is available as a property of the [DataStore objec **.cancelTransaction()** -| Paramètres | Type | | Description | -| ---------- | ---- |::| ------------------------------- | -| | | | Does not require any parameters | +| Parameter | Type | | Description | +| --------- | ---- |::| ------------------------------- | +| | | | Does not require any parameters | @@ -272,7 +273,7 @@ The `.cancelTransaction()` function cancels any changes made to the data during You can nest several transactions (sub-transactions). If the main transaction is cancelled, all of its sub-transactions are also cancelled, even if they were validated individually using the [`.validateTransaction()`](#validatetransactions) function. -#### Exemple +#### Example See example for the [`.startTransaction()`](#starttransaction) function. @@ -284,10 +285,10 @@ See example for the [`.startTransaction()`](#starttransaction) function. ## .encryptionStatus() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -295,9 +296,9 @@ See example for the [`.startTransaction()`](#starttransaction) function. -| Paramètres | Type | | Description | -| ---------- | ----- |:--:| --------------------------------------------------------------------------- | -| Résultat | Objet | <- | Information about the encryption of the current datastore and of each table | +| Parameter | Type | | Description | +| --------- | ----- |:--:| --------------------------------------------------------------------------- | +| Result | Objet | <- | Information about the encryption of the current datastore and of each table | @@ -307,18 +308,18 @@ The `.encryptionStatus()` function ## .getInfo() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -369,9 +370,9 @@ You want to know the number of encrypted tables in the current data file: **.getInfo()**: Object -| Paramètres | Type | | Description | -| ---------- | ----- |:--:| -------------------- | -| Résultat | Objet | <- | Datastore properties | +| Parameter | Type | | Description | +| --------- | ----- |:--:| -------------------- | +| Result | Objet | <- | Datastore properties | #### Description @@ -380,18 +381,18 @@ The `.getInfo()` function returns **Returned object** -| Propriété | Type | Description | -| ---------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| type | string |
  • "4D": main datastore, available through ds
  • "4D Server": remote datastore, open with Open datastore
  • | -| networked | boolean |
  • True: the datastore is reached through a network connection.
  • False: the datastore is not reached through a network connection (local database)
  • | -| localID | Texte | ID of the datastore on the machine. Corresponds to the localId string given with the `Open datastore` command. Empty string ("") for main datastore. | -| connection | object | Object describing the remote datastore connection (not returned for main datastore). Available properties:

    PropriétéTypeDescription
    hostnameTexteIP address or name of the remote datastore + ":" + port number
    tlsbooleanTrue if secured connection is used with the remote datastore
    idleTimeoutnumberSession inactivity timeout (in minutes)
    userTexteUser authenticated on the remote datastore
    | +| Property | Type | Description | +| ---------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| type | string |

  • "4D": main datastore, available through ds
  • "4D Server": remote datastore, open with Open datastore
  • | +| networked | boolean |
  • True: the datastore is reached through a network connection.
  • False: the datastore is not reached through a network connection (local database)
  • | +| localID | text | ID of the datastore on the machine. Corresponds to the localId string given with the `Open datastore` command. Empty string ("") for main datastore. | +| connection | object | Object describing the remote datastore connection (not returned for main datastore). Available properties:

    PropertyTypeDescription
    hostnametextIP address or name of the remote datastore + ":" + port number
    tlsbooleanTrue if secured connection is used with the remote datastore
    idleTimeoutnumberSession inactivity timeout (in minutes)
    usertextUser authenticated on the remote datastore
    | * If the `.getInfo()` function is executed on a 4D Server or 4D single-user, `networked` is False. * If the `.getInfo()` function is executed on a remote 4D, `networked` is True -#### Exemple 1 +#### Example 1 ```4d var $info : Object @@ -403,7 +404,7 @@ The `.getInfo()` function returns //{"type":"4D","networked":true,"localID":""} ``` -#### Exemple 2 +#### Example 2 On a remote datastore: @@ -419,8 +420,8 @@ On a remote datastore: //"localID":"students", //"networked":true, //"connection":{hostname:"111.222.33.44:8044","tls":false,"idleTimeout":2880,"user":"marie"}} -``` - +``` + @@ -429,19 +430,19 @@ On a remote datastore: ## .getRequestLog() -

    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R6 | Added |
    **.getRequestLog()** : Collection -| Paramètres | Type | | Description | -| ---------- | ---------- |:--:| ------------------------------------------------------------ | -| Résultat | Collection | <- | Collection of objects, where each object describes a request | +| Parameter | Type | | Description | +| --------- | ---------- |:--:| ------------------------------------------------------------ | +| Result | Collection | <- | Collection of objects, where each object describes a request | @@ -451,28 +452,61 @@ The `.getRequestLog()` function + +## .makeSelectionsAlterable() + +
    History +| Version | Changes | +| ------- | ------- | +| v18 R5 | Added | +
    + + +**.makeSelectionsAlterable()** + + +| Parameter | Type | | Description | +| --------- | ---- |::| ------------------------------- | +| | | | Does not require any parameters | + + + +#### Description + +The `.makeSelectionsAlterable()` function sets all entity selections as alterable by default in all the current application datastores (including [remote datastores](ORDA/remoteDatastores.md)). It is intended to be used once, for example in the `On Startup` database method. + +When this function is not called, new entity selections can be shareable, depending on the nature of their "parent", or [how they are created](ORDA/entities.md#shareable-or-non-shareable-entity-selections). + +> This function does not modify entity selections created by [`.copy()`](#copy) or `OB Copy` when the explicit `ck shared` option is used. + + +> **Compatibility**: This function must only be used in projects converted from 4D versions prior to 4D v18 R5 and containing [.add()](entitySelectionClass.md#add) calls. In this context, using `.makeSelectionsAlterable()` can save time by restoring instantaneously the previous 4D behavior in existing projects. On the other hand, using this method in new projects created in 4D v18 R5 and higher **is not recommended**, since it prevents entity selections to be shared, which provides greater performance and scalabitlity. + + + + ## .provideDataKey() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -480,11 +514,11 @@ See Example 2 of [`.startRequestLog()`](#startrequestlog). -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ------------- | ----- | -- | ------------------------------------- | -| curPassPhrase | Texte | -> | Current encryption passphrase | +| curPassPhrase | Text | -> | Current encryption passphrase | | curDataKey | Objet | -> | Current data encryption key | -| Résultat | Objet | <- | Result of the encryption key matching | +| Result | Objet | <- | Result of the encryption key matching | @@ -504,28 +538,28 @@ If a valid data encryption key is provided, it is added to the *keyChain* in mem * all data loaded from encryptable tables is decrypted in memory -**Résultat** +**Result** The result of the command is described in the returned object: -| Propriété | | Type | Description | +| Property | | Type | Description | | ---------- | ------------------------ | ---------- | ------------------------------------------------------------------------------- | | success | | Booléen | True if the provided encryption key matches the encrypted data, False otherwise | | | | | Properties below are returned only if success is *FALSE* | -| status | | Nombre | Error code (4 if the provided encryption key is wrong) | -| statusText | | Texte | Error message | +| status | | Number | Error code (4 if the provided encryption key is wrong) | +| statusText | | Text | Error message | | errors | | Collection | Stack of errors. The first error has the highest index | -| | \[ ].componentSignature | Texte | Internal component name | -| | \[ ].errCode | Nombre | Error number | -| | \[ ].message | Texte | Error message | +| | \[ ].componentSignature | Text | Internal component name | +| | \[ ].errCode | Number | Error number | +| | \[ ].message | Text | Error message | If no *curPassphrase* or *curDataKey* is given, `.provideDataKey()` returns **null** (no error is generated). -#### Exemple +#### Example -```4d +```4d var $keyStatus : Object var $passphrase : Text @@ -539,7 +573,7 @@ If no *curPassphrase* or *curDataKey* is given, `.provideDataKey()` returns **nu End if End if ``` - + @@ -548,10 +582,10 @@ If no *curPassphrase* or *curDataKey* is given, `.provideDataKey()` returns **nu ## .startRequestLog() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R6 | Added |
    @@ -559,10 +593,10 @@ If no *curPassphrase* or *curDataKey* is given, `.provideDataKey()` returns **nu -| Paramètres | Type | | Description | -| ---------- | ----------- | -- | ------------------------------------ | -| file | 4D.File | -> | File object | -| reqNum | Entier long | -> | Number of requests to keep in memory | +| Parameter | Type | | Description | +| --------- | ------- | -- | ------------------------------------ | +| file | 4D.File | -> | File object | +| reqNum | Integer | -> | Number of requests to keep in memory | @@ -583,11 +617,11 @@ The ORDA request log can be sent to a file or to memory, depending on the parame For a description of the ORDA request log format, please refer to the [**ORDA client requests**](https://doc.4d.com/4Dv18/4D/18/Description-of-log-files.300-4575486.en.html#4385373) section. -#### Exemple 1 +#### Example 1 You want to log ORDA client requests in a file and use the log sequence number: -```4d +```4d var $file : 4D.File var $e : cs.PersonsEntity @@ -600,11 +634,11 @@ You want to log ORDA client requests in a file and use the log sequence number: SET DATABASE PARAMETER(Client Log Recording;0) ``` -#### Exemple 2 +#### Example 2 You want to log ORDA client requests in memory: -```4d +```4d var $es : cs.PersonsSelection var $log : Collection @@ -617,7 +651,7 @@ You want to log ORDA client requests in memory: $log:=ds.getRequestLog() ALERT("The longest request lasted: "+String($log.max("duration"))+" ms") ``` - + @@ -626,19 +660,19 @@ You want to log ORDA client requests in memory: ## .startTransaction() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 | Added |
    **.startTransaction()** -| Paramètres | Type | | Description | -| ---------- | ---- | | ------------------------------- | -| | | | Does not require any parameters | +| Parameter | Type | | Description | +| --------- | ---- | | ------------------------------- | +| | | | Does not require any parameters | @@ -650,10 +684,10 @@ The `.startTransaction()` function + ## .stopRequestLog() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R6 | Added |
    **.stopRequestLog()** -| Paramètres | Type | | Description | -| ---------- | ---- | | ------------------------------- | -| | | | Does not require any parameters | +| Parameter | Type | | Description | +| --------- | ---- | | ------------------------------- | +| | | | Does not require any parameters | @@ -716,7 +751,7 @@ The `.stopRequestLog()` function ## .validateTransaction() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 | Added |
    **.validateTransaction()** -| Paramètres | Type | | Description | -| ---------- | ---- | | ------------------------------- | -| | | | Does not require any parameters | +| Parameter | Type | | Description | +| --------- | ---- | | ------------------------------- | +| | | | Does not require any parameters | @@ -753,7 +788,7 @@ The function saves the changes to the data on the datastore that occurred during You can nest several transactions (sub-transactions). If the main transaction is cancelled, all of its sub-transactions are also cancelled, even if they were validated individually using this function. -#### Exemple +#### Example See example for [`.startTransaction()`](#starttransaction). From 5d8fb1614b161bcd6345048e9b257fd1ad7d9c00 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:37:07 +0100 Subject: [PATCH 121/311] New translations dataclassClass.md (French) --- .../translated_docs/fr/API/dataclassClass.md | 238 +++++++++--------- 1 file changed, 119 insertions(+), 119 deletions(-) diff --git a/website/translated_docs/fr/API/dataclassClass.md b/website/translated_docs/fr/API/dataclassClass.md index ca3e087e3a7273..40a02c2620f98d 100644 --- a/website/translated_docs/fr/API/dataclassClass.md +++ b/website/translated_docs/fr/API/dataclassClass.md @@ -8,7 +8,7 @@ A [DataClass](ORDA/dsMapping.md#dataclass) provides an object interface to a dat -### Sommaire +### Summary | | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -27,10 +27,10 @@ A [DataClass](ORDA/dsMapping.md#dataclass) provides an object interface to a dat ## .*attributeName* -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -44,7 +44,7 @@ The attributes of dataclasses are ## .all() -
    Historique -| Version | Modifications | +
    History +| Version | Changes | | ------- | ----------------------------------- | | v17 R5 | Support of the *settings* parameter | -| v17 | Ajoutées | +| v17 | Added |
    @@ -110,10 +110,10 @@ Considering the following table properties: **.all** ( { *settings* : Object } ) : 4D.EntitySelection -| Paramètres | Type | | Description | -| ---------- | ------------------ |:--:| --------------------------------------------------- | -| settings | Objet | -> | Build option: context | -| Résultat | 4D.EntitySelection | <- | References on all entities related to the Dataclass | +| Parameter | Type | | Description | +| --------- | ------------------ |:--:| --------------------------------------------------- | +| settings | Objet | -> | Build option: context | +| Result | 4D.EntitySelection | <- | References on all entities related to the Dataclass | @@ -131,12 +131,12 @@ Lazy loading is applied. In the optional *settings* parameter, you can pass an object containing additional options. The following property is supported: -| Propriété | Type | Description | -| --------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| context | Texte | Label for the optimization context applied to the entity selection. This context will be used by the code that handles the entity selection so that it can benefit from the optimization. This feature is [designed for ORDA client/server processing](ORDA/entities.md#client-server-optimization). | +| Property | Type | Description | +| -------- | ---- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| context | Text | Label for the optimization context applied to the entity selection. This context will be used by the code that handles the entity selection so that it can benefit from the optimization. This feature is [designed for ORDA client/server processing](ORDA/entities.md#client-server-optimization). | -#### Exemple +#### Example ```4d var $allEmp : cs.EmployeeSelection @@ -151,11 +151,11 @@ In the optional *settings* parameter, you can pass an object containing addition ## .fromCollection() -
    Historique -| Version | Modifications | +
    History +| Version | Changes | | ------- | ----------------------------------- | | v17 R5 | Support of the *settings* parameter | -| v17 | Ajoutées | +| v17 | Added |
    @@ -163,11 +163,11 @@ In the optional *settings* parameter, you can pass an object containing addition -| Paramètres | Type | | Description | -| ---------- | ------------------ |:--:| ------------------------------------------------ | -| objectCol | Collection | -> | Collection of objects to be mapped with entities | -| settings | Objet | -> | Build option: context | -| Résultat | 4D.EntitySelection | <- | Entity selection filled from the collection | +| Parameter | Type | | Description | +| --------- | ------------------ |:--:| ------------------------------------------------ | +| objectCol | Collection | -> | Collection of objects to be mapped with entities | +| settings | Objet | -> | Build option: context | +| Result | 4D.EntitySelection | <- | Entity selection filled from the collection | @@ -208,12 +208,12 @@ If a \_\_STAMP attribute is given, a check is performed with the stamp in the da In the optional *settings* parameter, you can pass an object containing additional options. The following property is supported: -| Propriété | Type | Description | -| --------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| context | Texte | Label for the optimization context applied to the entity selection. This context will be used by the code that handles the entity selection so that it can benefit from the optimization. This feature is [designed for ORDA client/server processing](ORDA/entities.md#client-server-optimization). | +| Property | Type | Description | +| -------- | ---- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| context | Text | Label for the optimization context applied to the entity selection. This context will be used by the code that handles the entity selection so that it can benefit from the optimization. This feature is [designed for ORDA client/server processing](ORDA/entities.md#client-server-optimization). | -#### Exemple 1 +#### Example 1 We want to update an existing entity. The \_\_NEW property is not given, the employee primary key is given and exists: @@ -233,7 +233,7 @@ We want to update an existing entity. The \_\_NEW property is not given, the emp $employees:=ds.Employee.fromCollection($empsCollection) ``` -#### Exemple 2 +#### Example 2 We want to update an existing entity. The \_\_NEW property is not given, the employee primary key is with the \_\_KEY attribute and exists: @@ -336,7 +336,7 @@ In this example, the first entity will be created and saved but the second will //duplicated key error for the second entity ``` -#### Voir également +#### See also [**.toCollection()**](entitySelectionClass.md#tocollection) @@ -346,10 +346,10 @@ In this example, the first entity will be created and saved but the second will ## .get() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    @@ -358,11 +358,11 @@ In this example, the first entity will be created and saved but the second will -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ---------- | --------------- |:--:| ------------------------------------------- | | primaryKey | Integer OR Text | -> | Primary key value of the entity to retrieve | | settings | Objet | -> | Build option: context | -| Résultat | 4D.Entity | <- | Entity matching the designated primary key | +| Result | 4D.Entity | <- | Entity matching the designated primary key | #### Description @@ -379,13 +379,13 @@ Lazy loading is applied, which means that related data is loaded from disk only In the optional *settings* parameter, you can pass an object containing additional options. The following property is supported: -| Propriété | Type | Description | -| --------- | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| context | Texte | Label for the automatic optimization context applied to the entity. This context will be used by the subsequent code that loads the entity so that it can benefit from the optimization. This feature is [designed for ORDA client/server processing](ORDA/entities.md#client-server-optimization). | +| Property | Type | Description | +| -------- | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| context | Text | Label for the automatic optimization context applied to the entity. This context will be used by the subsequent code that loads the entity so that it can benefit from the optimization. This feature is [designed for ORDA client/server processing](ORDA/entities.md#client-server-optimization). | -#### Exemple 1 +#### Example 1 ```4d var $entity : cs.EmployeeEntity @@ -394,7 +394,7 @@ In the optional *settings* parameter, you can pass an object containing addition $entity2:=ds.Invoice.get("DGGX20030") // return the entity whose primary key value is "DGGX20030" ``` -#### Exemple 2 +#### Example 2 This example illustrates the use of the *context* property: @@ -425,19 +425,19 @@ This example illustrates the use of the *context* property: ## .getDataStore() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    **.getDataStore()** : cs.DataStore -| Paramètres | Type | | Description | -| ---------- | ------------ |:--:| -------------------------- | -| Résultat | cs.DataStore | <- | Datastore of the dataclass | +| Parameter | Type | | Description | +| --------- | ------------ |:--:| -------------------------- | +| Result | cs.DataStore | <- | Datastore of the dataclass | @@ -451,7 +451,7 @@ The datastore can be: * a remote datastore, opened using the `Open datastore` command. -#### Exemple +#### Example The ***SearchDuplicate*** project method searches for duplicated values in any dataclass. @@ -479,19 +479,19 @@ The ***SearchDuplicate*** project method searches for duplicated values in any d ## .getInfo() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    **.getInfo()** : Object -| Paramètres | Type | | Description | -| ---------- | ----- | -- | ---------------------------- | -| Résultat | Objet | <- | Information on the dataclass | +| Parameter | Type | | Description | +| --------- | ----- | -- | ---------------------------- | +| Result | Objet | <- | Information on the dataclass | @@ -501,15 +501,15 @@ The `.getInfo( )` function returns **Returned object** -| Propriété | Type | Description | -| ----------- | ----------- | ---------------------------------------- | -| name | Texte | Nom de la dataclass | -| primaryKey | Texte | Name of the primary key of the dataclass | -| tableNumber | Entier long | Internal 4D table number | +| Property | Type | Description | +| ----------- | ------- | ---------------------------------------- | +| name | Text | Name of the dataclass | +| primaryKey | Text | Name of the primary key of the dataclass | +| tableNumber | Integer | Internal 4D table number | -#### Exemple 1 +#### Example 1 ```4d #DECLARE ($entity : Object) @@ -523,7 +523,7 @@ The `.getInfo( )` function returns End if ``` -#### Exemple 2 +#### Example 2 ```4d var $settings : Object @@ -552,19 +552,19 @@ The `.getInfo( )` function returns ## .new() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    **.new()** : 4D.Entity -| Paramètres | Type | | Description | -| ---------- | --------- | -- | --------------------------------- | -| Résultat | 4D.Entity | <- | New entity matching the Dataclass | +| Parameter | Type | | Description | +| --------- | --------- | -- | --------------------------------- | +| Result | 4D.Entity | <- | New entity matching the Dataclass | @@ -576,7 +576,7 @@ The entity object is created in memory and is not saved in the database until th **4D Server**: In client-server, if the primary key of the corresponding table is auto-incremented, it will be calculated when the entity is saved on the server. -#### Exemple +#### Example This example creates a new entity in the "Log" Dataclass and records information in the "info" attribute: @@ -595,28 +595,28 @@ This example creates a new entity in the "Log" Dataclass and records information ## .newSelection() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    **.newSelection**( { *keepOrder* : Integer } ) : 4D.EntitySelection -| Paramètres | Type | | Description | -| ---------- | ------------------ | -- | --------------------------------------------------------------------------------------------------------------------------------------------- | -| keepOrder | Entier long | -> | `dk keep ordered`: creates an ordered entity selection,
    `dk non ordered`: creates an unordered entity selection (default if omitted) | -| Résultat | 4D.EntitySelection | <- | New blank entity selection related to the dataclass | +| Parameter | Type | | Description | +| --------- | ------------------ | -- | --------------------------------------------------------------------------------------------------------------------------------------------- | +| keepOrder | Integer | -> | `dk keep ordered`: creates an ordered entity selection,
    `dk non ordered`: creates an unordered entity selection (default if omitted) | +| Result | 4D.EntitySelection | <- | New blank entity selection related to the dataclass | #### Description -La fonction `.newSelection()` crée une nouvelle sélection d'entité vide, non partageable, liée à la dataclass, en mémoire. +The `.newSelection( )` function creates a new, blank, non-shareable entity selection, related to the dataclass, in memory. -> Pour plus d'informations sur les sélections d'entités non partageables, veuillez vous reporter à [cette section](ORDA/entities.md#shareable-or-non-shareable-entity-selections). +> For information on non-shareable entity selections, please refer to [this section](ORDA/entities.md#shareable-or-non-shareable-entity-selections). If you want to create an ordered entity selection, pass the `dk keep ordered` selector in the *keepOrder* parameter. By default if you omit this parameter, or if you pass the `dk non ordered` selector, the method creates an unordered entity selection. Unordered entity selections are faster but you cannot rely on entity positions. For more information, please see [Ordered vs Unordered entity selections](ORDA/dsMapping.md#ordered-or-unordered-entity-selection). @@ -624,7 +624,7 @@ If you want to create an ordered entity selection, pass the `dk keep ordered` se When created, the entity selection does not contain any entities (`mySelection.length` returns 0). This method lets you build entity selections gradually by making subsequent calls to the [`add()`](entitySelectionClass.md#add) function. -#### Exemple +#### Example ```4d @@ -641,23 +641,23 @@ When created, the entity selection does not contain any entities (`mySelection.l ## .query() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 | Added |
    **.query**( *queryString* : Text { ; *...value* : expression } { ; *querySettings* : Object } ) : 4D.EntitySelection
    **.query**( *formula* : Object { ; *querySettings* : Object } ) : 4D.EntitySelection -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ------------- | ------------------ | -- | --------------------------------------------------------------------------------------------------------------------------- | -| queryString | Texte | -> | Search criteria as string | +| queryString | Text | -> | Search criteria as string | | formula | Objet | -> | Search criteria as formula object | | value | expression | -> | Value(s) to use for indexed placeholder(s) | | querySettings | Objet | -> | Query options: parameters, attributes, args, allowFormulas, context, queryPath, queryPlan | -| Résultat | 4D.EntitySelection | <- | New entity selection made up of entities from dataclass meeting the search criteria specified in *queryString* or *formula* | +| Result | 4D.EntitySelection | <- | New entity selection made up of entities from dataclass meeting the search criteria specified in *queryString* or *formula* | @@ -695,19 +695,19 @@ where: * **comparator**: symbol that compares *attributePath* and *value*. The following symbols are supported: - | Comparison | Symbol(s) | Commentaire | + | Comparison | Symbol(s) | Comment | | ------------------------------------ | ----------- | -------------------------------------------------------------------------------------------------------------- | | Equal to | =, == | Gets matching data, supports the wildcard (@), neither case-sensitive nor diacritic. | | | ===, IS | Gets matching data, considers the @ as a standard character, neither case-sensitive nor diacritic | | Not equal to | #, != | Supports the wildcard (@) | | | !==, IS NOT | Considers the @ as a standard character | - | Inférieur à | < | | - | Supérieur à | > | | - | Inférieur ou égal à | <= | | - | Supérieur ou égal à | >= | | + | Less than | < | | + | Greater than | > | | + | Less than or equal to | <= | | + | Greater than or equal to | >= | | | Included in | IN | Gets data equal to at least one of the values in a collection or in a set of values, supports the wildcard (@) | | Not condition applied on a statement | NOT | Parenthesis are mandatory when NOT is used before a statement containing several operators | - | Contient mot-clé | % | Keywords can be used in attributes of string or picture type | + | Contains keyword | % | Keywords can be used in attributes of string or picture type | * **value**: the value to compare to the current value of the property of each entity in the entity selection or element in the collection. It can be a **placeholder** (see **Using placeholders** below) or any expression matching the data type property.

    When using a constant value, the following rules must be respected: * **text** type constant can be passed with or without simple quotes (see **Using quotes** below). To query a string within a string (a "contains" query), use the wildcard symbol (@) in value to isolate the string to be searched for as shown in this example: "@Smith@". The following keywords are forbidden for text constants: true, false. @@ -720,14 +720,14 @@ where: | Conjunction | Symbol(s) | | ----------- | ----------------------- | | AND | &, &&, and | - | OU | |,||, or | + | OR | |,||, or | * **order by attributePath**: you can include an order by *attributePath* statement in the query so that the resulting data will be sorted according to that statement. You can use multiple order by statements, separated by commas (e.g., order by *attributePath1* desc, *attributePath2* asc). By default, the order is ascending. Pass 'desc' to define a descending order and 'asc' to define an ascending order. > *If you use this statement, the returned entity selection is ordered (for more information, please refer to [Ordered vs Unordered entity selections](ORDA/dsMapping.md#ordered-or-unordered-entity-selection)). **Using quotes** -When you use quotes within queries, you must use single quotes ' ' inside the query and double quotes " " to enclose the whole query, otherwise an error is returned. Par exemple: +When you use quotes within queries, you must use single quotes ' ' inside the query and double quotes " " to enclose the whole query, otherwise an error is returned. For example: ```4d "employee.name = 'smith' AND employee.firstname = 'john'" @@ -770,8 +770,8 @@ Two types of placeholders can be used: **indexed placeholders** and **named plac | - | Indexed placeholders | Named placeholders | | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Définition | Parameters are inserted as :paramIndex (for example :1, :2...) in queryString and their corresponding values are provided by the sequence of value parameter(s). You can use up to 128 value parameters | Parameters are inserted as :paramName (for example :myparam) and their values are provided in the attributes and/or parameters objects in the querySettings parameter | -| Exemple | $r:=class.query(":1=:2";"city";"Chicago") | $o.attributes:=New object("att";"city")
    $o.parameters:=New object("name";"Chicago")
    $r:=class.query(":att=:name";$o) | +| Definition | Parameters are inserted as :paramIndex (for example :1, :2...) in queryString and their corresponding values are provided by the sequence of value parameter(s). You can use up to 128 value parameters | Parameters are inserted as :paramName (for example :myparam) and their values are provided in the attributes and/or parameters objects in the querySettings parameter | +| Example | $r:=class.query(":1=:2";"city";"Chicago") | $o.attributes:=New object("att";"city")
    $o.parameters:=New object("name";"Chicago")
    $r:=class.query(":att=:name";$o) | You can mix all argument kinds in *queryString*. A *queryString* can contain, for *attributePath*, *formula* and *value* parameters: @@ -800,7 +800,7 @@ You can mix all argument kinds in *queryString*. A *queryString* can contain, fo 2. It prevents having to worry about formatting or character issues, especially when handling *attributePath* or *value* parameters that might contain non-alphanumeric characters such as ".", "['... -3. It allows the use of variables or expressions in query arguments. Voici quelques exemples : +3. It allows the use of variables or expressions in query arguments. Examples: ```4d $result:=$col.query("address.city = :1 & name =:2";$city;$myVar+"@") @@ -837,21 +837,21 @@ The formula must have been created using the `Formula` or `Formula from string` **querySettings parameter** -In the *querySettings* parameter, you can pass an object containing additional options. Les propriétés suivantes sont prises en charge : +In the *querySettings* parameter, you can pass an object containing additional options. The following properties are supported: -| Propriété | Type | Description | +| Property | Type | Description | | ------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | parameters | Objet | **Named placeholders for values** used in the *queryString* or *formula*. Values are expressed as property / value pairs, where property is the placeholder name inserted for a value in the *queryString* or *formula* (":placeholder") and value is the value to compare. You can mix indexed placeholders (values directly passed in value parameters) and named placeholder values in the same query. | | attributes | Objet | **Named placeholders for attribute paths** used in the *queryString* or *formula*. Attributes are expressed as property / value pairs, where property is the placeholder name inserted for an attribute path in the *queryString* or *formula* (":placeholder"), and value can be a string or a collection of strings. Each value is a path that can designate either a scalar or a related attribute of the dataclass or a property in an object field of the dataclass

    TypeDescription
    ChaineattributePath expressed using the dot notation, e.g. "name" or "user.address.zipCode"
    Collection of stringsEach string of the collection represents a level of attributePath, e.g. \["name"] or \["user","address","zipCode"]. Using a collection allows querying on attributes with names that are not compliant with dot notation, e.g. \["4Dv17.1","en/fr"]
    You can mix indexed placeholders (values directly passed in *value* parameters) and named placeholder values in the same query. | | args | Objet | Parameter(s) to pass to formulas, if any. The **args** object will be received in $1 within formulas and thus its values will be available through *$1.property* (see example 3). | | allowFormulas | Booléen | True to allow the formula calls in the query (default). Pass false to disallow formula execution. If set to false and `query()` is given a formula, an error is sent (1278 - Formula not allowed in this member method). | -| context | Texte | Label for the automatic optimization context applied to the entity selection. This context will be used by the code that handles the entity selection so that it can benefit from the optimization. This feature is designed for client/server processing; for more information, please refer to the **Client/server optimization** section. | +| context | Text | Label for the automatic optimization context applied to the entity selection. This context will be used by the code that handles the entity selection so that it can benefit from the optimization. This feature is designed for client/server processing; for more information, please refer to the **Client/server optimization** section. | | queryPlan | Booléen | In the resulting entity selection, returns or does not return the detailed description of the query just before it is executed, i.e. the planned query. The returned property is an object that includes each planned query and subquery (in the case of a complex query). This option is useful during the development phase of an application. It is usually used in conjunction with queryPath. Default if omitted: false. **Note**: This property is supported only by the `entitySelection.query( )` and `dataClass.query( )` functions. | | queryPath | Booléen | In the resulting entity selection, returns or does not return the detailed description of the query as it is actually performed. The returned property is an object that contains the actual path used for the query (usually identical to that of the queryPlan, but may differ if the engine manages to optimize the query), as well as the processing time and the number of records found. This option is useful during the development phase of an application. Default if omitted: false. **Note**: This property is supported only by the `entitySelection.query( )` and `dataClass.query( )` functions. | **About queryPlan and queryPath** -The information recorded in `queryPlan`/`queryPath` include the query type (indexed and sequential) and each necessary subquery along with conjunction operators. Les chemins d'accès des requêtes contiennent également le nombre d'entités identifiées et la durée d'exécution de chaque critère de recherche. You may find it useful to analyze this information while developing your application(s). Généralement, la description du plan de requête et son chemin d'accès sont identiques mais ils peuvent différer car 4D peut intégrer des optimisations dynamiques lorsqu'une requête est exécutée, afin d'améliorer les performances. Par exemple, le moteur 4D peut convertir dynamiquement une requête indexée en requête séquentielle s'il estime que ce processus est plus rapide. Ce cas particulier peut se produire lorsque le nombre d'entités recherchées est faible. +The information recorded in `queryPlan`/`queryPath` include the query type (indexed and sequential) and each necessary subquery along with conjunction operators. Query paths also contain the number of entities found and the time required to execute each search criterion. You may find it useful to analyze this information while developing your application(s). Generally, the description of the query plan and its path are identical but they can differ because 4D can implement dynamic optimizations when a query is executed in order to improve performance. For example, the 4D engine can dynamically convert an indexed query into a sequential one if it estimates that it is faster. This particular case can occur when the number of entities being searched for is low. For example, if you execute the following query: @@ -880,7 +880,7 @@ queryPath: steps:[{steps:[{description:[index : Company.revenues ] > 10000000,time:0,recordsfounds:933}]}]}]}]} ``` -#### Exemple 1 +#### Example 1 This section provides various examples of queries. @@ -945,7 +945,7 @@ Query with queryPlan and queryPath objects: ```4d $entitySelection:=ds.Employee.query("(firstName = :1 or firstName = :2) and (lastName = :3 or lastName = :4)";"D@";"R@";"S@";"K@";New object("queryPlan";True;"queryPath";True)) - //vous pouvez ensuite obtenir ces propriétés dans la sélection d'entité résultante + //you can then get these properties in the resulting entity selection var $queryPlan; $queryPath : Object $queryPlan:=$entitySelection.queryPlan $queryPath:=$entitySelection.queryPath @@ -980,7 +980,7 @@ Query with indexed placeholders for attributes: ```4d var $es : cs.EmployeeSelection $es:=ds.Employee.query(":1 = 1234 and :2 = 'Smith'";"salesperson.userId";"name") - //salesperson est une entité reliée + //salesperson is a related entity ``` Query with indexed placeholders for attributes and named placeholders for values: @@ -991,7 +991,7 @@ var $querySettings : Object $querySettings:=New object $querySettings.parameters:=New object("customerName";"Smith") $es:=ds.Customer.query(":1 = 1234 and :2 = :customerName";"salesperson.userId";"name";$querySettings) - //salesperson est une entité reliée + //salesperson is a related entity ``` Query with indexed placeholders for attributes and values: @@ -1000,10 +1000,10 @@ Query with indexed placeholders for attributes and values: ```4d var $es : cs.EmployeeSelection $es:=ds.Clients.query(":1 = 1234 and :2 = :3";"salesperson.userId";"name";"Smith") - //salesperson est une entité reliée + //salesperson is a related entity ``` -#### Exemple 2 +#### Example 2 This section illustrates queries with named placeholders for attributes. @@ -1051,12 +1051,12 @@ Query with named placeholders for attributes and values: var $es : cs.EmployeeSelection var $name : Text $querySettings:=New object - //Placeholders pour les valeurs - //Il est demandé à l'utilisateur de saisir un nom - $name:=Request("Veuillez saisir un nom à rechercher :") + //Named placeholders for values + //The user is asked for a name + $name:=Request("Please enter the name to search:") If(OK=1) $querySettings.parameters:=New object("givenName";$name) - //Placeholders pour les chemins d'attributs + //Named placeholders for attribute paths $querySettings.attributes:=New object("attName";"name") $es:=ds.Employee.query(":attName= :givenName";$querySettings) End if @@ -1112,7 +1112,7 @@ A text formula in *queryString* receives a parameter: ``` ```4d - //méthode checkName + //checkName method #DECLARE($exclude : Text) -> $result : Boolean $result:=(Position($exclude;This.lastname)=0) ``` @@ -1126,7 +1126,7 @@ Using the same ***checkName*** method, a `Formula` object as placeholder receive $settings:=New object() $settings.args:=New object("filter";"-") $es:=ds.Students.query(":1 and nationality=:2";$formula;"French";$settings) - $settings.args.filter:="*" // modifie les paramètres sans mettre à jour l'objet $formula + $settings.args.filter:="*" // change the parameters without updating the $formula object $es:=ds.Students.query(":1 and nationality=:2";$formula;"French";$settings) ``` @@ -1139,7 +1139,7 @@ We want to disallow formulas, for example when the user enters their query: $queryString:=Request("Enter your query:") if(OK=1) $settings:=New object("allowFormulas";False) - $es:=ds.Students.query($queryString;$settings) //Une erreur est gnérée si $queryString contient une formule + $es:=ds.Students.query($queryString;$settings) //An error is raised if $queryString contains a formula End if ``` From 57ba31b9de83b752ad211ad5cb3aeaf71c3d993f Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:37:13 +0100 Subject: [PATCH 122/311] New translations classClass.md (French) --- website/translated_docs/fr/API/classClass.md | 83 ++++++++++++-------- 1 file changed, 49 insertions(+), 34 deletions(-) diff --git a/website/translated_docs/fr/API/classClass.md b/website/translated_docs/fr/API/classClass.md index 73d873ae3736e8..1af48114579a7c 100644 --- a/website/translated_docs/fr/API/classClass.md +++ b/website/translated_docs/fr/API/classClass.md @@ -4,11 +4,11 @@ title: Class --- -Lorsqu'une classe utilisateur est [définie](Concepts/classes.md#class-definition) dans le projet, elle est chargée dans l'environnement de langage 4D. Une classe est un objet lui-même, de la classe "Class", qui a des propriétés et une fonction. +When a user class is [defined](Concepts/classes.md#class-definition) in the project, it is loaded in the 4D language environment. A class is an object itself, of "Class" class, which has properties and a function. -### Sommaire +### Summary | | @@ -22,10 +22,10 @@ Lorsqu'une classe utilisateur est [définie](Concepts/classes.md#class-definitio ## .name -

    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R3 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R3 | Added |
    @@ -34,9 +34,9 @@ Lorsqu'une classe utilisateur est [définie](Concepts/classes.md#class-definitio #### Description -La propriété `.name` contient le nom de l'objet `4D.Class`. Les noms de classe sont sensibles à la casse. +The `.name` property contains the name of the `4D.Class` object. Class names are case sensitive. -Cette propriété est en **lecture seule**. +This property is **read-only**. @@ -45,65 +45,80 @@ Cette propriété est en **lecture seule**. ## .new() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R3 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R3 | Added |
    **.new()** : 4D.Class -| Paramètres | Type | | Description | -| ---------- | -------- |:--:| ------------------------- | -| Résultat | 4D.Class | <- | Nouvel objet de la classe | +| Parameter | Type | | Description | +| --------- | -------- |:--:| ----------------------- | +| Result | 4D.Class | <- | New object of the class | #### Description -La `.new()` function crée et returne un objet `cs.className` qui est une nouvelle instance de la classe sur laquelle il est appelé. Cette fonction est automatiquement disponible sur toutes les classes à partir du class store [`cs`](Concepts/classes.md#cs). +The `.new()` function creates and returns a `cs.className` object which is a new instance of the class on which it is called. This function is automatically available on all classes from the [`cs` class store](Concepts/classes.md#cs). -S'il est appelé sur une classe inexistante, une erreur est retournée. +If it is called on a non-existing class, an error is returned. -#### Exemple +#### Example -Pour créer une nouvelle instance de la classe Person : +To create a new instance of the Person class: ```4d var $person : cs.Person -$person:=cs.Person.new() //créer la nouvelle instance -//$Person contient les fonctions de la classe -```## .superclass +$person:=cs.Person.new() //create the new instance +//$Person contains functions of the class +``` + + + + + + +## .superclass -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R3 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R3 | Added | -
    **.superclass** : 4D.Class#### Description +
    + + +**.superclass** : 4D.Class + +#### Description -La propriété `.superclass`retourne la classe parente de la classe. Une superclasse peut être un objet `4D.Class`, ou un objet `cs.className`. Si la classe n'a pas de classe parente, la propriété renvoie **null**. +The `.superclass` property returns the parent class of the class. A superclass can be a `4D.Class` object, or a `cs.className` object. If the class does not have a parent class, the property returns **null**. -Une superclasse de classe utilisateur est déclarée dans une classe à l'aide du mot-clé [`Class extend`](Concepts/classes.md#class-extends-classname). +A superclass of a user class is declared in a class by using the [`Class extends `](Concepts/classes.md#class-extends-classname) keyword. -Cette propriété est en **lecture seule**. +This property is **read-only**. -#### Exemples +#### Examples ```4d $sup:=4D.File.superclass //Document $sup:=4D.Document.superclass //Object $sup:=4D.Object.superclass //null -// Si vous avez créé une classe MyFile -// avec `Class extends File` +// If you created a MyFile class +// with `Class extends File` $sup:=cs.MyFile.superclass //File ``` -**Voir également :** [Super](Concepts/classes.md#super) +**See also:** [Super](Concepts/classes.md#super) + + + From 9025a6291c652ad9e20394a6d78b3dbeae1d26ed Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:37:17 +0100 Subject: [PATCH 123/311] New translations collectionClass.md (French) --- .../translated_docs/fr/API/collectionClass.md | 877 +++++++++--------- 1 file changed, 439 insertions(+), 438 deletions(-) diff --git a/website/translated_docs/fr/API/collectionClass.md b/website/translated_docs/fr/API/collectionClass.md index 75989fdf10162c..43c56f3ee7915b 100644 --- a/website/translated_docs/fr/API/collectionClass.md +++ b/website/translated_docs/fr/API/collectionClass.md @@ -4,9 +4,9 @@ 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 variables. -Une collection est initialisée avec : +A collection is initialized with: | | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -14,14 +14,15 @@ Une collection est initialisée avec : | [](#new-shared-collection)

        | -### Exemple +### Example ```4d - var $colVar : Collection //création d'une variable 4D de type collection. $colVar:=New $colVar:=New collection //initialisation de la collection et assignation à la variable 4D + var $colVar : Collection //creation of collection type 4D variable + $colVar:=New collection //initialization of the collection and assignment to the 4D variable ``` -### Sommaire +### Summary | | @@ -68,53 +69,53 @@ Une collection est initialisée avec : -## Nouvelle collection +## New collection -

    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R4 | Added |
    **New collection** {( *...value* : any )} : Collection -| Paramètres | Type | | Description | -| ---------- | -------------------------------------------------------------------------- |:--:| ----------------------- | -| value | Numérique, Texte, Date, Heure, Booléen, Objet, Collection, Image, Pointeur | -> | Valeur(s) de collection | -| Résultat | Collection | <- | Nouvelle collection | +| Parameter | Type | | Description | +| --------- | ----------------------------------------------------------------------- |:--:| --------------------- | +| value | Number, Text, Date, Time, Boolean, Object, Collection, Picture, Pointer | -> | Collection's value(s) | +| Result | Collection | <- | New collection | #### Description -La commande `New collection` crée une nouvelle collection vide ou préremplie et retourne sa référence. +The `New collection` command creates a new empty or prefilled collection and returns its reference. -Si vous ne passez aucun paramètre, `New collection` crée une collection vide et retourne sa référence. +If you do not pass any parameters, `New collection` creates an empty collection and returns its reference. -Vous devez affecter la référence retournée à une variable 4D de type Collection. -> Gardez à l'esprit que les instructions `var : Collection` ou `C_COLLECTION` déclarent une variable de type `Collection` mais ne créent aucune collection. +You must assign the returned reference to a 4D variable of the Collection type. +> Keep in mind that `var : Collection` or `C_COLLECTION` statements declare a variable of the `Collection` type but does not create any collection. -En option, vous pouvez préremplir la nouvelle collection en utilisant une ou plusieurs valeur(s) (*value*(s)) en tant que paramètre(s). +Optionally, you can prefill the new collection by passing one or several *value*(s) as parameter(s). -Sinon, vous pouvez ajouter ou modifier des éléments ultérieurement par affectation. Par exemple: +Otherwise, you can add or modify elements subsequently through assignment. For example: ```4d myCol[10]:="My new element" ``` -Si le nouvel indice de l'élément est au-delà du dernier élément existant de la collection, la collection est automatiquement redimensionnée et tous les nouveaux éléments intermédiaires sont attribués une valeur **null**. +If the new element index is beyond the last existing element of the collection, the collection is automatically resized and all new intermediary elements are assigned a **null** value. -Vous pouvez passer n'importe quel nombre de valeurs de n'importe quel type pris en charge (number, text, date, picture, pointer, object, collection...). Contrairement aux tableaux, les collections peuvent mélanger des données de différents types. +You can pass any number of values of any supported type (number, text, date, picture, pointer, object, collection...). Unlike arrays, collections can mix data of different types. -Vous devez prêter attention aux problèmes de conversion suivants : +You must pay attention to the following conversion issues: -* Si vous passez un pointeur, il est conservé "tel quel"; il est évalué à l'aide de la commande `JSON Stringify` -* Les dates sont stockées sous la forme de date « aaaa-mm-jj » ou des chaînes au format « AAAA-MM-JJTHH: ss.SSSZ: mm » , selon la configuration actuelle « dates à l'intérieur des objets » de la base de données. Lors de la conversion de dates 4D en texte avant de les stocker dans la collection, par défaut le programme prend en compte le fuseau horaire local. Vous pouvez modifier ce comportement à l'aide du sélecteur `Dates inside objects` de la commande `SET DATABASE PARAMETER`. -* Si vous passez une heure, elle est stockée sous la forme d'un nombre de millisecondes (Réel). +* If you pass a pointer, it is kept "as is"; it is evaluated using the `JSON Stringify` command +* Dates are stored as "yyyy-mm-dd" dates or strings with the "YYYY-MM-DDTHH:mm:ss.SSSZ" format, according to the current "dates inside objects" database setting. When converting 4D dates into text prior to storing them in the collection, by default the program takes the local time zone into account. You can modify this behavior using the `Dates inside objects` selector of the `SET DATABASE PARAMETER` command. +* If you pass a time, it is stored as a number of milliseconds (Real). -#### Exemple 1 +#### Example 1 @@ -126,7 +127,7 @@ You want to create a new empty collection and assign it to a 4D collection varia //$myCol=[] ``` -#### Exemple 2 +#### Example 2 You want to create a prefilled collection: @@ -144,7 +145,7 @@ You create a new collection and then add a new element: var $coll : Collection $coll:=New collection("a";"b";"c") //$coll=["a","b","c"] - $coll[9]:="z" //ajouter un 10e élément avec la valeur "z" + $coll[9]:="z" //add a 10th element with value "z" $vcolSize:=$coll.length //10 //$coll=["a","b","c",null,null,null,null,null,null,"z"] ``` @@ -152,22 +153,22 @@ You create a new collection and then add a new element: -## Nouvelle collection partagée +## New shared collection -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    **New shared collection** {( *...value* : any )} : Collection -| Paramètres | Type | | Description | -| ---------- | ------------------------------------------------------------------- |:--:| ----------------------------------- | -| value | Number, Text, Date, Time, Boolean, Shared object, Shared collection | -> | Valeur(s) de la collection partagée | -| Résultat | Collection | <- | Nouvelle collection partagée | +| Parameter | Type | | Description | +| --------- | ------------------------------------------------------------------- |:--:| ---------------------------- | +| value | Number, Text, Date, Time, Boolean, Shared object, Shared collection | -> | Shared collection's value(s) | +| Result | Collection | <- | New shared collection | @@ -180,8 +181,8 @@ Adding an element to this collection must be surrounded by the [`Use...End`](Con If you do not pass any parameters, `New shared collection` creates an empty shared collection and returns its reference. -Vous devez affecter la référence retournée à une variable 4D de type Collection. -> Gardez à l'esprit que les instructions `var : Collection` ou `C_COLLECTION` déclarent une variable de type `Collection` mais ne créent aucune collection. +You must assign the returned reference to a 4D variable of the Collection type. +> Keep in mind that `var : Collection` or `C_COLLECTION` statements declare a variable of the `Collection` type but does not create any collection. Optionally, you can prefill the new shared collection by passing one or several *value*(s) as parameter(s). Otherwise, you can add or modify elements subsequently through object notation assignment (see example). @@ -190,7 +191,7 @@ If the new element index is beyond the last existing element of the shared colle You can pass any number of values of the following supported types: * number (real, longint...). Number values are always stored as reals. -* Texte +* text * boolean * date * time (stored as number of milliseconds - real) @@ -201,7 +202,7 @@ You can pass any number of values of the following supported types: (*)When a shared object or collection is added to a shared collection, they share the same *locking identifier*. For more information on this point, refer to the **4D Developer**'s guide. -#### Exemple +#### Example ```4d $mySharedCol:=New shared collection("alpha";"omega") @@ -215,10 +216,10 @@ You can pass any number of values of the following supported types: ## .average() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    @@ -226,10 +227,10 @@ You can pass any number of values of the following supported types: -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ------------ | --------------- |:--:| ----------------------------------------------- | -| propertyPath | Texte | -> | Object property path to be used for calculation | -| Résultat | Real, Undefined | <- | Arithmetic mean (average) of collection values | +| propertyPath | Text | -> | Object property path to be used for calculation | +| Result | Real, Undefined | <- | Arithmetic mean (average) of collection values | @@ -251,7 +252,7 @@ If the collection contains objects, pass the *propertyPath* parameter to indicat * *propertyPath* is not found in the collection. -#### Exemple 1 +#### Example 1 ```4d var $col : Collection @@ -259,7 +260,7 @@ If the collection contains objects, pass the *propertyPath* parameter to indicat $vAvg:=$col.average() //12 ``` -#### Exemple 2 +#### Example 2 ```4d var $col : Collection @@ -277,19 +278,19 @@ If the collection contains objects, pass the *propertyPath* parameter to indicat ## .clear() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    **.clear()** : Collection -| Paramètres | Type | | Description | -| ---------- | ---------- |:--:| --------------------------------------------- | -| Résultat | Collection | <- | Original collection with all elements removed | +| Parameter | Type | | Description | +| --------- | ---------- |:--:| --------------------------------------------- | +| Result | Collection | <- | Original collection with all elements removed | @@ -298,7 +299,7 @@ If the collection contains objects, pass the *propertyPath* parameter to indicat The `.clear()` function removes all elements from the collection instance and returns an empty collection. > This function modifies the original collection. -#### Exemple +#### Example ```4d var $col : Collection @@ -316,10 +317,10 @@ $vSize:=$col.length //$vSize=0 ## .combine() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    @@ -327,11 +328,11 @@ $vSize:=$col.length //$vSize=0 -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| ----------------------------------------------------------------------------- | -| col2 | Collection | -> | Collection to combine | -| index | Entier long | -> | Position to which insert elements to combine in collection (default=length+1) | -| Résultat | Collection | <- | Original collection containing combined element(s) | +| Parameter | Type | | Description | +| --------- | ---------- |:--:| ----------------------------------------------------------------------------- | +| col2 | Collection | -> | Collection to combine | +| index | Integer | -> | Position to which insert elements to combine in collection (default=length+1) | +| Result | Collection | <- | Original collection containing combined element(s) | @@ -348,7 +349,7 @@ By default, *col2* elements are added at the end of the orginal collection. You * If the calculated value is negative, *index* is set to 0. -#### Exemple +#### Example ```4d var $c; $fruits : Collection @@ -366,20 +367,20 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6] ## .concat() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    **.concat**( *value* : any { *;...valueN* } ) : Collection -| Paramètres | 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 | -| Résultat | Collection | <- | New collection with value(s) added to the original 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 | +| Result | Collection | <- | New collection with value(s) added to the original collection | @@ -391,7 +392,7 @@ The `.concat()` function returns a new If *value* is a collection, all its elements are added as new elements at the end of the original collection. If *value* is not a collection, it is added itself as a new element. -#### Exemple +#### Example ```4d var $c : Collection @@ -410,11 +411,11 @@ $c2:=$c.concat(6;7;8) //[1,2,3,4,5,6,7,8] ## .copy() -
    Historique -| Version | Modifications | +
    History +| Version | Changes | | ------- | -------------------------------------------------- | | v18 R3 | New *ck shared* option. New *groupWith* parameters | -| v16 R6 | Ajoutées | +| v16 R6 | Added |
    @@ -422,12 +423,12 @@ $c2:=$c.concat(6;7;8) //[1,2,3,4,5,6,7,8] -| Paramètres | Type | | Description | -| ------------ | ----------- |:--:| -------------------------------------------------------------------------------------------------------- | -| option | Entier long | -> | `ck resolve pointers`: resolve pointers before copying,
    `ck shared`: return a shared collection | -| groupWithCol | Collection | -> | Shared collection to be grouped with the resulting collection | -| groupWithObj | Objet | -> | Shared object to be grouped with the resulting collection | -| Résultat | Collection | <- | Deep copy of the original collection | +| Parameter | Type | | Description | +| ------------ | ---------- |:--:| -------------------------------------------------------------------------------------------------------- | +| option | Integer | -> | `ck resolve pointers`: resolve pointers before copying,
    `ck shared`: return a shared collection | +| groupWithCol | Collection | -> | Shared collection to be grouped with the resulting collection | +| groupWithObj | Objet | -> | Shared object to be grouped with the resulting collection | +| Result | Collection | <- | Deep copy of the original collection | @@ -446,7 +447,7 @@ If passed, the *option* parameter can contain one of the following constants (or The *groupWithCol* or *groupWithObj* parameters allow you to designate a collection or an object with which the resulting collection should be associated. -#### Exemple 1 +#### Example 1 We want to copy the *$lastnames* regular (non shared) collection into the *$sharedObject* shared object. To do this, we must create a shared copy of the collection (*$sharedLastnames*). @@ -458,18 +459,18 @@ var $text : Text $sharedObject:=New shared object $text:=Document to text(Get 4D folder(Current resources folder)+"lastnames.txt") -$lastnames:=JSON Parse($text) //$lastnames est un collection standard +$lastnames:=JSON Parse($text) //$lastnames is a regular collection -$sharedLastnames:=$lastnames.copy(ck shared) //$sharedLastnames est une collection partagée +$sharedLastnames:=$lastnames.copy(ck shared) //$sharedLastnames is a shared collection -//Nous pouvons désormais placer $sharedLastnames dans $sharedObject +//Now we can put $sharedLastnames into $sharedObject Use($sharedObject) $sharedObject.lastnames:=$sharedLastnames End use ``` -#### Exemple 2 +#### Example 2 We want to combine *$sharedColl1* and *$sharedColl2*. Since they belong to different shared groups, a direct combination would result in an error. Therefore, we must make a shared copy of *$sharedColl1* and designate *$sharedColl2* as a shared group for the copy. @@ -536,10 +537,10 @@ This example illustrates the use of the `ck resolve pointers` option: ## .count() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    @@ -547,10 +548,10 @@ This example illustrates the use of the `ck resolve pointers` option: -| Paramètres | Type | | Description | -| ------------ | ----- |:--:| ----------------------------------------------- | -| propertyPath | Texte | -> | Object property path to be used for calculation | -| Résultat | Réel | <- | Number of elements in the collection | +| Parameter | Type | | Description | +| ------------ | ---- |:--:| ----------------------------------------------- | +| propertyPath | Text | -> | Object property path to be used for calculation | +| Result | Real | <- | Number of elements in the collection | @@ -560,7 +561,7 @@ The `.count()` function returns the numb If the collection contains objects, you can pass the *propertyPath* parameter. In this case, only elements that contain the *propertyPath* are taken into account. -#### Exemple +#### Example ```4d var $col : Collection @@ -584,10 +585,10 @@ If the collection contains objects, you can pass the *propertyPath* parameter. I ## .countValues() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    @@ -595,11 +596,11 @@ If the collection contains objects, you can pass the *propertyPath* parameter. I -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ------------ | ----------------------------------------------- |:--:| ----------------------------------------------- | | value | Text, Number, Boolean, Date, Object, Collection | -> | Value to count | -| propertyPath | Texte | -> | Object property path to be used for calculation | -| Résultat | Réel | <- | Number of occurrences of the value | +| propertyPath | Text | -> | Object property path to be used for calculation | +| Result | Real | <- | Number of occurrences of the value | @@ -618,7 +619,7 @@ For an element to be found, the type of *value* must be equivalent to the type o The optional *propertyPath* parameter allows you to count values inside a collection of objects: pass in *propertyPath* the path of the property whose values you want to count. > This function does not modify the original collection. -#### Exemple 1 +#### Example 1 ```4d var $col : Collection @@ -628,7 +629,7 @@ The optional *propertyPath* parameter allows you to count values inside a collec ``` -#### Exemple 2 +#### Example 2 ```4d var $col : Collection @@ -665,10 +666,10 @@ The optional *propertyPath* parameter allows you to count values inside a collec ## .distinct() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    @@ -676,11 +677,11 @@ The optional *propertyPath* parameter allows you to count values inside a collec -| Paramètres | Type | | Description | -| ------------ | ----------- |:--:| ---------------------------------------------------------------- | -| option | Entier long | -> | `ck diacritical`: diacritical evaluation ("A" # "a" for example) | -| propertyPath | Texte | -> | Path of attribute whose distinct values you want to get | -| Résultat | Collection | <- | New collection with only distinct values | +| Parameter | Type | | Description | +| ------------ | ---------- |:--:| ---------------------------------------------------------------- | +| option | Integer | -> | `ck diacritical`: diacritical evaluation ("A" # "a" for example) | +| propertyPath | Text | -> | Path of attribute whose distinct values you want to get | +| Result | Collection | <- | New collection with only distinct values | @@ -697,7 +698,7 @@ If the collection contains objects, you can pass the *propertyPath* parameter to -#### Exemple +#### Example ```4d var $c; $c2 : Collection @@ -720,21 +721,21 @@ If the collection contains objects, you can pass the *propertyPath* parameter to ## .equal() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    **.equal**( *collection2* : Collection {; *option* : Integer } ) : Boolean -| Paramètres | Type | | Description | -| ----------- | ----------- |:--:| ---------------------------------------------------------------- | -| collection2 | Collection | -> | Collection to compare | -| option | Entier long | -> | `ck diacritical`: diacritical evaluation ("A" # "a" for example) | -| Résultat | Booléen | <- | True if collections are identical, false otherwise | +| Parameter | Type | | Description | +| ----------- | ---------- |:--:| ---------------------------------------------------------------- | +| collection2 | Collection | -> | Collection to compare | +| option | Integer | -> | `ck diacritical`: diacritical evaluation ("A" # "a" for example) | +| Result | Booléen | <- | True if collections are identical, false otherwise | @@ -745,7 +746,7 @@ The `.equal()` function compares the col By default, a non-diacritical evaluation is performed. If you want the evaluation to be case sensitive or to differentiate accented characters, pass the `ck diacritical` constant in the option parameter. > Elements with **Null** values are not equal to Undefined elements. -#### Exemple +#### Example ```4d var $c; $c2 : Collection @@ -776,22 +777,22 @@ By default, a non-diacritical evaluation is performed. If you want the evaluatio ## .every() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    **.every**( *methodName* : Text { ;*...param* : any } ) : Boolean
    **.every**( *startFrom* : Integer ; *methodName* : Text { ;*...param* : any } ) : Boolean -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| ------------------------------------------------- | -| startFrom | Entier long | -> | Index to start the test at | -| methodName | Texte | -> | Name of the method to call for the test | -| param | Mixed | -> | Parameter(s) to pass to methodName | -| Résultat | Booléen | <- | True if all elements successfully passed the test | +| Parameter | Type | | Description | +| ---------- | ------- |:--:| ------------------------------------------------- | +| startFrom | Integer | -> | Index to start the test at | +| methodName | Text | -> | Name of the method to call for the test | +| param | Mixed | -> | Parameter(s) to pass to methodName | +| Result | Booléen | <- | True if all elements successfully passed the test | @@ -822,16 +823,16 @@ By default, `.every()` tests the whole collection. Optionally, you can pass in * * If *startFrom* = 0, the whole collection is searched (default). -#### Exemple 1 +#### Example 1 ```4d var $c : Collection var $b : Boolean $c:=New collection $c.push(5;3;1;4;6;2) -$b:=$c.every("NumberGreaterThan0") //retourne true +$b:=$c.every("NumberGreaterThan0") //returns true $c.push(-1) -$b:=$c.every("NumberGreaterThan0") //retourne false +$b:=$c.every("NumberGreaterThan0") //returns false ``` With the following ***NumberGreaterThan0*** method: @@ -840,7 +841,7 @@ With the following ***NumberGreaterThan0*** method: $1.result:=$1.value>0 ``` -#### Exemple 2 +#### Example 2 This example tests that all elements of a collection are of the real type: @@ -872,10 +873,10 @@ End if ## .extract() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    @@ -883,12 +884,12 @@ End if -| Paramètres | Type | | Description | -| ------------ | ----------- |:--:| ---------------------------------------------------------------------------------------------------------------------------------- | -| propertyPath | Texte | -> | Object property path whose values must be extracted to the new collection | -| targetpath | Texte | -> | Target property path or property name | -| option | Entier long | -> | `ck keep null`: include null properties in the returned collection (ignored by default). Parameter ignored if *targetPath* passed. | -| Résultat | Collection | <- | New collection containing extracted values | +| Parameter | Type | | Description | +| ------------ | ---------- |:--:| ---------------------------------------------------------------------------------------------------------------------------------- | +| propertyPath | Text | -> | Object property path whose values must be extracted to the new collection | +| targetpath | Text | -> | Target property path or property name | +| option | Integer | -> | `ck keep null`: include null properties in the returned collection (ignored by default). Parameter ignored if *targetPath* passed. | +| Result | Collection | <- | New collection containing extracted values | @@ -907,7 +908,7 @@ The contents of the returned collection depends on the *targetPath* parameter: * If one or more *targetPath* parameter(s) are passed, `.extract()` populates the new collection with the *propertyPath* properties and each element of the new collection is an object with *targetPath* properties filled with the corresponding *propertyPath* properties. Null values are kept (*option* parameter is ignored with this syntax). -#### Exemple 1 +#### Example 1 ```4d var $c : Collection @@ -921,7 +922,7 @@ $c2:=$c.extract("name";ck keep null) //$c2=[Cleveland,null,Blountsville,null] ``` -#### Exemple 2 +#### Example 2 ```4d @@ -947,10 +948,10 @@ $c2:=$c.extract("name";"City";"zc";"Zip") //$c2=[{Zip:35060},{City:null,Zip:3504 ## .fill() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    @@ -959,12 +960,12 @@ $c2:=$c.extract("name";"City";"zc";"Zip") //$c2=[{Zip:35060},{City:null,Zip:3504 -| Paramètres | Type | | Description | -| ---------- | ----------------------------------------------- |:--:| -------------------------------------- | -| value | number, Text, Collection, Object, Date, Boolean | -> | Filling value | -| startFrom | Entier long | -> | Start index (included) | -| end | Entier long | -> | End index (not included) | -| Résultat | collection | <- | Original collection with filled values | +| Parameter | Type | | Description | +| --------- | ----------------------------------------------- |:--:| -------------------------------------- | +| value | number, Text, Collection, Object, Date, Boolean | -> | Filling value | +| startFrom | Integer | -> | Start index (included) | +| end | Integer | -> | End index (not included) | +| Result | collection | <- | Original collection with filled values | @@ -984,7 +985,7 @@ In case of inconsistency, the following rules apply: * If *end* < *startFrom* (passed or calculated values), the method does nothing. -#### Exemple +#### Example ```4d var $c : Collection @@ -1004,10 +1005,10 @@ In case of inconsistency, the following rules apply: ## .filter() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    @@ -1015,11 +1016,11 @@ In case of inconsistency, the following rules apply: -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ---------- | ---------- |:--:| ---------------------------------------------------------- | -| methodName | Texte | -> | Name of the function to call to filter the collection | +| methodName | Text | -> | Name of the function to call to filter the collection | | param | Mixed | -> | Parameter(s) to pass to *methodName* | -| Résultat | Collection | <- | New collection containing filtered elements (shallow copy) | +| Result | Collection | <- | New collection containing filtered elements (shallow copy) | @@ -1042,7 +1043,7 @@ In *methodName*, pass the name of the method to use to evaluate collection eleme * *$1.stop* (boolean, optional): **true** to stop the method callback. The returned value is the last calculated. -#### Exemple 1 +#### Example 1 You want to get the collection of text elements whose length is smaller than 6: @@ -1063,7 +1064,7 @@ The code for ***LengthLessThan*** method is: End if ``` -#### Exemple 2 +#### Example 2 You want to filter elements according to their value type: @@ -1097,10 +1098,10 @@ The code for ***TypeLookUp*** is: ## .find() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    @@ -1108,12 +1109,12 @@ The code for ***TypeLookUp*** is: -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| -------------------------------------------- | -| startFrom | Entier long | -> | Index to start the search at | -| methodName | Texte | -> | Name of the function to call for the find | -| param | any | -> | Parameter(s) to pass to *methodName* | -| Résultat | any | <- | First value found, or Undefined if not found | +| Parameter | Type | | Description | +| ---------- | ------- |:--:| -------------------------------------------- | +| startFrom | Integer | -> | Index to start the search at | +| methodName | Text | -> | Name of the function to call for the find | +| param | any | -> | Parameter(s) to pass to *methodName* | +| Result | any | <- | First value found, or Undefined if not found | @@ -1142,7 +1143,7 @@ By default, `.find()` searches in the whole collection. Optionally, you can pass * If *startFrom* = 0, the whole collection is searched (default). -#### Exemple 1 +#### Example 1 You want to get the first element with a length smaller than 5: @@ -1162,7 +1163,7 @@ The code for ***LengthLessThan*** method is: End if ``` -#### Exemple 2 +#### Example 2 You want to find a city name within a collection: @@ -1194,10 +1195,10 @@ The code for ***FindCity*** is: ## .findIndex() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    @@ -1207,12 +1208,12 @@ The code for ***FindCity*** is: -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| ---------------------------------------------- | -| startFrom | Entier long | -> | Index to start the search at | -| methodName | Texte | -> | Name of the function to call for the find | -| param | any | -> | Parameter(s) to pass to *methodName* | -| Résultat | Entier long | <- | Index of first value found, or -1 if not found | +| Parameter | Type | | Description | +| ---------- | ------- |:--:| ---------------------------------------------- | +| startFrom | Integer | -> | Index to start the search at | +| methodName | Text | -> | Name of the function to call for the find | +| param | any | -> | Parameter(s) to pass to *methodName* | +| Result | Integer | <- | Index of first value found, or -1 if not found | @@ -1240,7 +1241,7 @@ By default, `.findIndex()` searches in the whole collection. Optionally, you can * If *startFrom* < 0, it is considered as the offset from the end of the collection (*startFrom:=startFrom+length*). **Note**: Even if *startFrom* is negative, the collection is still searched from left to right. * If *startFrom* = 0, the whole collection is searched (default). -#### Exemple +#### Example You want to find the position of the first city name within a collection: @@ -1275,21 +1276,21 @@ The code for ***FindCity*** method is: ## .indexOf() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    **.indexOf**( *toSearch* : expression { ; *startFrom* : Integer } ) : Integer -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| ---------------------------------------------------------------------------- | -| toSearch | expression | -> | Expression to search in the collection | -| startFrom | Entier long | -> | Index to start the search at | -| Résultat | Entier long | <- | Index of the first occurrence of toSearch in the collection, -1 if not found | +| Parameter | Type | | Description | +| --------- | ---------- |:--:| ---------------------------------------------------------------------------- | +| toSearch | expression | -> | Expression to search in the collection | +| startFrom | Integer | -> | Index to start the search at | +| Result | Integer | <- | Index of the first occurrence of toSearch in the collection, -1 if not found | @@ -1312,7 +1313,7 @@ Optionally, you can pass the index of collection from which to start the search * If *startFrom* < 0, it is considered as the offset from the end of the collection (*startFrom:=startFrom+length*). **Note**: Even if *startFrom* is negative, the collection is still searched from left to right. * If *startFrom* = 0, the whole collection is searched (default). -#### Exemple +#### Example ```4d @@ -1334,10 +1335,10 @@ Optionally, you can pass the index of collection from which to start the search ## .indices() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    @@ -1345,11 +1346,11 @@ Optionally, you can pass the index of collection from which to start the search -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ----------- | ---------- |:--:| -------------------------------------------------------- | -| queryString | Texte | -> | Search criteria | +| queryString | Text | -> | Search criteria | | value | any | -> | Value(s) to compare when using placeholder(s) | -| Résultat | Collection | <- | Element index(es) matching queryString in the collection | +| Result | Collection | <- | Element index(es) matching queryString in the collection | @@ -1366,7 +1367,7 @@ propertyPath comparator value {logicalOperator propertyPath comparator value} For a detailed description of the *queryString* and *value* parameters, please refer to the `dataClass.query()` function. -#### Exemple +#### Example ```4d @@ -1390,21 +1391,21 @@ For a detailed description of the *queryString* and *value* parameters, please r ## .insert() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    **.insert**( *index* : Integer ; *element* : any ) : Collection -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| ----------------------------------------------- | -| index | Entier long | -> | Where to insert the element | -| element | any | -> | Element to insert in the collection | -| Résultat | Collection | <- | Original collection containing inserted element | +| Parameter | Type | | Description | +| --------- | ---------- |:--:| ----------------------------------------------- | +| index | Integer | -> | Where to insert the element | +| element | any | -> | Element to insert in the collection | +| Result | Collection | <- | Original collection containing inserted element | @@ -1422,7 +1423,7 @@ In *index*, pass the position where you want the element to be inserted in the c Any type of element accepted by a collection can be inserted, even another collection. -#### Exemple +#### Example ```4d var $col : Collection @@ -1441,21 +1442,21 @@ Any type of element accepted by a collection can be inserted, even another colle ## .join() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    **.join**( *delimiter* : Text { ; *option* : Integer } ) : Text -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| ------------------------------------------------------------------------ | -| delimiter | Texte | -> | Separator to use between elements | -| option | Entier long | -> | `ck ignore null or empty`: ignore null and empty strings in the result | -| Résultat | Texte | <- | String containing all elements of the collection, separated by delimiter | +| Parameter | Type | | Description | +| --------- | ------- |:--:| ------------------------------------------------------------------------ | +| delimiter | Text | -> | Separator to use between elements | +| option | Integer | -> | `ck ignore null or empty`: ignore null and empty strings in the result | +| Result | Text | <- | String containing all elements of the collection, separated by delimiter | @@ -1466,7 +1467,7 @@ The `.join()` function converts all eleme By default, null or empty elements of the collection are returned in the resulting string. Pass the `ck ignore null or empty` constant in the *option* parameter if you want to remove them from the resulting string. -#### Exemple +#### Example ```4d @@ -1485,21 +1486,21 @@ By default, null or empty elements of the collection are returned in the resulti ## .lastIndexOf() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    **.lastIndexOf**( *toSearch* : expression { ; *startFrom* : Integer } ) : Integer -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| ----------------------------------------------------------------------- | -| toSearch | expression | -> | The element that is to be searched for within the collection | -| startFrom | Entier long | -> | Index to start the search at | -| Résultat | Entier long | <- | Index of last occurrence of toSearch in the collection, -1 if not found | +| Parameter | Type | | Description | +| --------- | ---------- |:--:| ----------------------------------------------------------------------- | +| toSearch | expression | -> | The element that is to be searched for within the collection | +| startFrom | Integer | -> | Index to start the search at | +| Result | Integer | <- | Index of last occurrence of toSearch in the collection, -1 if not found | @@ -1522,18 +1523,18 @@ Optionally, you can pass the index of collection from which to start a reverse s * If *startFrom* < 0, it is recalculated as *startFrom:=startFrom+length* (it is considered as the offset from the end of the collection). If the calculated value is negative, -1 is returned (the collection is not searched). **Note:** Even if *startFrom* is negative, the collection is still searched from right to left. * If *startFrom* = 0, -1 is returned, which means the collection is not searched. -#### Exemple +#### Example ```4d var $col : Collection var $pos1;$pos2;$pos3;$pos4;$pos5 : Integer $col:=Split string("a,b,c,d,e,f,g,h,i,j,e,k,e";",") //$col.length=13 - $pos1:=$col.lastIndexOf("e") //retourne 12 - $pos2:=$col.lastIndexOf("e";6) //retourne 4 - $pos3:=$col.lastIndexOf("e";15) //retourne 12 - $pos4:=$col.lastIndexOf("e";-2) //retourne 10 - $pos5:=$col.lastIndexOf("x") //retourne -1 + $pos1:=$col.lastIndexOf("e") //returns 12 + $pos2:=$col.lastIndexOf("e";6) //returns 4 + $pos3:=$col.lastIndexOf("e";15) //returns 12 + $pos4:=$col.lastIndexOf("e";-2) //returns 10 + $pos5:=$col.lastIndexOf("x") //returns -1 ``` @@ -1544,10 +1545,10 @@ Optionally, you can pass the index of collection from which to start a reverse s ## .length -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R5 | Added |
    @@ -1561,7 +1562,7 @@ The `.length` property returns the number The `.length` property is initialized when the collection is created. Adding or removing elements updates the length, if necessary. This property is **read-only** (you cannot use it to set the size of the collection). -#### Exemple +#### Example ```4d var $col : Collection //$col.length initialized to 0 @@ -1578,10 +1579,10 @@ The `.length` property is initialized when the collection is created. Adding or ## .map() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    @@ -1589,11 +1590,11 @@ The `.length` property is initialized when the collection is created. Adding or -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ---------- | ---------- |:--:| -------------------------------------------------------- | -| methodName | Texte | -> | Name of method used to transform the collection elements | +| methodName | Text | -> | Name of method used to transform the collection elements | | param | any | -> | Parameter(s) for the method | -| Résultat | Collection | <- | Collection of transformed values | +| Result | Collection | <- | Collection of transformed values | @@ -1616,7 +1617,7 @@ In *methodName*, pass the name of the method to use to evaluate collection eleme * *$1.result* (any type): new transformed value to add to the resulting collection * *$1.stop* (boolean): **true** to stop the method callback. The returned value is the last calculated. -#### Exemple +#### Example ```4d @@ -1644,20 +1645,20 @@ Here is the ***Percentage*** method: ## .max() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    **.max**( { *propertyPath* : Text } ) : any -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ------------ | ----------------------------------------------- |:--:| ---------------------------------------------- | -| propertyPath | Texte | -> | Object property path to be used for evaluation | -| Résultat | Boolean, Text, Number, Collection, Object, Date | <- | Maximum value in the collection | +| propertyPath | Text | -> | Object property path to be used for evaluation | +| Result | Boolean, Text, Number, Collection, Object, Date | <- | Maximum value in the collection | @@ -1672,7 +1673,7 @@ If the collection contains objects, pass the *propertyPath* parameter to indicat If the collection is empty, `.max()` returns *Undefined*. -#### Exemple +#### Example ```4d @@ -1694,20 +1695,20 @@ If the collection is empty, `.max()` returns *Undefined*. ## .min() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    **.min**( { *propertyPath* : Text } ) : any -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ------------ | ----------------------------------------------- |:--:| ---------------------------------------------- | -| propertyPath | Texte | -> | Object property path to be used for evaluation | -| Résultat | Boolean, Text, Number, Collection, Object, Date | <- | Minimum value in the collection | +| propertyPath | Text | -> | Object property path to be used for evaluation | +| Result | Boolean, Text, Number, Collection, Object, Date | <- | Minimum value in the collection | @@ -1722,7 +1723,7 @@ If the collection contains objects, pass the *propertyPath* parameter to indicat If the collection is empty, `.min()` returns *Undefined*. -#### Exemple +#### Example ```4d @@ -1744,10 +1745,10 @@ If the collection is empty, `.min()` returns *Undefined*. ## .orderBy() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    @@ -1755,12 +1756,12 @@ If the collection is empty, `.min()` returns *Undefined*. -| Paramètres | Type | | Description | -| ----------- | ----------- |:--:| ------------------------------------------------- | -| pathStrings | Texte | -> | Property path(s) on which to order the collection | -| pathObjects | Collection | -> | Collection of criteria objects | -| ascOrDesc | Entier long | -> | `ck ascending` or `ck descending` (scalar values) | -| Résultat | Collection | <- | Ordered copy of the collection (shallow copy) | +| Parameter | Type | | Description | +| ----------- | ---------- |:--:| ------------------------------------------------- | +| pathStrings | Text | -> | Property path(s) on which to order the collection | +| pathObjects | Collection | -> | Collection of criteria objects | +| ascOrDesc | Integer | -> | `ck ascending` or `ck descending` (scalar values) | +| Result | Collection | <- | Ordered copy of the collection (shallow copy) | @@ -1786,10 +1787,10 @@ You can also pass a criteria parameter to define how the collection elements mus * *ascOrDesc* : Integer. You pass one of the following constants from the **Objects and collections** theme: - | Constant | Type | Valeur | Commentaire | - | ------------- | ----------- | ------ | ------------------------------------------------- | - | ck ascending | Entier long | 0 | Elements are ordered in ascending order (default) | - | ck descending | Entier long | 1 | Elements are ordered in descending order | + | Constant | Type | Value | Comment | + | ------------- | ------- | ----- | ------------------------------------------------- | + | ck ascending | Longint | 0 | Elements are ordered in ascending order (default) | + | ck descending | Longint | 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). @@ -1803,7 +1804,7 @@ If the collection contains elements of different types, they are first grouped b 6. collections 7. dates -#### Exemple 1 +#### Example 1 Ordering a collection of numbers in ascending and descending order: @@ -1818,7 +1819,7 @@ Ordering a collection of numbers in ascending and descending order: ``` -#### Exemple 2 +#### Example 2 Ordering a collection of objects based on a text formula with property names: @@ -1882,10 +1883,10 @@ Ordering with a property path: ## .orderByMethod() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    @@ -1893,11 +1894,11 @@ Ordering with a property path: -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ---------- | ---------- |:--:| ------------------------------------------------ | -| methodName | Texte | -> | Name of method used to specify the sorting order | +| methodName | Text | -> | Name of method used to specify the sorting order | | extraParam | expression | -> | Parameter(s) for the method | -| Résultat | Collection | <- | Sorted copy of the collection (shallow copy) | +| Result | Collection | <- | Sorted copy of the collection (shallow copy) | @@ -1918,7 +1919,7 @@ In *methodName*, pass a comparison method that compares two values and returns * * *methodName* sets the following parameter: * *$1.result* (boolean): **true** if *$1.value < $1.value2*, **false** otherwise -#### Exemple 1 +#### Example 1 You want to sort a collection of strings in numerical order rather than alphabetical order: @@ -1939,7 +1940,7 @@ You want to sort a collection of strings in numerical order rather than alphabet -#### Exemple 2 +#### Example 2 You want to sort a collection of strings on their length: @@ -1966,10 +1967,10 @@ Here is the code for ***WordLength***: ## .pop() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    @@ -1977,9 +1978,9 @@ Here is the code for ***WordLength***: **.pop()** : any -| Paramètres | Type | | Description | -| ---------- | ---- |:--:| -------------------------- | -| Résultat | any | <- | Last element of collection | +| Parameter | Type | | Description | +| --------- | ---- |:--:| -------------------------- | +| Result | any | <- | Last element of collection | @@ -1990,7 +1991,7 @@ The `.pop()` function removes the last ele When applied to an empty collection, `.pop()` returns ***undefined***. -#### Exemple +#### Example `.pop()`, used in conjunction with [`.push()`](#push), can be used to implement a first-in, last-out stack feature: @@ -2014,20 +2015,20 @@ When applied to an empty collection, `.pop()` returns ***undefined***. ## .push() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    **.push**( *element* : any { ;...*elementN* } ) : Collection -| Paramètres | Type | | Description | -| ---------- | ---------- |:--:| --------------------------------------------- | -| element | Mixed | -> | Element(s) to add to the collection | -| Résultat | Collection | <- | Original collection containing added elements | +| Parameter | Type | | Description | +| --------- | ---------- |:--:| --------------------------------------------- | +| element | Mixed | -> | Element(s) to add to the collection | +| Result | Collection | <- | Original collection containing added elements | @@ -2037,7 +2038,7 @@ The `.push()` function appends one or mor > This function modifies the original collection. -#### Exemple 1 +#### Example 1 ```4d var $col : Collection @@ -2049,7 +2050,7 @@ The `.push()` function appends one or mor -#### Exemple 2 +#### Example 2 You want to sort the resutling collection: @@ -2072,11 +2073,11 @@ You want to sort the resutling collection: ## .query() -
    Historique -| Version | Modifications | +
    History +| Version | Changes | | ------- | ------------------------ | | v17 R5 | Support of querySettings | -| v16 R6 | Ajoutées | +| v16 R6 | Added |
    @@ -2084,12 +2085,12 @@ You want to sort the resutling collection: -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ------------- | ---------- |:--:| ------------------------------------------------- | -| queryString | Texte | -> | Search criteria | +| queryString | Text | -> | Search criteria | | value | Mixed | -> | Value(s) to compare when using placeholder(s) | | querySettings | Objet | -> | Query options: parameters, attributes | -| Résultat | Collection | <- | Element(s) matching queryString in the collection | +| Result | Collection | <- | Element(s) matching queryString in the collection | @@ -2108,7 +2109,7 @@ For detailed information on how to build a query using , value and *querySetting -#### Exemple 1 +#### Example 1 ```4d var $c; $c2; $c3 : Collection @@ -2123,7 +2124,7 @@ For detailed information on how to build a query using , value and *querySetting ``` -#### Exemple 2 +#### Example 2 ```4d @@ -2180,10 +2181,10 @@ More examples of queries can be found in the `dataClass.query()` page. ## .reduce() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    @@ -2191,12 +2192,12 @@ More examples of queries can be found in the `dataClass.query()` page. -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ---------- | ----------------------------------------------- |:--:| -------------------------------------------------------------------- | -| methodName | Texte | -> | Name of the function to call to process collection elements | +| methodName | Text | -> | Name of the function to call to process collection elements | | initValue | Text, Number, Object, Collection, Date, Boolean | -> | Value to use as the first argument to the first call of *methodName* | | param | expression | -> | Parameter(s) to pass to *methodName* | -| Résultat | Text, Number, Object, Collection, Date, Boolean | <- | Result of the accumulator value | +| Result | Text, Number, Object, Collection, Date, Boolean | <- | Result of the accumulator value | @@ -2222,7 +2223,7 @@ You can pass the value to initialize the accumulator in *initValue*. If omitted, * *$1.stop* (boolean, optional): **true** to stop the method callback. The returned value is the last calculated. -#### Exemple 1 +#### Example 1 ```4d @@ -2239,7 +2240,7 @@ With the following ***Multiply*** method: End if ``` -#### Exemple +#### Example This example allows reducing several collection elements to a single one: @@ -2270,10 +2271,10 @@ With the following ***Flatten*** method: ## .remove() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    @@ -2281,11 +2282,11 @@ With the following ***Flatten*** method: -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| ----------------------------------------------------- | -| index | Entier long | -> | Element at which to start removal | -| howMany | Entier long | -> | Number of elements to remove, or 1 element if omitted | -| Résultat | Collection | <- | Original collection without removed element(s) | +| Parameter | Type | | Description | +| --------- | ---------- |:--:| ----------------------------------------------------- | +| index | Integer | -> | Element at which to start removal | +| howMany | Integer | -> | Number of elements to remove, or 1 element if omitted | +| Result | Collection | <- | Original collection without removed element(s) | @@ -2307,7 +2308,7 @@ In *howMany*, pass the number of elements to remove from *index*. If *howMany* i If you try to remove an element from an empty collection, the method does nothing (no error is generated). -#### Exemple +#### Example ```4d @@ -2330,10 +2331,10 @@ If you try to remove an element from an empty collection, the method does nothin ## .resize() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    @@ -2342,11 +2343,11 @@ If you try to remove an element from an empty collection, the method does nothin **.resize**( *size* : Integer { ; *defaultValue* : any } ) : Collection -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ------------ | ----------------------------------------------- |:--:| ---------------------------------- | -| size | Entier long | -> | New size of the collection | +| size | Integer | -> | New size of the collection | | defaultValue | Number, Text, Object, Collection, Date, Boolean | -> | Default value to fill new elements | -| Résultat | Collection | <- | Resized original collection | +| Result | Collection | <- | Resized original collection | @@ -2360,7 +2361,7 @@ The `.resize()` function sets the colle By default, new elements are filled will **null** values. You can specify the value to fill in added elements using the *defaultValue* parameter. -#### Exemple +#### Example ```4d @@ -2388,19 +2389,19 @@ By default, new elements are filled will **null** values. You can specify the va ## .reverse() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    **.reverse( )** : Collection -| Paramètres | Type | | Description | -| ---------- | ---------- |:--:| ------------------------------- | -| Résultat | Collection | <- | Inverted copy of the collection | +| Parameter | Type | | Description | +| --------- | ---------- |:--:| ------------------------------- | +| Result | Collection | <- | Inverted copy of the collection | @@ -2409,7 +2410,7 @@ By default, new elements are filled will **null** values. You can specify the va The `.reverse()` function returns a deep copy of the collection with all its elements in reverse order. If the original collection is a shared collection, the returned collection is also a shared collection. > This function does not modify the original collection. -#### Exemple +#### Example ```4d @@ -2427,19 +2428,19 @@ The `.reverse()` function returns a de ## .shift() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    **.shift()** : any -| Paramètres | Type | | Description | -| ---------- | ---- |:--:| --------------------------- | -| Résultat | any | <- | First element of collection | +| Parameter | Type | | Description | +| --------- | ---- |:--:| --------------------------- | +| Result | any | <- | First element of collection | @@ -2450,7 +2451,7 @@ The `.shift()` function removes the firs If the collection is empty, this method does nothing. -#### Exemple +#### Example ```4d @@ -2471,21 +2472,21 @@ If the collection is empty, this method does nothing. ## .slice() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    **.slice**( *startFrom* : Integer { ; *end* : Integer } ) : Collection -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| -------------------------------------------------------- | -| startFrom | Entier long | -> | Index to start the search at (included) | -| end | Entier long | -> | End index (not included) | -| Résultat | Collection | <- | New collection containing sliced elements (shallow copy) | +| Parameter | Type | | Description | +| --------- | ---------- |:--:| -------------------------------------------------------- | +| startFrom | Integer | -> | Index to start the search at (included) | +| end | Integer | -> | End index (not included) | +| Result | Collection | <- | New collection containing sliced elements (shallow copy) | @@ -2501,7 +2502,7 @@ The returned collection contains the element specified by *startFrom* and all su * If *end* < 0 , it is recalculated as *end:=end+length*. * If *end < startFrom* (passed or calculated values), the method does nothing. -#### Exemple +#### Example ```4d @@ -2522,10 +2523,10 @@ The returned collection contains the element specified by *startFrom* and all su ## .some() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    @@ -2533,21 +2534,21 @@ The returned collection contains the element specified by *startFrom* and all su -| Paramètres | Type | | Description | -| ---------- | ----------- |:--:| --------------------------------------------------------- | -| startFrom | Entier long | -> | Index to start the test at | -| methodName | Texte | -> | Name of the method to call for the test | -| param | Mixed | -> | Parameter(s) to pass to *methodName* | -| Résultat | Booléen | <- | True if at least one element successfully passed the test | +| Parameter | Type | | Description | +| ---------- | ------- |:--:| --------------------------------------------------------- | +| startFrom | Integer | -> | Index to start the test at | +| methodName | Text | -> | Name of the method to call for the test | +| param | Mixed | -> | Parameter(s) to pass to *methodName* | +| Result | Booléen | <- | True if at least one element successfully passed the test | #### Description -La fonction `.some()` retourne true si au moins un élément de la collection a réussi un test implémenté dans la méthode *methodName* fournie. +The `.some()` function returns true if at least one element in the collection successfully passed a test implemented in the provided *methodName* method. -In *methodName*, pass the name of the method to use to evaluate collection elements, along with its parameter(s) in *param* (optional). *methodName* can perform any test, with or without the parameter(s). Cette méthode reçoit un `objet` comme premier paramètre ($1) et doit définir *$1.result* sur **True** pour chaque élément du test. +In *methodName*, pass the name of the method to use to evaluate collection elements, along with its parameter(s) in *param* (optional). *methodName* can perform any test, with or without the parameter(s). This method receives an `Object` as first parameter ($1) and must set *$1.result* to **True** for every element fulfilling the test. *methodName* receives the following parameters: @@ -2557,19 +2558,19 @@ In *methodName*, pass the name of the method to use to evaluate collection eleme *methodName* sets the following parameter(s): -* *$1.result* (booléen) : **true** si l'évaluation de la valeur de l'élément est réussie, sinon **false**. +* *$1.result* (boolean): **true** if the element value evaluation is successful, **false** otherwise. * *$1.stop* (boolean, optional): **true** to stop the method callback. The returned value is the last calculated. -Dans tous les cas, au moment où la fonction `.some()` rencontre le premier élément de collection retournant true dans *$1.result*, elle arrête d'appeler *methodName* et retourne **true**. +In any case, at the point where `.some()` function encounters the first collection element returning true in *$1.result*, it stops calling *methodName* and returns **true**. -Par défaut, `.some()` teste toute la collection. Vous pouvez éventuellement passer l'index d'un élément à partir duquel vous pouvez démarrer le test dans *startFrom*. +By default, `.some()` tests the whole collection. Optionally, you can pass the index of an element from which to start the test in *startFrom*. -* Si *startFrom* >= la longueur de la collection, **False** est retourné, ce qui signifie que la collection n'est pas testée. -* Si *startFrom* < 0, il est considéré comme le décalage depuis la fin de la collection. +* If *startFrom* >= the collection's length, **False** is returned, which means the collection is not tested. +* If *startFrom* < 0, it is considered as the offset from the end of the collection. * If *startFrom* = 0, the whole collection is searched (default). -#### Exemple +#### Example ```4d @@ -2603,10 +2604,10 @@ With the following *NumberGreaterThan0* method: ## .sort() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    @@ -2614,22 +2615,22 @@ With the following *NumberGreaterThan0* method: -| Paramètres | Type | | Description | +| Parameter | Type | | Description | | ---------- | ---------- |:--:| ------------------------------------------------ | -| methodName | Texte | -> | Name of method used to specify the sorting order | +| methodName | Text | -> | Name of method used to specify the sorting order | | extraParam | any | -> | Parameter(s) for the method | -| Résultat | Collection | <- | Collection d'origine triée | +| Result | Collection | <- | Original collection sorted | #### Description -La fonction `.sort()` trie les éléments de la collection d'origine et retourne également la collection triée. +The `.sort()` function sorts the elements of the original collection and also returns the sorted collection. > This function modifies the original collection. -Si `.sort()` est appelé sans paramètre, seules les valeurs scalaires (numérique, texte, date, booléens) sont triées. Les éléments sont triés par défaut par ordre croissant, en fonction de leur type. +If `.sort()` is called with no parameters, only scalar values (number, text, date, booleans) are sorted. Elements are sorted by default in ascending order, according to their type. -Si vous souhaitez trier les éléments de la collection dans un autre ordre ou trier n'importe quel type d'élément, vous devez fournir, dans *methodName*, une méthode de comparaison qui compare deux valeurs et retourne **true** dans *$1.result* si la première valeur est inférieure à la deuxième valeur. You can provide additional parameters to *methodName* if necessary. +If you want to sort the collection elements in some other order or sort any type of element, you must supply in *methodName* a comparison method that compares two values and returns **true** in *$1.result* if the first value is lower than the second value. You can provide additional parameters to *methodName* if necessary. * *methodName* will receive the following parameters: * $1 (object), where: @@ -2650,7 +2651,7 @@ If the collection contains elements of different types, they are first grouped b 6. collections 7. dates -#### Exemple 1 +#### Example 1 ```4d @@ -2660,7 +2661,7 @@ If the collection contains elements of different types, they are first grouped b // $col=["Artie","Chip","Henry","Jane","Mary","Tom",1,2,3,4,5,6] ``` -#### Exemple 2 +#### Example 2 ```4d var $col; $col2 : Collection @@ -2691,38 +2692,38 @@ If the collection contains elements of different types, they are first grouped b ## .sum() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    **.sum**( { *propertyPath* : Text } ) : Real -| Paramètres | Type | | Description | -| ------------ | ----- |:--:| ----------------------------------------------- | -| propertyPath | Texte | -> | Object property path to be used for calculation | -| Résultat | Réel | <- | Somme des valeurs de collection | +| Parameter | Type | | Description | +| ------------ | ---- |:--:| ----------------------------------------------- | +| propertyPath | Text | -> | Object property path to be used for calculation | +| Result | Real | <- | Sum of collection values | #### Description -La fonction `.sum()` retourne la somme de toutes les valeurs de l'instance de collection. +The `.sum()` function returns the sum for all values in the collection instance. Only numerical elements are taken into account for the calculation (other element types are ignored). If the collection contains objects, pass the *propertyPath* parameter to indicate the object property to take into account. -`.sum()` retourne 0 si : +`.sum()` returns 0 if: * the collection is empty, * the collection does not contain numerical elements, * *propertyPath* is not found in the collection. -#### Exemple 1 +#### Example 1 ```4d @@ -2732,7 +2733,7 @@ If the collection contains objects, pass the *propertyPath* parameter to indicat $vSum:=$col.sum() //32 ``` -#### Exemple 2 +#### Example 2 ```4d var $col : Collection @@ -2753,32 +2754,32 @@ If the collection contains objects, pass the *propertyPath* parameter to indicat ## .unshift() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v16 R6 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v16 R6 | Added |
    **.unshift**( *value* : any { ;...*valueN* : any } ) : Collection -| Paramètres | Type | | Description | -| ---------- | ----------------------------------------- |:--:| --------------------------------------------- | -| value | Texte, Numérique, Objet, Collection, Date | -> | Valeur(s) à insérer au début de la collection | -| Résultat | Réel | <- | Collection contenant des éléments ajoutés | +| Parameter | Type | | Description | +| --------- | -------------------------------------- |:--:| ----------------------------------------------------- | +| value | Text, Number, Object, Collection, Date | -> | Value(s) to insert at the beginning of the collection | +| Result | Real | <- | Collection containing added element(s) | #### Description -La fonction `.unshift()` insère la ou les *valeur(s)* données au début de la collection et retourne la collection modifiée. +The `.unshift()` function inserts the given *value*(s) at the beginning of the collection and returns the modified collection. > This function modifies the original collection. -Si plusieurs valeurs sont passées, elles sont insérées toutes en même temps, ce qui signifie qu'elles apparaissent dans la collection résultante dans le même ordre que dans la liste d'arguments. +If several values are passed, they are inserted all at once, which means that they appear in the resulting collection in the same order as in the argument list. -#### Exemple +#### Example ```4d From 7b013529e70eedfe2f342eba07ba770503421994 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:37:19 +0100 Subject: [PATCH 124/311] New translations cryptoKeyClass.md (French) --- .../translated_docs/fr/API/cryptoKeyClass.md | 312 +++++++++--------- 1 file changed, 157 insertions(+), 155 deletions(-) diff --git a/website/translated_docs/fr/API/cryptoKeyClass.md b/website/translated_docs/fr/API/cryptoKeyClass.md index 4264febc985567..32816fcbe89417 100644 --- a/website/translated_docs/fr/API/cryptoKeyClass.md +++ b/website/translated_docs/fr/API/cryptoKeyClass.md @@ -4,32 +4,32 @@ title: CryptoKey --- -La classe `CryptoKey` du langage 4D contient une paire de clés de chiffrement asymétrique. +The `CryptoKey` class in the 4D language encapsulates an asymetric encryption key pair. -Cette classe est disponible depuis le "class store" de `4D`. +This class is available from the `4D` class store. -### Exemple +### Example -L'extrait de code suivant illustre la signature et la vérification d'un message à l'aide d'une nouvelle paire de clés ECDSA, afin de créer, par exemple, un token Web JSON ES256. +The following sample code signs and verifies a message using a new ECDSA key pair, for example in order to make a ES256 JSON Web token. ```4d - // Générer une nouvelle paire de clés ECDSA + // Generate a new ECDSA key pair $key:=4D.CryptoKey.new(New object("type";"ECDSA";"curve";"prime256v1")) - // Obtenir une signature en base64 -$message:="hello world" + // Get signature as base64 +$message:="hello world" $signature:=$key.sign($message;New object("hash";"SHA256")) - // Vérifier la signature + // Verify signature $status:=$key.verify($message;$signature;New object("hash";"SHA256")) ASSERT($status.success) ``` -### Sommaire +### Summary | | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [](#4dcryptokeynew)

        | +| [](#4dcryptokeynew)

        | | [](#curve)

         | | [](#decrypt)

        | | [](#encrypt)

        | @@ -46,60 +46,62 @@ ASSERT($status.success) + + ## 4D.CryptoKey.new() -

    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
    **4D.CryptoKey.new**( *settings* : Object ) : 4D.CryptoKey - -| Paramètres | Type | | Description | -| ---------- | ------------ | -- | --------------------------------------------------------------------------- | -| settings | Objet | -> | Paramètres pour générer ou charger une paire de clés | -| result | 4D.CryptoKey | <- | Objet contenant une paire de clés de chiffrement| + +| Parameter | Type | | Description | +| --------- | ------------ | -- | ---------------------------------------------------------------------- | +| settings | Objet | -> | Settings to generate or load a key pair | +| result | 4D.CryptoKey | <- | Object encapsulating an encryption key pair| | -The `4D.CryptoKey.new()` function creates a new `4D.CryptoKey` object encapsulating an encryption key pair, based upon the *settings* object parameter. Elle permet de générer une nouvelle clé RSA ou ECDSA, ou de charger une paire de clés existante à partir de la définition PEM. +The `4D.CryptoKey.new()` function creates a new `4D.CryptoKey` object encapsulating an encryption key pair, based upon the *settings* object parameter. It allows to generate a new RSA or ECDSA key, or to load an existing key pair from a PEM definition. #### *settings* -| Propriété | Type | Description | -| --------------- | ------- | ------------------------------------------------- | -| [curve](#curve) | Texte | Name of ECDSA curve | -| [pem](#pem) | Texte | Définition PEM d'une clé de chiffrement à charger | -| [size](#size) | integer | Size of RSA key in bits | -| [type](#type) | Texte | Type of the key: "RSA", "ECDSA", or "PEM"
  • | +| Property | Type | Description | +| --------------- | ------- | ---------------------------------------------- | +| [curve](#curve) | text | Name of ECDSA curve | +| [pem](#pem) | text | PEM definition of an encryption key to load | +| [size](#size) | integer | Size of RSA key in bits | +| [type](#type) | text | Type of the key: "RSA", "ECDSA", or "PEM" | #### *cryptoKey* -L'objet `cryptoKey` retourné encapsule une paire de clés de chiffrement. C'est un objet partagé et peut être alors utilisé par de multiples traitements 4D simultanés. - +The returned `cryptoKey` object encapsulates an encryption key pair. It is a shared object and can therefore be used by multiple 4D processes simultaneously. + ## .curve -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
    -**.curve** : Texte +**.curve** : Text -Défini uniquement pour les clés ECDSA : le nom de la courbe normalisée de la clé. +Defined only for ECDSA keys: the normalised curve name of the key. Usually "prime256v1" for ES256 (default), "secp384r1" for ES384, "secp521r1" for ES512. @@ -107,87 +109,87 @@ Usually "prime256v1" for ES256 (default), "secp384r1" for ES384, "secp521r1" for ## .decrypt() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
    **.decrypt**( *message* : Text ; *options* : Object ) : Object -| Paramètres | Type | | Description | -| ---------- | ----- | -- | --------------------------------------------------------------------------------- | -| message | Texte | -> | Chaine message à déchiffrer à l'aide de `options.encodingEncrypted` et decrypted. | -| options | Objet | -> | Options de décodage | -| Résultat | Objet | <- | Statut | +| Parameter | Type | | Description | +| --------- | ----- | -- | ----------------------------------------------------------------------------- | +| message | Text | -> | Message string to be decoded using `options.encodingEncrypted` and decrypted. | +| options | Objet | -> | Decoding options | +| Result | Objet | <- | Status | -La fonction `.encrypt()` déchiffre le paramètre *message* à l'aide de la clé **private** key. L'algorithme utilisé dépend du type de clé. +The `.decrypt()` function decrypts the *message* parameter using the **private** key. The algorithm used depends on the type of the key. -La clé doit être une clé RSA, l'algorithme est RSA-OAEP (voir [RFC 3447](https://tools.ietf.org/html/rfc3447)). +The key must be a RSA key, the algorithm is RSA-OAEP (see [RFC 3447](https://tools.ietf.org/html/rfc3447)). #### *options* -| Propriété | Type | Description | -| ----------------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| hash | Texte | Algorithme de hachage à utiliser. For example: "SHA256", "SHA384", or "SHA512". | -| encodingEncrypted | Texte | Chiffrement utilisé pour convertir le paramètre `message` en représentation binaire à déchiffrer. Peut être "Base64" ou "Base64URL". La valeur par défaut est "Base64". | -| encodingDecrypted | Texte | Encodage utilisé pour convertir le message binaire déchiffré en chaîne de résultat. Peut être "UTF-8", "Base64" ou "Base64URL". La valeur par défaut est "UTF-8". | +| Property | Type | Description | +| ----------------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| hash | text | Digest algorithm to use. For example: "SHA256", "SHA384", or "SHA512". | +| encodingEncrypted | text | Encoding used to convert the `message` parameter into the binary representation to decrypt. Can be "Base64" or "Base64URL". Default is "Base64". | +| encodingDecrypted | text | Encoding used to convert the binary decrypted message into the result string. Can be "UTF-8", "Base64", or "Base64URL". Default is "UTF-8". | -#### *Résultat* +#### *Result* -La fonction renvoie un objet "status" avec la propriété `success` définie sur `true` si le *message* a pu être déchiffré avec succès. +The function returns a status object with `success` property set to `true` if the *message* could be successfully decrypted. -| Propriété | Type | Description | -| --------- | ---------- | --------------------------------------------------------------------------- | -| success | boolean | True si le message a été déchiffré avec succès | -| result | Texte | Message déchiffré et décodé à l'aide de `options.encodingDecrypted` | -| errors | collection | Si `success` est mis sur `false`, il peut contenir une collection d'erreurs | +| Property | Type | Description | +| -------- | ---------- | ------------------------------------------------------------------- | +| success | boolean | True if the message has been successfully decrypted | +| result | text | Message decrypted and decoded using the `options.encodingDecrypted` | +| errors | collection | If `success` is `false`, may contain a collection of errors | -Si le *message* n'a pas pu être déchiffré car il n'a pas été chiffré avec la même clé ou le même algorithme, l'objet `status` retourné contient une collection d'erreurs dans `status.errors`. +In case the *message* couldn't be decrypted because it was not encrypted with the same key or algorithm, the `status` object being returned contains an error collection in `status.errors`. ## .encrypt() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
    **.encrypt**( *message* : Text ; *options* : Object ) : Text -| Paramètres | Type | | Description | -| ---------- | ----- | -- | ------------------------------------------------------------------------------- | -| message | Texte | -> | Chaine message à chiffrer à l'aide de `options.encodingDecrypted` et encrypted. | -| options | Objet | -> | Options de chiffrement | -| Résultat | Texte | <- | Message chiffré et encodé à l'aide de `options.encodingEncrypted` | +| Parameter | Type | | Description | +| --------- | ----- | -- | ----------------------------------------------------------------------------- | +| message | Text | -> | Message string to be encoded using `options.encodingDecrypted` and encrypted. | +| options | Objet | -> | Encoding options | +| Result | Text | <- | Message encrypted and encoded using the `options.encodingEncrypted` | -La fonction `.encrypt()` crypte le paramètre *message* à l'aide de la clé **publique**. L'algorithme utilisé dépend du type de clé. +The `.encrypt()` function encrypts the *message* parameter using the **public** key. The algorithm used depends on the type of the key. -La clé doit être une clé RSA, l'algorithme est RSA-OAEP (voir [RFC 3447](https://tools.ietf.org/html/rfc3447)). +The key must be a RSA key, the algorithm is RSA-OAEP (see [RFC 3447](https://tools.ietf.org/html/rfc3447)). ##### *options* -| Propriété | Type | Description | -| ----------------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| hash | Texte | Algorithme de hachage à utiliser. For example: "SHA256", "SHA384", or "SHA512". | -| encodingEncrypted | Texte | Chiffrement utilisé pour convertir le message chiffré binaire en chaîne de résultat. Peut être "Base64" ou "Base64URL". La valeur par défaut est "Base64". | -| encodingDecrypted | Texte | Chiffrement utilisé pour convertir le paramètre `message` en représentation binaire à chiffrer. Peut être "UTF-8", "Base64" ou "Base64URL". La valeur par défaut est "UTF-8". | +| Property | Type | Description | +| ----------------- | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | +| hash | text | Digest algorithm to use. For example: "SHA256", "SHA384", or "SHA512". | +| encodingEncrypted | text | Encoding used to convert the binary encrypted message into the result string. Can be "Base64", or "Base64URL". Default is "Base64". | +| encodingDecrypted | text | Encoding used to convert the `message` parameter into the binary representation to encrypt. Can be "UTF-8", "Base64", or "Base64URL". Default is "UTF-8". | -#### *Résultat* +#### *Result* -La valeur retournée est un message chiffré. +The returned value is an encrypted message. @@ -196,10 +198,10 @@ La valeur retournée est un message chiffré. ## .getPrivateKey() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
    @@ -207,16 +209,16 @@ La valeur retournée est un message chiffré. -| Paramètres | Type | | Description | -| ---------- | ----- | -- | -------------------------- | -| Résultat | Texte | <- | Clé primaire au format PEM | +| Parameter | Type | | Description | +| --------- | ---- | -- | ------------------------- | +| Result | Text | <- | Private key in PEM format | -La fonction `.getPrivateKey()` retourne la clé privée de l'objet `cryptoKey` au format PEM, ou une chaîne vide si aucune n'est disponible. +The `.getPrivateKey()` function returns the private key of the `cryptoKey` object in PEM format, or an empty string if none is available. -#### *Résultat* +#### *Result* -La valeur retournée est la clé privée. +The returned value is the private key. @@ -224,44 +226,44 @@ La valeur retournée est la clé privée. ## .getPublicKey() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
    **.getPublicKey( )** : Text -| Paramètres | Type | | Description | -| ---------- | ----- | -- | -------------------------- | -| Résultat | Texte | <- | Clé publique au format PEM | +| Parameter | Type | | Description | +| --------- | ---- | -- | ------------------------ | +| Result | Text | <- | Public key in PEM format | -La fonction `.getPublicKey()` retourne la clé publique de l'objet `cryptoKey` au format PEM, ou une chaîne vide si aucune n'est disponible. +The `.getPublicKey()` function returns the public key of the `cryptoKey` object in PEM format, or an empty string if none is available. -#### *Résultat* +#### *Result* -La valeur retournée est la clé publique. +The returned value is the public key. --- ## .pem -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
    **.pem** : Text -PEM definition of an encryption key to load. Si la clé est une clé privée, la clé publique RSA ou ECDSA en sera déduite. +PEM definition of an encryption key to load. If the key is a private key, the RSA or ECDSA public key will be deduced from it. @@ -269,39 +271,39 @@ La valeur retournée est la clé publique. ## .sign() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
    .**sign** (*message* : Text ; *options* : Text) : Text -| Paramètres | Type | | Description | -| ---------- | ----- | -- | -------------------------------------------------------------------------- | -| message | Texte | -> | Chaîne message à signer | -| options | Objet | -> | Options de signature | -| Résultat | Texte | <- | Signature en représentation Base64 ou Base64URL, selon l'option "encoding" | +| Parameter | Type | | Description | +| --------- | ----- | -- | ------------------------------------------------------------------------------- | +| message | Text | -> | Message string to sign | +| options | Objet | -> | Signing options | +| Result | Text | <- | Signature in Base64 or Base64URL representation, depending on "encoding" option | -La fonction `.sign()` signe la représentation utf8 de la chaîne *message* à l'aide des clés d'objet `cryptoKey` et des *options* fournies. Elle retourne sa signature au format base64 ou base64URL, selon la valeur de l'attribut `options.encoding` que vous avez passé. +The `.sign()` function signs the utf8 representation of a *message* string using the `cryptoKey` object keys and provided *options*. It returns its signature in base64 or base64URL format, depending on the value of the `options.encoding` attribute you passed. -La `cryptoKey` doit contenir une clé **privée** valide. +The `cryptoKey` must contain a valid **private** key. #### *options* -| Propriété | Type | Description | -| ----------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| hash | Texte | Algorithme de hachage à utiliser. For example: "SHA256", "SHA384", or "SHA512". Lorsqu'elle est utilisée pour produire un JWT, la taille du hachage doit correspondre à la taille de l'algorithme PS@, ES@, RS@ ou PS@ | -| encodingEncrypted | Texte | Chiffrement utilisé pour convertir le message chiffré binaire en chaîne de résultat. Peut être "Base64" ou "Base64URL". La valeur par défaut est "Base64". | -| pss | boolean | Utilise le Probabilistic Signature Scheme (PSS). Ignoré si la clé n'est pas une clé RSA. Passez `true` lors de la production d'un JWT pour l'algorithme PS@ | -| encoding | Texte | ERepresentation to be used for result signature. Valeurs possibles : "Base64" ou "Base64URL". La valeur par défaut est "Base64". | +| Property | Type | Description | +| ----------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| hash | text | Digest algorithm to use. For example: "SHA256", "SHA384", or "SHA512". When used to produce a JWT, the hash size must match the PS@, ES@, RS@, or PS@ algorithm size | +| encodingEncrypted | text | Encoding used to convert the binary encrypted message into the result string. Can be "Base64", or "Base64URL". Default is "Base64". | +| pss | boolean | Use Probabilistic Signature Scheme (PSS). Ignored if the key is not an RSA key. Pass `true` when producing a JWT for PS@ algorithm | +| encoding | text | ERepresentation to be used for result signature. Possible values: "Base64" or "Base64URL". Default is "Base64". | -#### *Résultat* +#### *Result* -Représentation utf8 de la chaîne *message*. +The utf8 representation of the *message* string. @@ -309,79 +311,79 @@ Représentation utf8 de la chaîne *message*. ## .size -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
    **.size** : Integer -Défini uniquement pour les clés RSA : la taille de la clé en bits. Habituellement 2048 (par défaut). +Defined only for RSA keys: the size of the key in bits. Typically 2048 (default). ## .type -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
    -**.type** : Texte +**.type** : Text -Name of the key type - "RSA", "ECDSA", "PEM"
  • "RSA": an RSA key pair, using `settings.size` as [.size](#size).
  • "ECDSA": an Elliptic Curve Digital Signature Algorithm key pair, using `settings.curve` as [.curve](#curve). A noter que les clés ECDSA ne peuvent pas être utilisées pour le chiffrement, mais uniquement pour la signature.
  • "PEM": a key pair definition in PEM format, using `settings.pem` as [.pem](#pem). +Name of the key type - "RSA", "ECDSA", "PEM"
  • "RSA": an RSA key pair, using `settings.size` as [.size](#size).
  • "ECDSA": an Elliptic Curve Digital Signature Algorithm key pair, using `settings.curve` as [.curve](#curve). Note that ECDSA keys cannot be used for encryption but only for signature.
  • "PEM": a key pair definition in PEM format, using `settings.pem` as [.pem](#pem). ## .verify() -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
    **.verify**( *message* : Text ; *signature* : Text ; *options* : Object) : object -| Paramètres | Type | | Description | -| ---------- | ----- | -- | ----------------------------------------------------------------------------------------------- | -| message | Texte | -> | Chaîne message utilisée pour générer la signature | -| signature | Texte | -> | Signature à vérifier, en représentation Base64 ou Base64URL, selon la valeur `options.encoding` | -| options | Objet | -> | Options de signature | -| Résultat | Objet | <- | Statut de la vérification | +| Parameter | Type | | Description | +| --------- | ----- | -- | ------------------------------------------------------------------------------------------------- | +| message | Text | -> | Message string that was used to produce the signature | +| signature | Text | -> | Signature to verify, in Base64 or Base64URL representation, depending on `options.encoding` value | +| options | Objet | -> | Signing options | +| Result | Objet | <- | Status of the verification | -La fonction `.verify()` vérifie la signature base64 par rapport à la représentation utf8 du *message* à l'aide des clés d'objet `cryptoKey` et des *options* fournies. +The `.verify()` function verifies the base64 signature against the utf8 representation of *message* using the `cryptoKey` object keys and provided *options*. -La `cryptoKey` doit contenir une clé **publique** valide. +The `cryptoKey` must contain a valid **public** key. #### *options* -| Propriété | Type | Description | -| --------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| hash | Texte | Algorithme de hachage à utiliser. For example: "SHA256", "SHA384", or "SHA512". Lorsqu'elle est utilisée pour produire un JWT, la taille du hachage doit correspondre à la taille de l'algorithme PS@, ES@, RS@ ou PS@ | -| pss | boolean | Utilise le Probabilistic Signature Scheme (PSS). Ignoré si la clé n'est pas une clé RSA. Passez `true` lors de la vérification d'un JWT pour l'algorithme PS@ | -| encoding | Texte | Représentation de la signature fournie. Valeurs possibles : "Base64" ou "Base64URL". La valeur par défaut est "Base64". | +| Property | Type | Description | +| -------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| hash | text | Digest algorithm to use. For example: "SHA256", "SHA384", or "SHA512". When used to produce a JWT, the hash size must match the PS@, ES@, RS@, or PS@ algorithm size | +| pss | boolean | Use Probabilistic Signature Scheme (PSS). Ignored if the key is not an RSA key. Pass `true` when verifying a JWT for PS@ algorithm | +| encoding | text | Representation of provided signature. Possible values are "Base64" or "Base64URL". Default is "Base64". | -#### *Résultat* +#### *Result* -La fonction retourne un objet status avec la propriété `success` définie sur `true` si le `message` a pu être déchiffré avec succès (c'est-à-dire si la signature est correspondante). +The function returns a status object with `success` property set to `true` if `message` could be successfully verified (i.e. the signature matches). -Si la signature n'a pas pu être vérifiée car elle n'a pas été signée avec le même *message*, la clé ou l'algorithme, l'objet `status` retourné contient une collection d'erreurs dans `status.errors`. +In case the signature couldn't be verified because it was not signed with the same *message*, key or algorithm, the `status` object being returned contains an error collection in `status.errors`. -| Propriété | Type | Description | -| --------- | ---------- | --------------------------------------------------------------------------- | -| success | boolean | True si la signature correspond au message | -| errors | collection | Si `success` est mis sur `false`, il peut contenir une collection d'erreurs | +| Property | Type | Description | +| -------- | ---------- | ----------------------------------------------------------- | +| success | boolean | True if the signature matches the message | +| errors | collection | If `success` is `false`, may contain a collection of errors | From b400bb616034d4af64e437fc194e4a1fc32b8348 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:37:21 +0100 Subject: [PATCH 125/311] New translations dataclassAttributeClass.md (French) --- .../fr/API/dataclassAttributeClass.md | 160 +++++++++--------- 1 file changed, 80 insertions(+), 80 deletions(-) diff --git a/website/translated_docs/fr/API/dataclassAttributeClass.md b/website/translated_docs/fr/API/dataclassAttributeClass.md index bc1601762a9a4e..6c982321a293e8 100644 --- a/website/translated_docs/fr/API/dataclassAttributeClass.md +++ b/website/translated_docs/fr/API/dataclassAttributeClass.md @@ -3,11 +3,11 @@ id: dataclassAttributeClass title: DataClassAttribute --- -Dataclass attributes are available as properties of their respective classes. Par exemple: +Dataclass attributes are available as properties of their respective classes. For example: ```4d - nameAttribute:=ds.Company.name //référence à un attribut de classe - revenuesAttribute:=ds.Company["revenues"] //méthode alternative + nameAttribute:=ds.Company.name //reference to class attribute + revenuesAttribute:=ds.Company["revenues"] //alternate way ``` This code assigns to *nameAttribute* and *revenuesAttribute* references to the name and revenues attributes of the Company class. This syntax does NOT return values held inside of the attribute, but instead returns references to the attributes themselves. To handle values, you need to go through [**Entities**](entityClass.md). @@ -16,7 +16,7 @@ This code assigns to *nameAttribute* and *revenuesAttribute* references to the n > Dataclass attribute objects can be modified, but the underlying database structure will not be altered. -### Sommaire +### Summary | | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -38,15 +38,15 @@ This code assigns to *nameAttribute* and *revenuesAttribute* references to the n ## .autoFilled -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    -**.autoFilled** : Booléen +**.autoFilled** : Boolean #### Description @@ -68,15 +68,15 @@ This property is not returned if `.kind` = "relatedEntity" or "relatedEntities". ## .fieldNumber -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    -**.fieldNumber** : Entier +**.fieldNumber** : Integer #### Description @@ -95,10 +95,10 @@ This property is not returned if `.kind` = "relatedEntity" or "relatedEntities". ## .fieldType -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -110,13 +110,13 @@ This property is not returned if `.kind` = "relatedEntity" or "relatedEntities". The `.fieldType` property contains the 4D database type of the attribute. It depends on the attribute kind (see [`.kind`](#kind)). -**Valeurs possibles :** +**Possible values:** -| dataClassAttribute.kind | fieldType | Commentaire | -| ----------------------- | --------------------------- | ----------------------- | -| storage | Corresponding 4D field type | Voir la commande `Type` | -| relatedEntity | 38 (Is object) | | -| relatedEntities | 42 (Is collection) | | +| dataClassAttribute.kind | fieldType | Comment | +| ----------------------- | --------------------------- | ------------------ | +| storage | Corresponding 4D field type | See `Type` command | +| relatedEntity | 38 (Is object) | | +| relatedEntities | 42 (Is collection) | | @@ -125,15 +125,15 @@ The `.fieldType` property ## .indexed -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    -**.indexed** : Booléen +**.indexed** : Boolean #### Description @@ -151,10 +151,10 @@ This property is not returned if `.kind` = "relatedEntity" or "relatedEntities". ## .inverseName -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -177,10 +177,10 @@ This property is not returned if `.kind` = "storage". It must be of the "related ## .keyWordIndexed -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -202,10 +202,10 @@ This property is not returned if [`.kind`](#kind) = "relatedEntity" or "relatedE ## .kind -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -222,7 +222,7 @@ The `.kind` property returns th * "relatedEntities": 1 -> N relation attribute (reference to an entity selection) -#### Exemple +#### Example Given the following table and relation: @@ -244,10 +244,10 @@ Given the following table and relation: ## .mandatory -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -271,10 +271,10 @@ This property is not returned if [`.kind`](#kind) = "relatedEntity" or "relatedE ## .name -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -284,9 +284,9 @@ This property is not returned if [`.kind`](#kind) = "relatedEntity" or "relatedE #### Description -La propriété `.name` retourne le nom de l'objet `dataClassAttribute` en chaîne. +The `.name` property returns the name of the `dataClassAttribute` object as string. -#### Exemple +#### Example ```4d var $attName : Text @@ -300,10 +300,10 @@ La propriété `.name` retourne ## .relatedDataClass -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    @@ -313,13 +313,13 @@ La propriété `.name` retourne #### Description -> Cette propriété n'est disponible qu'avec les attributs de la propriété "relatedEntity" ou "relatedEntities" [`.kind`](#kind). +> This property is only available with attributes of the "relatedEntity" or "relatedEntities" [`.kind`](#kind) property. -La propriété `.relatedDataClass` retourne le nom de la dataclass associée à l'attribut. +The `.relatedDataClass` property returns the name of the dataclass related to the attribute. -#### Exemple +#### Example -Considérons les tableaux et relations suivants : +Given the following tables and relations: ![](assets/en/API/dataclassAttribute4.png) @@ -337,30 +337,30 @@ Considérons les tableaux et relations suivants : ## .type -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    -**.type** : Texte +**.type** : Text #### Description -La propriété `.type` contient le type de valeur conceptuelle de l'attribut, utile pour la programmation générique. +The `.type` property contains the conceptual value type of the attribute, useful for generic programming. -Le type de valeur conceptuelle dépend de l'attribut [`.kind`](#kind). +The conceptual value type depends on the attribute [`.kind`](#kind). -**Valeurs possibles :** +**Possible values:** -| dataClassAttribute.kind | type | Commentaire | -| ----------------------- | -------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | -| storage | "number", "date", "object", "bool", "image", ou "string" | "nombre" est rertourné pour tous les types numériques, y compris la durée. "string" est retourné pour les types de champs uuid, alpha et text | -| relatedEntity | nom de dataClass associé | Ex : "Companies" | -| relatedEntities | nom de dataClass associé + suffixe "Selection" | Ex : "EmployeeSelection" | +| dataClassAttribute.kind | type | Comment | +| ----------------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | +| storage | "number", "date", "object", "bool", "image", or "string" | "number" is returned for any numeric types including duration. "string" is returned for uuid, alpha and text field types | +| relatedEntity | related dataClass name | Ex: "Companies" | +| relatedEntities | related dataClass name + "Selection" suffix | Ex: "EmployeeSelection" | @@ -370,23 +370,23 @@ Le type de valeur conceptuelle dépend de l'attribut [`.kind`](#kind). ## .unique -
    Historique -| Version | Modifications | -| ------- | ------------- | -| v17 R5 | Ajoutées | +
    History +| Version | Changes | +| ------- | ------- | +| v17 R5 | Added |
    -**.unique** : Booléen +**.unique** : Boolean #### Description -La propriété `.unique` contient True si la valeur d'attribut doit être unique. Cette propriété correspond à la propriété de champ 4D "Unique". +The `.unique` property contains True if the attribute value must be unique. This property corresponds to the "Unique" 4D field property. This property is not returned if [`.kind`](#kind) = "relatedEntity" or "relatedEntities". -> Pour la programmation générique, vous pouvez utiliser **Bool** (dataClassAttribute.unique) pour obtenir une valeur valide (false) même si `.unique` n'est pas retourné. +> For generic programming, you can use **Bool**(dataClassAttribute.unique) to get a valid value (false) even if `.unique` is not returned. From 292f7110c16b4e09a6328426cd9a4ec95ffa8fc9 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:38:13 +0100 Subject: [PATCH 126/311] New translations hierarch1.png (French) --- docs/assets/fr/FormObjects/hierarch1.png | Bin 7797 -> 4423 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch1.png b/docs/assets/fr/FormObjects/hierarch1.png index 5ac2887997d817102619fa57f902f7764179b5e9..d6152bc100580d48569ffb83bbc13cc18a5598a7 100644 GIT binary patch literal 4423 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 V<8IQjzz-yVo{o`r`8C^!{{kFKrwaf8 literal 7797 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

    Date: Wed, 16 Dec 2020 16:38:15 +0100 Subject: [PATCH 127/311] New translations hierarch11.png (French) --- docs/assets/fr/FormObjects/hierarch11.png | Bin 3479 -> 3974 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch11.png b/docs/assets/fr/FormObjects/hierarch11.png index 37fa77455ed6e9044e9cf2a601eeb02c53af93c4..142b5083f9dd84f4ebe9dd5071429e961ddad7dd 100644 GIT binary patch literal 3974 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 SkevT82y?;OwA$Ds_WuCXnd#I3 literal 3479 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 Date: Wed, 16 Dec 2020 16:38:18 +0100 Subject: [PATCH 128/311] New translations hierarch12.png (French) --- docs/assets/fr/FormObjects/hierarch12.png | Bin 9713 -> 10923 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch12.png b/docs/assets/fr/FormObjects/hierarch12.png index 6a1a95bbba71f8a448319b24527ab7957a2b9de5..6b2d48d92cebf8d3469d85d40e1a363cf2797cdd 100644 GIT binary patch literal 10923 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 LHQ738i;w>Yl>Op? literal 9713 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 QU%B9<#N Date: Wed, 16 Dec 2020 16:38:19 +0100 Subject: [PATCH 129/311] New translations hierarch13.png (French) --- docs/assets/fr/FormObjects/hierarch13.png | Bin 4327 -> 4809 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch13.png b/docs/assets/fr/FormObjects/hierarch13.png index 297a435ea970030705b028a42ca22b97e151fb19..9b6e12a921d94412166ec8a04ad324aa33e6c651 100644 GIT binary patch literal 4809 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 literal 4327 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 Date: Wed, 16 Dec 2020 16:38:21 +0100 Subject: [PATCH 130/311] New translations hierarch14.png (French) --- docs/assets/fr/FormObjects/hierarch14.png | Bin 5004 -> 5130 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch14.png b/docs/assets/fr/FormObjects/hierarch14.png index f863b99d1dc9658a4ccc980c1fb7b4b19763104f..5162868f9589bb2af2f4f53182b973114778a4d2 100644 GIT binary patch literal 5130 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 literal 5004 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 From 760ed0a77e014be5652e6ffc410af5e8fc8eb089 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:38:23 +0100 Subject: [PATCH 131/311] New translations hierarch15.png (French) --- docs/assets/fr/FormObjects/hierarch15.png | Bin 9005 -> 9430 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch15.png b/docs/assets/fr/FormObjects/hierarch15.png index 7da50e0fa1e4934c2ad0f656e2a89cf8395c4768..7c96ce64727f97d1487b633d33aec0392c77abc5 100644 GIT binary patch literal 9430 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 Mr6^hPUO(V}0U?S^PXGV_ literal 9005 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 Date: Wed, 16 Dec 2020 16:38:25 +0100 Subject: [PATCH 132/311] New translations hierarch16.png (French) --- docs/assets/fr/FormObjects/hierarch16.png | Bin 12228 -> 12363 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch16.png b/docs/assets/fr/FormObjects/hierarch16.png index fe8150e1b233e47890790619f04b37a0b924fc3b..fd58a2263ffbecbe2076f9c0ae7770f56bd0e2ef 100644 GIT binary patch literal 12363 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 From 2008f7e0e90f31ccba9c4795fa612a086093da31 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:38:26 +0100 Subject: [PATCH 133/311] New translations hierarch2.png (French) --- docs/assets/fr/FormObjects/hierarch2.png | Bin 6559 -> 4459 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch2.png b/docs/assets/fr/FormObjects/hierarch2.png index a88405946841088ec1729c5016d8566d9aacefa0..c86e3aea4f799f3d1348984fbbbd57ebbb6e7c97 100644 GIT binary patch literal 4459 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 literal 6559 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 Date: Wed, 16 Dec 2020 16:38:28 +0100 Subject: [PATCH 134/311] New translations hierarch3.png (French) --- docs/assets/fr/FormObjects/hierarch3.png | Bin 7670 -> 7607 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch3.png b/docs/assets/fr/FormObjects/hierarch3.png index 1f8adcf60e4a0ab6e6be083a7ec9b7cb9fee0387..db80bf6ddcc6233b5cb028cc8a45e09c4b849889 100644 GIT binary patch literal 7607 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 Lx*COQHlhCyZa`_3 literal 7670 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 YYkXID<~1A%yw3%xD{Csfx^5Z%f9IcSyZ`_I From f7d7ab88a8f82a4800d33fccbb43cd81bfca7a75 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:38:30 +0100 Subject: [PATCH 135/311] New translations hierarch4.png (French) --- docs/assets/fr/FormObjects/hierarch4.png | Bin 114067 -> 23582 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch4.png b/docs/assets/fr/FormObjects/hierarch4.png index 7fee1c19ee075193afd6843c1a5106a5702af400..c197d38b5a10804018cb65acfa1678fd75b4db67 100644 GIT binary patch literal 23582 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%0A|cf<&Bb`%$Ow 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

    e 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 Z(k)5sGYOB^b+#Y7Pzjh8jYkKw# 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

    JvA>^re;;@QEBaMal-li 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 Mrz%_X&NTRc0lQ*q3;+NC From 9b2af30e8690bd3c473a37f5989f86cf860f34f3 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:38:32 +0100 Subject: [PATCH 136/311] New translations hierarch5.png (French) --- docs/assets/fr/FormObjects/hierarch5.png | Bin 1862 -> 2328 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch5.png b/docs/assets/fr/FormObjects/hierarch5.png index 1c82ef869c853009cd371a9d742e860ac1cc516b..9bc1d0857ccd825be018797cb68a316ba669971a 100644 GIT binary patch literal 2328 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 ylKo!xm)}n3l|Pp@c^XdEaCwJG!zY9LKh7YtIaf zBiquRUHz=+8qTfu8>H@$qoNcDv0jVP_Ct`~4m}-QM1| z%jD+f=JoY8Had&rz;d2XO^s}L9rDs^YzrSZ>q-D$Ch~h|*5tE)n z$2fjIJUr+rZ!qPUi{;dExzxMpEy!82>f0m~itQ8BV)Af}oZ>*bx0n*ZZnu*hxEO_S z;Fg$BQQxX)O`o%p`274FQ^;g+a8Uj2-ni-D?d@%~T77=F8rKY^ZVWY$ZwS+vLequ@>U6t_i^5W?^p`xx- z5i{#0^db1?&mWko;Sv>QvRHJ{TF@VKH{4 zUhih8V8CT?l(C)+dvb4-7abKPGH~nKlqc|6@&uJYqU%Dq$7vPyr;5wz(@x-pW7dat zhD7^`EP6q4GTuo~b_u-RqF2t0HrS7fsJ>}ydAe1?Fsf)xU;G~^PkkY~eWj{mDtRWi2rty7Aiuj0Qr({&`|QPx5srUY`}=We%?Q_UX+4WNp4^x?~0$~vZy$)L%+ zq@KM%)At4Hx-4}wk;O%}o_;(qpMIVwnR^=M(;Ey1 zLjf@NW}YaSdm8567)pdydP5^Dm&+OKuM}8d_<5LO9JB(-HC#)!4L9eq*=%Clp(hD% zXTr2%0@AxI>b&;*{bI4WBsgOd`ti(qI0bMaJQ@%^$c~_{b~;T3Re|nJnUT>F{6UT1 zZny4EGEzv-zL_}#ymk=VWl3FGtya3p&JCMj?34cEa0)-uQyO_G;8>qcqIbOu1L$Tw ziJbT8NcPYk{a5x3pRi{1ZRV`dFrlL+%;h9x*UeAq`%Gn@U z#kYUDr$l3FN77xh(ylzU17XB}H#|2+HfWKqa9*XaEHHe^f#JdEl2C+l8ns zFgz&mECa)1S&`miSw?U1?yYC#S)4YYOGXK@y{;5lVE9GyOeHX!n)iK#moAAJcYqFQ zcZCIppCM;+C5$aFTpX2pBbOBSjiqjP+sQcN(b?^GZoFs~yIWv*0P_nBr+T4$B%zf` zf6sr8NnxI?-WP3ErA7Wu-qa^_L|q(EuC}p(?XGBF>6v*TG2R&B$^yl&rWL;e{_;vh zb*V84xruv+x6qS6r%@ftf9^Y-_g@FIXlKf&3oU$7`W2_r1H@| z-Ny@^i!rtb*j0f~WV2v|f#LH0747>c_RitUV1ePiU@C#(QuS$*>T;9-tMq+=x-Nb{ z)5MVnhL2gcK46hk^F+zq({R6zVK9^e>*?o-lDVg0F|vjdVU^xc9IVnCih~7)pNEMC zhI?l1Z~yjWF!JZdmppK;^C~ki+!b5mm0~d^vqx2+dsAj$xC;qCZ9Ue_0QSZ3;=UMO z)uN?>B_@PyA%FdA6bZQKIGFOp{}f#HhH z5s2+hKe{b({9hZl!0S+51y1%&N1h(H~;_u07*qoM6N<$g69jE AkN^Mx From 7c0ec788e2a25233566dbfa31bf8593e2c4a570c Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:38:55 +0100 Subject: [PATCH 137/311] New translations shields.png (French) --- docs/assets/fr/FormEditor/shields.png | Bin 8910 -> 10021 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormEditor/shields.png b/docs/assets/fr/FormEditor/shields.png index 21c805438c888a05622d5464925aebe641a7b519..aaae4df4f580ed2f5afdd5c78a9a8dc82d4e808f 100644 GIT binary patch literal 10021 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 Kay2q$!T$qZ8Cu=| From d81a6232c7af04d458f282277c99d819c9771a2f Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:38:58 +0100 Subject: [PATCH 138/311] New translations hierarch7.png (French) --- docs/assets/fr/FormObjects/hierarch7.png | Bin 2332 -> 2813 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch7.png b/docs/assets/fr/FormObjects/hierarch7.png index 919cb6e5db57d73cc9aca4b065dec0c398effc57..1b98f44ae735ee0c457ba7d10f8c738184b3aba6 100644 GIT binary patch literal 2813 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 literal 2332 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 Date: Wed, 16 Dec 2020 16:40:13 +0100 Subject: [PATCH 139/311] New translations listboxBuilderIcon.png (French) --- .../fr/FormEditor/listboxBuilderIcon.png | Bin 10339 -> 12884 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormEditor/listboxBuilderIcon.png b/docs/assets/fr/FormEditor/listboxBuilderIcon.png index 4c11a5989f23eb8d20b69ef98098d335893a02af..40daf8fccf2aa0ab9873c4a1a33568983835cc05 100644 GIT binary patch literal 12884 zcmY*=1z3||_qQ0Jq;!MQ-3@|Bw{&+3(j5Z<=^ikoVRTNAP8E@E*yxa!X25_E-_-Yg z|JV0i7qGF1=RR@YzjMy-9Ae(8E8t*KU_N;807pqtR_nooM{TIrj!)51-+_~yE2tl6 zo>~fT9@LIf?V{d1wwG3ue(<0!3G2r43F`ebH$_9w2M=(+|M@~AW>Nm|-~sQhlB~3j zpV`3@h6R!BJjOBeOGVePXtXe9HT)q<>DVW-Ib^0RK6fv=Pwt?r4-DbuQC+j!)@M>Zmo>zifZsWj5D-na|yj z;w9bRi|xg)bA^8|!4F@y%ljTKwpM=S@z_uV#76(UtTvlhf>XcPj}3l&MtBCKLM(bF zNy^!o#c&ZU*4qvZen5LvY}Of|RbwQmt1kQZn#f2=dAWdh%PPEt_>eQ-B44VSRm^P( z-eb@Q$1yZp_a#oν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 k;s4JstvcRZ-C(}`R3SLsgiHwhFc3*fOinaU Date: Wed, 16 Dec 2020 16:40:23 +0100 Subject: [PATCH 140/311] New translations hierarch6.png (French) --- docs/assets/fr/FormObjects/hierarch6.png | Bin 1796 -> 2119 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch6.png b/docs/assets/fr/FormObjects/hierarch6.png index b67742d4422225c34110be8244d7f503b03d63d0..2190a4d247406cdfac71ae1d782f62919a50e6f6 100644 GIT binary patch literal 2119 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 Date: Wed, 16 Dec 2020 16:40:26 +0100 Subject: [PATCH 141/311] New translations hierarch8.png (French) --- docs/assets/fr/FormObjects/hierarch8.png | Bin 1911 -> 2171 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch8.png b/docs/assets/fr/FormObjects/hierarch8.png index 324ace96f36b0ab834adfb20186d94d293f2e3a5..994dbc977fc39813ebe0255989559b12abc6dd1b 100644 GIT binary patch literal 2171 zcmV->2!!{EP)Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy32;bRa{vGf5&!@T5&_cPe*6Fc2jodaK~#8N?VXKL>^cmEc_q*S zEkFshKnt`$3$#EBv_K0`0xi%2_poQ5R@ly;V`IlshGBLSM{)E?wqk3Y|GvM!uY6n5 zz{khO-QC^i=jYAM%~ILEkAt^wiyC-+eFetFV*M95-$UOv>9s4M0ovk)cmKBOHO$t4 zG)~StTZczF(Rm+<*8aLK@D93*r>Cd=mvjjYHL%Rv88^gJ{L;?5xJtVgn8_QbJv=ynyx zQV5MH*o;Fec>Be8qsNtYdj{%C-rj~6WUNIMQA=sjSPqpV$`zxuyl-OdtB}Sv8 zui?$`O~-4D(aFh!riv+|Vsm_GdfUzH6(H`If z=gs0hTQesy->NG>6O<&oJ<9Fy+{V12Yt#TqYMM9qNWUI9^rC-n&7917peOd+PMVh{R4=G!j*@n>~?XK6uFm2QU zwV=Im-kmqVg{$Yh3oEp9aS7h~Ny$HtrvdBzcjq2iwtC*4m(^$Q(wukigv!>>1n*$% zw%`c);Zh~7@Xk(;oOiEya<;5H7MEs=H`KQ^J<@p>x4G&9wHGd?N1`^#)g93baKRE; zPbN;4tbQlEFJQ~R*Q7^It?mfe$caFQt-F73&v#p31p&dB$$Wa`)as5pr%~$Yyer_^ zEmBiilO7q^2d~dLv|trc=e-+F1pzUY_34qiIz+C2%;vl+;My&66Yu$~Ciu66JgArR z-VLXM08M2vJuPeHU5LQPJ@Y)Co5FHq)03Ac`(E#*$qhtMTj1(?g%SkYIBgl z8YfSdgi}G53Ema-c2tqh`>5pd>g~Mq^mf#TLPHn|Ys&QE+{VL-%uR3L4 zAg@isDf+F}`t5i$GHgtA#DBf29~dMPBPn06Fj=r?FyY_0$*F}|m}7b#g81DAOug!q z!!OKQWI!O3q&!6u8d;JP=O`RxOHL(5@+`f=r1RdUf#SR+i;XRWvuK zZ^lYMIP?6?*iFBa`r-|$lb!+mGw<}fB);O(I$o1#ZtAty&bt6_h|uqzW|tZKFc@En zoQ-@D|Ar75)QjKL5+_Cm7E|WVl@t^0d8{?CC)!P;s#~>R)l;`tMuNffhv0jjxMQ6q z)GLjuI`1Cs0n{tK&A@s0$h%&hoOeCly5vM z+i`L|Z09|)2Hd|#rW-eDCU^&-7m^e(Z*8-Ax568lCj|WZ`a>Ussm_~&^#dy6H1Kh` zFHVX$Z!5fSZjf?z;f++~Q$8Uw7ccERzG8O#l%95O53o2BO=RW}jwYqyTwVgxvTg0m zR(p-b{`-{J^b4f61AZ1K)?I$Ud*)Ce zkkZ&fXaj0R-HLw;p;PW6lGf5(1%sFf_pIlwO+iB?@~NYLhTk0TQ%>sTc?|fI&t`eN zr=$_*DLvBTwffUDNqCIK*upbxhABw=oX0yU4PhGG8vnstKNtL&PwNYr^KaZdRL_7} z!ZgHL*zjLMxjfzwh!8!H1~XzOf{S{5-ne~h;$#gkYQn!8>bJK`J8xSJjPrKh^#kVK xS~)xQN%(g>(!j6r)Ky8XUg-E5_y@??B_w$IOkDr~002ovPDHLkV1i@-E_wg} literal 1911 zcmV--2Z;EIP)000L*NklYl#rAFB^)LA#-1-5;lDV>AY0mbT%Ik- zl27AZt*x;vVu%1E{7aI=_h}ezh|y^DpYL-p+yh2)6v)#&y2SJIv+pxBbbvp_q^GB+ zmzNjcCuZmp=Cq?gQ<~wxA0HnVi^XIz`TYDu%K3ao3Vr*-!^7!x(vq9aMze4T%M;i} zVP?%{Gd*gz+o5Jwg_?bLONdAuNanPY0$6gt-_PgskB<+eyuH1xR;#}m#^dpFxpYe+ z7uzU_ZO!5?kK!)VQ7zKBi^8QRU}%kUnq81BrmxrQs*1pz){`p<&NK@Y;wmW~KAleW z5KxYb#&^#I1u1pft}%faO-JwNO1{6p!#S%PuPLeJ-3k?O-Ei9U353U4+WY`87f=n})!AKp!oM5j#=_N;VT}k-E~O?_ z%0r~fmzIt5r0)NeyQR9s@briGrrE`My{^#{)`$S5LVKEADi6UBc1yF8T3upz`a|&& zf+d*&!MnmGs{faBtELBp zo<1IFE&{Al9^y*M8F%MR4+!2OZMbXv<)BzZjR;VshIFS@%0twET?E_AYW_4PSpDJM z0s$AWHUz+$Rg9_-{%}CWUoDwrAvA|o#>Tpf8W>UQJ3D#}tux4F2K4-^v5 z3>BOQ>@tS`X%P|4P*uIx6AAuYUqwH`QJJwf>=?r>ADG06kgXZ)^7a=Y7>3)JtvQyl zIc7vOHX97#!<=^bFsB_0jOHj1EX`dh42u||<}g^Ar6Yx55ku4*hDbYxL;I2ibzD7)3{+w}^=@pw#KicW4OwPLh>B5;~rv{M+mQc<^Nqq#4TONAll zEtnz=)LwdE@tPPS%~6catrdp!>KKEEzI=QXH2;VinID*jH4j}876r}i6o!bmag+)R zwQx>zI2iaIJ8m@~xoDvLnyFF zJA7EA9Se-+C}1>KVm6y?HXGk((G3Ep`E)wzs!$Y-G*{~_m&;&2t`aiMyWI{JIh{_A z$0MIngEpiz6!&bm+n_#h?EBIBO~BV&i&GSwq*5hG3<#NKPA>7&vM!J!&g7C*uTJ4+ zN%pF=zB-F^RisGv88x?0pEA(laNnw!$BiZJ>E&C2Z-+XbD754c^W zEtJ~tCSTtbA%|d9>JFs02%+_m+_A-~a?2usbq()pmJqyYR39wO=<8F4TsjjyE>PiR z3Bh1#ru!{Q^_b$`DY+)qiM%VP9y}ZldR6&cLhyzoq*stjjCp$B%theb72P;aGwRW$ zhSbj75w~WsXDI}0Xxa_IG^%0~jLdO98luZBwcir3HM8T;t#Hw^*$iVLAB>>KNj3q> z!SrIW;DSSLR%@UVefbKej23w@iQi8c`?k6}0hF`5aYsb^z6GRz?_@~W)|>+@35KQi zJ+Su~uS2k_{8fQuBMwqW8Uv!EnTT!0zes7m9THPq8GIr8G?QI`VZ$VUk-%t<0!DKb z2$$y3=;HVID8qW|yi29IF!69gx6|0rZ=hEG>or6OhG)p>@ zEbesBZYPsT>dax{>ddjb*`)5Betxm|zA|dEs%k?4CiZ1{8hW)6aJs!*e*1Rf?JeETRs>6Pf6S_?4Oi8AEr0+1pXIkJLZ;b;a*W?}ni8NSfe$@I z)A8f7LqBF!)rJkd6nu9@&`z6%MNNq7V^62l&6Y;sHS_#cSyi>6-S>Ct$6HuI(@emm z@B Date: Wed, 16 Dec 2020 16:40:38 +0100 Subject: [PATCH 142/311] New translations hierarch9.png (French) --- docs/assets/fr/FormObjects/hierarch9.png | Bin 3242 -> 4288 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch9.png b/docs/assets/fr/FormObjects/hierarch9.png index 3953368eaca2955a7d3d6f2c8077e999bb153c9c..088da8a61450bbe43774365bb321bdeb683137b6 100644 GIT binary patch literal 4288 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 literal 3242 zcmV;b3{~@qP);wv&^&7OenTBZVxJ0+#vT(0LF-j2AfwAw&{6 z2q8q0&_SGh<>uyQ=p1&2FW1Gz#mmb}*?HdI-~asiGjwUjVvQ#AuumVrGTZHTwOYaE z%~VSQo6QD0`vZUd`o$zH_@sPlSyIT(fz|8l>)k9!747x)_5A$&^z^j&v{N)uPu7@$ zeFDq$2kd-#dAVM%n^%Oza0~A4?j9c>v5XzCCzIaZ-f-ZLA3xq|uz*!8>`g683M{ik z2f_PMTrDPQqMob~z0kDmb2JA*Qr7nE6V283`ThGhmf^>_iUq7<Jo zAQnA4J7YNNLzJICe_B+@0LhYq@D?p)nI5SU`i*`B!*X2D(l`fSf?8781 z;BUqb;NjtcXTZ*|i4QFER+@@6kjjm>x3?+#h?XFNh;BzMIm$7kgYFSc*z-L6= zKli-9zehCk{QQh9h=mXZF+@Sx5IFfgk&0#PiDgUTDv#nSx8t%@ znkii-OM!_}cEEPC1475Z)EO&H$Qmf`)zuXWZntu$2x1?5<2BYCvmusoBm53nwKHT= z%aQ`iL>z>NHJIB`6;ee)3-LMjdwO%AZUxyQ@LqNZ>S9;V!}+4&ikZ@7vXp56-VP|N zJw^sec`HrG8r~tcvClXem4je61B3hQ4d@^uj~M>$azG^&0zExFAr|$4Xg*lN{{Dmp zLR^HStp-%ThZPMy9xjS#*2qNs4=Kgj4;_feutpX>ATqQm#ExmwD#~^oTYB+4HVdUVoF;>~(=Tpm)0?Hi(`VCYXMg%S2qGM-tIPJF&Nc$|M>;Q8I0Y&GR9)mSd zOgP7kXAx~kd55YVv-6*pU;(SJ`QFsBqzFOJkQ$^6w%hY(Faj6s>7TfogOoPjS$)1` zd3}9tzHTWaQ#4$K8RM2_=`vZeg0mDUJ8)o+gMZOM%9NF+Vht1@yWuY?mLDhy>@$9< zp~oQjRRU|vqr-OKTLunRXyfM_nfk4V5Lb|1D=AnlF!U3`;4E#9fZ}B zRL||7Uafy^lUkPKEu-n)M*>gjh{FfW�_1DrA`yn(lo(Qg3jC7&HGLIs>zX-=#5% zL+tSK^1>&1Atr<(h#rAo;I{+Y?H14QiXg<~&=|y0kTp`sGAW|d(uEM>FNz?R!bfi) zYeZ2!NuakFLWmr45JHF~auA}F)vD4w&bcGe+Jl*uC@Tu`>laM(_aBzq7j3<+5;NAt zp`cQ2HXF)w9V##@(b_^PiPnD2_QxQl|Hmn0*VonS>&Ghoay}on2Yb%@-*M++M7g}Y zM4hBaB99YVTYi#aN-bB2XD7aau8K|^4_qbwQU_lRev=M zPh(T}{A{rGdTkf0>dA|iWV(g~%l1K`xy)TXA=;(@b~Q~nQ#3m4OzBctqNoP8+w{kj z9d@7UY}Kb|Le-F*OIfKWYkX-HybEt{VQayb`oh+DzBm!Ok7iPB!OA`r#rEgtf2*jD zt~Gw7;vXMR@b~^cjBA*L!!3I}Ka7tgoOyN*f--Zyd$+l;?B4y(KEBALmL-LCroDrx zBw8CY(S$^6gI4j;-l7eL%0h=ah&t0B%k+BIl6i==YV#m${Pn%~=OgN}|J@l5A~-)% zk+(TI2-BFOxQ6c-Dv8!kNTzj{eZ&~KXl=g^0wI!*K`bd)ZC)3S;QajWG8XJSa0l=* z&GXOk5yNT-BS#^ zv^IS9rWZi9$b1LEUWMa=CU_GagYZ3nW|iR5evs0}9eD}9^+0~?^+y$ZBRiup2*#dl z4s0fVh)SZh(~xNm3O+f}+DO|#gAAS~f_DU1wa62dm>%St4gx2!XR+p62{=}c*Wj~}HB(d6NOEo| zNOCTT>PZ5L)(RnVD1ulDvPKG7CWS<6g%CO9AcPP}q)B-&^U$OWZgjuXM#U%F?RK?V z(dL`YrW5^0X;PMd2No^bVl^pKrQo!Ys8q)isE+j|B|oOVySsaQeB_t4rWjJJA1O`B zaxz6*rY2>k6j8m9g>cM*`$ov=He4>&kCY~5Ihmp@Q8p!P0FY>;L+HyZQ5um1DQM*6bH7V%8qv>gD{ALVD<2}Et7{U zJFt=_s-L;MOD)!qlqTgc%wLnz!66cK?|oz-b2g6MW_>v}I~i zW^O1mz(JW*1~Pd*v^Z2)!(aYROeY2G$}&B{PY+ln9v!wrv3_K)nv~@c1j>mX5)YPe zKWqSd;|K=!@KyX3V~Z`(z;HG`sUloI?M;cm1R7SW6}mNK`?r^Gc4V?-1!tF=vIG1e z+5kUR!AWh1?n5rhF5DrBUJu+cU zN+D`A2C)=mjTEv>3XMSsA%qa32t8sf1z977ER#Zy7($2~auCzt=H|x#ipgrVTHriL zaeS5~T5I!>JWo$gllujs^?KdOC)n@r@3*(NCZl?Gb_Ns8K$3TITwGk7H1Iq4?c1-v zt1QvlLaLZVidRM<{C;WZ%^|qtd3iW2TwY!dt^s#s#&Gvxc|U`T>W7wU z>SV;L5K6SRoMzEDoi6YZ%XARbDIJNX)3A)~?t8I9a&>hToo%_3Xzh1s77a${)qR!% z2XTLYPd|dcfo^4B0dBG4z;3>D-rQxj%4^>G+tkK-fi-whFR>et5#v2n(styG%|SHv zW4&x&fJAG{i8=_ImTy=04uU!HvIt(cGOz%*aG4Fmd6_gV@!5BO5bq?HvSi;;S{5trayb;J5Ic z)>?wqGF#;}Z|&qQt=F_h`(MiOS1*vX9XaF4C#y}gp`n(Vq=*mA`gRb@60NoD!Nk=6 z3a%9>^99m<&2rh6AgL2uAz>jw#@9>!4D39`I((7}yi7 zBlY+RJM%kN+zY;4@~IN7Ekv{QJhDa#Stf;Ma|$7H$Uz7plE^^_A(F^J2qBWlK?os) c5aMwD16eC!9-k!c&;S4c07*qoM6N<$g6B6PCIA2c From db33cb7def3e3c9e39fe0ce11cedcf5078e80bdc Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:41:10 +0100 Subject: [PATCH 143/311] New translations MSC_encrypt4.png (French) --- docs/assets/fr/MSC/MSC_encrypt4.png | Bin 6396 -> 6236 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/MSC_encrypt4.png b/docs/assets/fr/MSC/MSC_encrypt4.png index d40afbffb8793c91b47b6c60785aac6a40e1f228..a215c22162f4a8cb38ad2b85a34fcb0b853d4e35 100644 GIT binary patch literal 6236 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 YB39V_zikhp_Xhxg($v=|2Jb!jFP?e+y#N3J literal 6396 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 O5K051UaI Date: Wed, 16 Dec 2020 16:41:15 +0100 Subject: [PATCH 144/311] New translations MSC_compactwarn.png (French) --- docs/assets/fr/MSC/MSC_compactwarn.png | Bin 2074 -> 1391 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/MSC_compactwarn.png b/docs/assets/fr/MSC/MSC_compactwarn.png index 92437fd9d2f47454541e0a61d4f9f84872e2e05c..5c69747af43a56899b28a5ce243ca87696784f95 100644 GIT binary patch delta 1358 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 From e16a5862370a498358ac31ae7b1f9b0ac3928a76 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:41:17 +0100 Subject: [PATCH 145/311] New translations MSC_encrypt1.png (French) --- docs/assets/fr/MSC/MSC_encrypt1.png | Bin 3724 -> 3848 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/MSC_encrypt1.png b/docs/assets/fr/MSC/MSC_encrypt1.png index 74844ae23b9d26025815d43d671e7f28fcd5708b..2181fe33d09f03ca21cbf570417bbf6ce5688a5c 100644 GIT binary patch literal 3848 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 B5m*2K From a16b3803263aeded512e30f47b16bb92fd6540ed Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:41:19 +0100 Subject: [PATCH 146/311] New translations MSC_encrypt10.png (French) --- docs/assets/fr/MSC/MSC_encrypt10.png | Bin 1579 -> 1170 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/MSC_encrypt10.png b/docs/assets/fr/MSC/MSC_encrypt10.png index 5e92a8df51db38e17acf5231c57437a29509b346..9ab73cab6f6bf714ddef606af7e5c24ea593b1ab 100644 GIT binary patch delta 1147 zcmV->1cdvm43Y^UiBL{Q4GJ0x0000DNk~Le0002s0000W2m$~A0EDOG0+Asof5QL( z4#NS*Z>VGd000tnMObuGZ)S9NVRB^vM{;FlZgXgFbY4{m1poj92}wjjRCr$PmrrXH zK@i3BsrDou;z1Nq@ZdoaRupm*@tk`=@ss2x(Ig^>7$l3Z(Of(!U0v1lf0%6M#){Hn)SybMQG+V2Mh&X88a1fWYSf@gt5Jh0 zt)^jvZVwLJNKu-gNrOJ^k1jkPtbY07=896A#tizTKf1d1?SAj*(#xTGRB4K449f0& zxOM#a)1QS8zty8kQ#4>ubSHmqy&Yd)AMWYTQKdF@4Vt_2?)$?ltHaO3f83tS-8oBl z8K-{M5dEc214*g0&Qjk^8{sT+{`*uuuagY=ZfF1Y>*3ek(l_BG?j+EYXY;@+8m2?5 z?W+c@!znMBnBJfpJNxr51~=av+*p@AYW`=R%$*jh-9Dyf-gG%9=jG#@KlL>HHwK;P zlBYDNd3PFjKIk18+uhmtf0=u9;&-Qq3+i;c<|{re?ul?gc$~2Z9yyYxl9gOciQo`Y zWP(UM9X8>C9PV^nhOiyvg_Mv}l9ePB`YJ?Ondp+65yWN1gVM&5oUDfZX2{?4C@r)I zo%urY0t)pOD^3s$x;@yxxH7!A`74;O;L)kwNrV=Bu^gZpxo$i3f0vL1U0Z%*05ZVP z1F3{n0|*>GlCL;85v>$z=Ik*T2)RUAc|txOHqnq%2PqGPQYEo?7LPDNnlrA`$PThR zEQM12Oe}zcsaQaMgD&=Vuf5uR1Qv829o2NF#WkLE;Ad$M+;E5`*8pIKC=L@sx;sJO z@TZ6M;+c>r6qO`Tf9fE7PFYr!Fy`YZVxnP>)dHeeI!j1U2>A-=o1&D*t@~9o#InT# zPyqX6N`Hfj9-Utq)O4o>8!Pk^>IF^gfk$DdM{JmbRtu?6DGD4IVO^XPkSG)dF)Z5S zbIP)+gh3cqZ8RW9OTyAwA%CQ}*-5%)HwS%3uxR(^Wfuw%fBPz<)S!mkqYJ&my6!Y! zW9c-O3r)nK*lrT$p%KRzZsIXzl?9GMh1nd-i`zj32YJG(D3cOGVLYUD7+RK>;yNcq zM6pg2F+< z@|zLFC1;`1M)I6a;6u=b#T94p3mnM{khbQhF%0qnFpdt2>oh zGJ!!2&$dSDPGy!%W>7_$F=|ky)u=(0R-*=0T8$c1X*Ft4rNxZLe*tPR?FMo|3UdGe N002ovPDHLkV1kCX63qYr delta 1559 zcmV+y2I%>c39AetiBL{Q4GJ0x0000DNk~Le0002!0000T2nGNE0HF3D(vcx3f5HF& z4#EKyC`y0;00qEFL_t(|UhSMqY#T)w$G@hbBsC@G5ds&4T%({IQ00S3dRg7i!z0@aC=f3kh|KHT2D z2k*T&2BUVgLM0Q2csv7@mWZIVDv*hj_)GNrFnP#2J{ zGL&kL#CyDNrdZU!f3HO56LqRvkl?ZHY`4>Oh334wZbyBzE;%1$8+385zLlm-fwK17e4#bymbA(lK0iG zZksQCx@rEhY3J=GG|Fje0nB`j+}HB#nz$G|UED*y=E_^kf0KAfo8^XDo)tQt<@wcm zbmdxU>9X1ACC#Xrd7385G#X`-*dB53oz`_bdalzhLtDpT`@kyCzE^_BvusR7n(Nw; zkCqwOC$gQQ4zGA!n{@Tb=Us8KJmp>bG|rk}t)S1I9)a_dCt>^6E*u=tcjQc+8Mjx` z{qTEE9n#IMe=ZR#w%#OHwtFjGsr*ImMmY1Hou*f-P$E`Lv7Um?XL){(U%3`DNo5bx zTzAx=ORFydE47;A7BW?0dufJGT2MPIdacueu8z=s5P&>Gu(mO4+(+t$pgsvarx5R* zNY1d^Ufx@a;?ebaoE<1G?&axIaBc!%eS1eM($~M;e~nz64C&@Jm*DCmX^yiqd`J{l zfLKL#y;@4?-KYV=jSG2wdcZ*TI#wWi6u-1E?eHttiLQ=yb~l`K+b3P^6(eSlIf$Up95MHpC7y%!0&#lW*%bmRhWu`Lj4$e1i(FgX4Y`3U`=Iz#P3{8aNe3qqn z|A7KUkRb*IiXcM_3KT(x7!)Xi3^6EB1Q}WY{sW|-=9niyrj!5x002ov JPDHLkV1fgM=k@>q From e719c378c9995f4c17fa40648db2a5c95a084c8b Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:41:21 +0100 Subject: [PATCH 147/311] New translations MSC_encrypt2.png (French) --- docs/assets/fr/MSC/MSC_encrypt2.png | Bin 4975 -> 4750 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/MSC_encrypt2.png b/docs/assets/fr/MSC/MSC_encrypt2.png index 63a711cfdb7bd4fda7d4e012adb201082bd8c0ea..659086edf8cdc75f79382b77ab80c3b98166e463 100644 GIT binary patch literal 4750 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 literal 4975 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 From 193f24df87f98a12aeee841daee700054871ee57 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:41:22 +0100 Subject: [PATCH 148/311] New translations MSC_encrypt5.png (French) --- docs/assets/fr/MSC/MSC_encrypt5.png | Bin 940 -> 717 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/MSC_encrypt5.png b/docs/assets/fr/MSC/MSC_encrypt5.png index 367b443a3113855449dbdcce1606d76207c42d2c..a2f1b974180020cb46ad820b64f76bb1631cfb37 100644 GIT binary patch delta 678 zcmV;X0$Kg62h9Z`iBL{Q4GJ0x0000DNk~Le0002?0000O2m$~A07gESZIK}~e*hA6 zMObuGZ)S9NVRB^vM{;FlZgXgFbY4{m1poj7L`g(JRCr$Pmy2z~FbqUHS|{oZ8KOgY zg94c$Gh~L0P*FdgB-)Y@2e5^E5DJRsM;0$Z`t>4YYAA6sIg~h=97>!_4kb<|hY}}~ zQ%U@>+%muSXY?L{t9)$15A(eLf9^Z*n=g2^`?(IS#N$Qp9&v~3j&Shgl=w+mmH5$@ ze%%ocp8U-hyzc#+ogs-kE3!QNBl(I4N452dkLXL~R-Mb@e3IAeVmJ~bk=7yWH^uV= zrylCI++782j0FVP7p-JtWYs5359+eyU3UFYfidXNnyu`UinR(j#msYUf0~HX>XQB5 zEVBBM?b|?%+RlJXb%HN70yAL8i)CarG1&u8$RTX}y9pCix4(Y>4Wxspw&j%ErXH%= zMWpN^-f4AFP+#3h@nC|Zd!99Cs8fB&94X8=XOm^e)D>HP{=T`kSG*};MSA&p8D+3DnnN?d~#Q)Q#uCj8r(b?+)d?7+si(@FV3CfOT zvCgA*3{16Ui`^rTYjpQ6%&KEjI+SUt#>v&LcvCIT4gNnH)--Ob#VZCWjIylS7GHr0n$zpNV5~|mH+?% M07*qoM6N<$f=66CasU7T delta 903 zcmX@hx`th`Gr-TCmrII^fq{Y7)59f*fq~Hu$d>0|0+Ju^nmJ5VG^uBH^mK6ysfc?! z<8|q61D@8+!Qy8GeqH7@X-@mVGwY!86opQ9&k2*3UNNnHS6(8-v4bITQpV&OTSf-q zri-izUIx1ud^p|28#E8TU@}mZh-FyDvY7k8l!Ow-8A3gJ48d?kClgBKUw{Ap{nv?n zmk&C(|JA&^J*j7ZJ>U9@M(LI8@*fs_n%SyvUj96IZ?pgV_x4FPyH0Pq@v!#)&O19E z*k?B^Pu5Z&$fZjbH_lZ$U(^=v8< z^`7pStCC)Roi*G-?(RgveV;WqXi6E~^fGzb8q6VAea+V^)Xb%8_64n#J`ehPvuo#k3DudsC%v_ z&*Wvm(PZ9zwkHMi*DVUy4qO^urVtYb=)*>fm|8*k0*~?Ze zUcJE0~L{!`}4<7_*`U3-^9|jVTu;Feopq^IcJK{`o%dee#{3| z=dPIBs=4;Ma|8FhSCOx)XHQo2{lhJA@aC-<8`o~ulxUJ%ck%VBDVv0DE|skfTYl$W z?5?&~vmRy6-xGZJBJ2NYMOq9R2Vd0bNW>a2E&jbRq2wS3N+QOQ(kDFs%pd)6@7}F? S#dm>ui^0>?&t;ucLK6TbTB$Pt From d6a56b06c811e1564a257cf062c9845976ed947d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:41:56 +0100 Subject: [PATCH 149/311] New translations onAfterEdit.md (Spanish) --- website/translated_docs/es/Events/onAfterEdit.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/website/translated_docs/es/Events/onAfterEdit.md b/website/translated_docs/es/Events/onAfterEdit.md index 4e95b7529dc1f0..4c9580463ea7e5 100644 --- a/website/translated_docs/es/Events/onAfterEdit.md +++ b/website/translated_docs/es/Events/onAfterEdit.md @@ -96,8 +96,6 @@ Here is an example handling an `On After Edit` event: from "+String(FORM Event.oldValue)+\ " to "+String(FORM Event.newValue)+"!") End if - End if - End if End if ``` From 7cc91a137374fa411a9794eafa15b628f14938ad Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:44:17 +0100 Subject: [PATCH 150/311] New translations datastoreClass.md (Spanish) --- .../translated_docs/es/API/datastoreClass.md | 77 ++++++++++++++----- 1 file changed, 56 insertions(+), 21 deletions(-) diff --git a/website/translated_docs/es/API/datastoreClass.md b/website/translated_docs/es/API/datastoreClass.md index f842895cae2237..ff0364517b30f1 100644 --- a/website/translated_docs/es/API/datastoreClass.md +++ b/website/translated_docs/es/API/datastoreClass.md @@ -10,13 +10,14 @@ A [Datastore](ORDA/dsMapping.md#datastore) is the interface object provided by O ### Summary -| | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [](#canceltransaction)

        | | [](#dataclassname)

         | | [](#encryptionstatus)

         | | [](#getinfo)

         | | [](#getrequestlog)

         | +| [](#makeSelectionsAlterable)

         | | [](#providedatakey)

         | | [](#startrequestlog)

         | | [](#starttransaction)

         | @@ -75,7 +76,7 @@ Using the main datastore on the 4D database: #### Example 2 -```4d +```4d var $connectTo; $firstFrench; $firstForeign : Object var $frenchStudents; $foreignStudents : cs.DataStore @@ -166,7 +167,7 @@ Pass in *connectionInfo* an object describing the remote datastore you want to c Connection to a remote datastore without user / password: ```4d - var $connectTo : Object + var $connectTo : Object var $remoteDS : cs.DataStore $connectTo:=New object("type";"4D Server";"hostname";"192.168.18.11:8044") $remoteDS:=Open datastore($connectTo;"students") @@ -178,7 +179,7 @@ Connection to a remote datastore without user / password: Connection to a remote datastore with user / password / timeout / tls: ```4d - var $connectTo : Object + var $connectTo : Object var $remoteDS : cs.DataStore $connectTo:=New object("type";"4D Server";"hostname";\"192.168.18.11:4443";\ "user";"marie";"password";$pwd;"idleTimeout";70;"tls";True) @@ -191,7 +192,7 @@ Connection to a remote datastore with user / password / timeout / tls: Working with several remote datastores: ```4d - var $connectTo : Object + var $connectTo : Object var $frenchStudents; $foreignStudents : cs.DataStore $connectTo:=New object("hostname";"192.168.18.11:8044") $frenchStudents:=Open datastore($connectTo;"french") @@ -203,7 +204,7 @@ Working with several remote datastores: #### Error management -In case of error, the command returns **Null**. If the remote datastore cannot be reached (wrong address, web server not started, http and https not enabled...), error 1610 "A remote request to host XXX has failed" is raised. You can intercept this error with a method installed by `ON ERR CALL`. +In case of error, the command returns **Null**. If the remote datastore cannot be reached (wrong address, web server not started, http and https not enabled...), error 1610 "A remote request to host XXX has failed" is raised. You can intercept this error with a method installed by `ON ERR CALL`. @@ -380,11 +381,11 @@ The `.getInfo()` function returns **Returned object** -| Property | Type | Description | -| ---------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| type | string |

  • "4D": main datastore, available through ds
  • "4D Server": remote datastore, open with Open datastore
  • | -| networked | boolean |
  • True: the datastore is reached through a network connection.
  • False: the datastore is not reached through a network connection (local database)
  • | -| localID | text | ID of the datastore on the machine. Corresponds to the localId string given with the `Open datastore` command. Empty string ("") for main datastore. | +| Property | Type | Description | +| ---------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| type | string |
  • "4D": main datastore, available through ds
  • "4D Server": remote datastore, open with Open datastore
  • | +| networked | boolean |
  • True: the datastore is reached through a network connection.
  • False: the datastore is not reached through a network connection (local database)
  • | +| localID | text | ID of the datastore on the machine. Corresponds to the localId string given with the `Open datastore` command. Empty string ("") for main datastore. | | connection | object | Object describing the remote datastore connection (not returned for main datastore). Available properties:

    PropertyTypeDescription
    hostnametextIP address or name of the remote datastore + ":" + port number
    tlsbooleanTrue if secured connection is used with the remote datastore
    idleTimeoutnumberSession inactivity timeout (in minutes)
    usertextUser authenticated on the remote datastore
    | * If the `.getInfo()` function is executed on a 4D Server or 4D single-user, `networked` is False. @@ -419,8 +420,8 @@ On a remote datastore: //"localID":"students", //"networked":true, //"connection":{hostname:"111.222.33.44:8044","tls":false,"idleTimeout":2880,"user":"marie"}} -``` - +``` + @@ -465,6 +466,39 @@ See Example 2 of [`.startRequestLog()`](#startrequestlog). + +## .makeSelectionsAlterable() + +

    History +| Version | Changes | +| ------- | ------- | +| v18 R5 | Added | +
    + + +**.makeSelectionsAlterable()** + + +| Parameter | Type | | Description | +| --------- | ---- |::| ------------------------------- | +| | | | Does not require any parameters | + + + +#### Description + +The `.makeSelectionsAlterable()` function sets all entity selections as alterable by default in all the current application datastores (including [remote datastores](ORDA/remoteDatastores.md)). It is intended to be used once, for example in the `On Startup` database method. + +When this function is not called, new entity selections can be shareable, depending on the nature of their "parent", or [how they are created](ORDA/entities.md#shareable-or-non-shareable-entity-selections). + +> This function does not modify entity selections created by [`.copy()`](#copy) or `OB Copy` when the explicit `ck shared` option is used. + + +> **Compatibility**: This function must only be used in projects converted from 4D versions prior to 4D v18 R5 and containing [.add()](entitySelectionClass.md#add) calls. In this context, using `.makeSelectionsAlterable()` can save time by restoring instantaneously the previous 4D behavior in existing projects. On the other hand, using this method in new projects created in 4D v18 R5 and higher **is not recommended**, since it prevents entity selections to be shared, which provides greater performance and scalabitlity. + + + + ## .provideDataKey() @@ -525,7 +559,7 @@ If no *curPassphrase* or *curDataKey* is given, `.provideDataKey()` returns **nu #### Example -```4d +```4d var $keyStatus : Object var $passphrase : Text @@ -539,7 +573,7 @@ If no *curPassphrase* or *curDataKey* is given, `.provideDataKey()` returns **nu End if End if ``` - + @@ -587,7 +621,7 @@ For a description of the ORDA request log format, please refer to the [**ORDA cl You want to log ORDA client requests in a file and use the log sequence number: -```4d +```4d var $file : 4D.File var $e : cs.PersonsEntity @@ -604,7 +638,7 @@ You want to log ORDA client requests in a file and use the log sequence number: You want to log ORDA client requests in memory: -```4d +```4d var $es : cs.PersonsSelection var $log : Collection @@ -617,7 +651,7 @@ You want to log ORDA client requests in memory: $log:=ds.getRequestLog() ALERT("The longest request lasted: "+String($log.max("duration"))+" ms") ``` - + @@ -653,7 +687,7 @@ You can nest several transactions (sub-transactions). Each transaction or sub-tr #### Example -```4d +```4d var $connect; $status : Object var $person : cs.PersonsEntity var $ds : cs.DataStore @@ -683,13 +717,14 @@ You can nest several transactions (sub-transactions). Each transaction or sub-tr $ds.validateTransaction() End if ``` - + + ## .stopRequestLog() From c0fc944674c7ffe0f2715f62b152fa30a674dc68 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:44:23 +0100 Subject: [PATCH 151/311] New translations cryptoKeyClass.md (Spanish) --- .../translated_docs/es/API/cryptoKeyClass.md | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/website/translated_docs/es/API/cryptoKeyClass.md b/website/translated_docs/es/API/cryptoKeyClass.md index 15fd95f73b59f4..e787391963ac3c 100644 --- a/website/translated_docs/es/API/cryptoKeyClass.md +++ b/website/translated_docs/es/API/cryptoKeyClass.md @@ -29,7 +29,7 @@ ASSERT($status.success) ### Summary | | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [](#4dcryptokeynew)

        | +| [](#4dcryptokeynew)

        | | [](#curve)

         | | [](#decrypt)

        | | [](#encrypt)

        | @@ -46,6 +46,8 @@ ASSERT($status.success) + + ## 4D.CryptoKey.new()

    History @@ -57,7 +59,7 @@ ASSERT($status.success) **4D.CryptoKey.new**( *settings* : Object ) : 4D.CryptoKey - + | Parameter | Type | | Description | | --------- | ------------ | -- | ---------------------------------------------------------------------- | | settings | Object | -> | Settings to generate or load a key pair | @@ -82,7 +84,7 @@ The `4D.CryptoKey.new()` function create #### *cryptoKey* The returned `cryptoKey` object encapsulates an encryption key pair. It is a shared object and can therefore be used by multiple 4D processes simultaneously. - + @@ -131,11 +133,11 @@ The key must be a RSA key, the algorithm is RSA-OAEP (see [RFC 3447](https://too #### *options* -| Property | Type | Description | -| ----------------- | ---- | -------------------------------------------------------------------------------------------------------------------------------------------- | -| hash | text | Digest algorithm to use. For example: "SHA256", "SHA384", or "SHA512". | -| encodingEncrypted | text | Encoding used to convert the binary decrypted message into the result string. Can be "UTF-8", "Base64", or "Base64URL". Default is "Base64". | -| encodingDecrypted | text | Encoding used to convert the binary decrypted message into the result string. Can be "UTF-8", "Base64", or "Base64URL". Default is "UTF-8". | +| Property | Type | Description | +| ----------------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| hash | text | Digest algorithm to use. For example: "SHA256", "SHA384", or "SHA512". | +| encodingEncrypted | text | Encoding used to convert the `message` parameter into the binary representation to decrypt. Can be "Base64" or "Base64URL". Default is "Base64". | +| encodingDecrypted | text | Encoding used to convert the binary decrypted message into the result string. Can be "UTF-8", "Base64", or "Base64URL". Default is "UTF-8". | #### *Result* @@ -291,12 +293,12 @@ The `cryptoKey` must contain a valid **private** key. #### *options* -| Property | Type | Description | -| ----------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------- | -| hash | text | Digest algorithm to use. For example: "SHA256", "SHA384", or "SHA512". "HASH256", "HASH384", or "HASH512". | -| encodingEncrypted | text | Encoding used to convert the binary encrypted message into the result string. Can be "Base64", or "Base64URL". Default is "Base64". | -| pss | boolean | Use Probabilistic Signature Scheme (PSS). Ignored if the key is not an RSA key. Pass `true` when producing a JWT for PS@ algorithm | -| encoding | text | ERepresentation to be used for result signature. Possible values are "Base64" or "Base64URL". Default is "Base64". | +| Property | Type | Description | +| ----------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| hash | text | Digest algorithm to use. For example: "SHA256", "SHA384", or "SHA512". When used to produce a JWT, the hash size must match the PS@, ES@, RS@, or PS@ algorithm size | +| encodingEncrypted | text | Encoding used to convert the binary encrypted message into the result string. Can be "Base64", or "Base64URL". Default is "Base64". | +| pss | boolean | Use Probabilistic Signature Scheme (PSS). Ignored if the key is not an RSA key. Pass `true` when producing a JWT for PS@ algorithm | +| encoding | text | ERepresentation to be used for result signature. Possible values: "Base64" or "Base64URL". Default is "Base64". | #### *Result* @@ -365,11 +367,11 @@ The `cryptoKey` must contain a valid **public** key. #### *options* -| Property | Type | Description | -| -------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | -| hash | text | Digest algorithm to use. For example: "SHA256", "SHA384", or "SHA512". "HASH256", "HASH384", or "HASH512". | -| pss | boolean | Use Probabilistic Signature Scheme (PSS). Ignored if the key is not an RSA key. Pass `true` when verifying a JWT for PS@ algorithm | -| encoding | text | Encoding used to convert the `message` parameter into the binary representation to decrypt. Can be "Base64" or "Base64URL". Default is "Base64". | +| Property | Type | Description | +| -------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| hash | text | Digest algorithm to use. For example: "SHA256", "SHA384", or "SHA512". When used to produce a JWT, the hash size must match the PS@, ES@, RS@, or PS@ algorithm size | +| pss | boolean | Use Probabilistic Signature Scheme (PSS). Ignored if the key is not an RSA key. Pass `true` when verifying a JWT for PS@ algorithm | +| encoding | text | Representation of provided signature. Possible values are "Base64" or "Base64URL". Default is "Base64". | #### *Result* From 9f1ddde253b7f9c8438a4c06a833e10bfc0ab81b Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:44:49 +0100 Subject: [PATCH 152/311] New translations entitySelectionClass.md (Spanish) --- .../es/API/entitySelectionClass.md | 100 ++++++++++++++++-- 1 file changed, 93 insertions(+), 7 deletions(-) diff --git a/website/translated_docs/es/API/entitySelectionClass.md b/website/translated_docs/es/API/entitySelectionClass.md index 4f580a0d48ee07..64b9afa2f892f6 100644 --- a/website/translated_docs/es/API/entitySelectionClass.md +++ b/website/translated_docs/es/API/entitySelectionClass.md @@ -23,6 +23,7 @@ An entity selection is an object containing one or more reference(s) to [entitie | [](#extract)

        | | [](#first)

        | | [](#getdataclass)

        | +| [](#isalterable)

        | | [](#isordered)

        | | [](#last)

        | | [](#length)

        | @@ -43,6 +44,46 @@ An entity selection is an object containing one or more reference(s) to [entitie + +**Create entity selection** ( *dsTable* : Table { ; *settings* : Object } ) : 4D.EntitySelection + + +| Parameter | Type | | Description | +| --------- | ------------------ |:--:| ------------------------------------------------------------------------------------------- | +| dsTable | Table | -> | Table in the 4D database whose current selection will be used to build the entity selection | +| settings | Object | -> | Build option: context | +| Result | 4D.EntitySelection | <- | Entity selection matching the dataclass related to the given table | + + + +#### Description + +The `Create entity selection` command builds and returns a new, [alterable](ORDA/entities.md#shareable-or-alterable-entity-selections) entity selection related to the dataclass matching the given *dsTable*, according to the current selection of this table. + +If the current selection is sorted, an [ordered](ORDA/dsMapping.md#ordered-or-unordered-entity-selection) entity selection is created (the order of the current selection is kept). If the current selection is unsorted, an unordered entity selection is created. + +If the *dsTable* is not exposed in [`ds`](API/datastoreClass.md#ds), an error is returned. This command cannot be used with a Remote datastore. + +In the optional *settings* parameter, you can pass an object containing the following property: + +| Property | Type | Description | +| -------- | ---- | ----------------------------------------------------------------------------------------------------------------- | +| context | Text | Label for the [optimization context](ORDA/entities.md#clientserver-optimization) applied to the entity selection. | + + +#### Example + +```4d +var $employees : cs.EmployeeSelection +ALL RECORDS([Employee]) +$employees:=Create entity selection([Employee]) +// The $employees entity selection now contains a set of reference +// on all entities related to the Employee dataclass +``` + +#### See also + +[`dataClass.newSelection()`](dataclassClass.md#newselection) ## [*index*] @@ -181,10 +222,10 @@ The resulting object is an entity selection of Employee with duplications remove ## .add()

    History -| Version | Changes | -| ------- | --------------------------------------------- | -| v18 R5 | Only supports non-shareable entity selections | -| v17 | Added | +| Version | Changes | +| ------- | ----------------------------------------- | +| v18 R5 | Only supports alterable entity selections | +| v17 | Added |
    @@ -204,7 +245,7 @@ The resulting object is an entity selection of Employee with duplications remove The `.add()` function adds the specified *entity* to the entity selection and returns the modified entity selection. > This function modifies the original entity selection. -**Warning:** The entity selection must be *non-shareable*, i.e. it has been created for example by [`.newSelection()`](dataclassClass.md#newselection) or `Create entity selection`, otherwise `.add()` will return an error. Shareable entity selections do not accept the addition of entities. For more information, please refer to the [Shareable vs Non-shareable entity selections](ORDA/entities.md#shareable-or-non-shareable-entity-selections) section. +**Warning:** The entity selection must be *alterable*, i.e. it has been created for example by [`.newSelection()`](dataclassClass.md#newselection) or `Create entity selection`, otherwise `.add()` will return an error. Shareable entity selections do not accept the addition of entities. For more information, please refer to the [Shareable or alterable entity selections](ORDA/entities.md#shareable-or-alterable-entity-selections) section. * If the entity selection is ordered, *entity* is added at the end of the selection. If a reference to the same entity already belongs to the entity selection, it is duplicated and a new reference is added. @@ -482,9 +523,9 @@ The `.copy()` function returns > This function does not modify the original entity selection. -By default, if the *option* parameter is omitted, the function returns a new, non-shareable entity selection (even if the function is applied to a shareable entity selection). Pass the `ck shared` constant in the *option* parameter if you want to create a shareable entity selection. +By default, if the *option* parameter is omitted, the function returns a new, alterable entity selection (even if the function is applied to a shareable entity selection). Pass the `ck shared` constant in the *option* parameter if you want to create a shareable entity selection. -> For information on the shareable property of entity selections, please refer to the [Shareable vs Non-shareable entity selections](ORDA/entities.md#shareable-or-non-shareable-entity-selections) section. +> For information on the shareable property of entity selections, please refer to the [Shareable or alterable entity selections](ORDA/entities.md#shareable-or-alterable-entity-selections) section. #### Example @@ -806,6 +847,7 @@ There is, however, a difference between both statements when the selection is em **.getDataClass()** : 4D.DataClass + | Parameter | Type | | Description | | --------- | ------------ |:--:| ------------------------------------------------------ | @@ -842,6 +884,47 @@ The following generic code duplicates all entities of the entity selection: + +## .isAlterable() + +
    History + +| Version | Changes | +| ------- | ------- | +| v18 R5 | Added | + +
    + + +**.isAlterable()** : Boolean + + +| Parameter | Type | | Description | +| --------- | ------- |:--:| ---------------------------------------------------------- | +| Result | Boolean | <- | True if the entity selection is alterable, False otherwise | + + +#### Description + +The `.isAlterable()` function returns True if the entity selection is alterable, and False if the entity selection is not alterable. + +For more information, please refer to [Shareable or alterable entity selections](ORDA/entities.md#shareable-or-alterable-entity-selections). + +#### Example + +You are about to display `Form.products` in a [list box](FormObjects/listbox_overview.md) to allow the user to add new products. You want to make sure it is alterable so that the user can add new products without error: + +```4d +If (Not(Form.products.isAlterable())) + Form.products:=Form.products.copy() +End if +... +Form.products.add(Form.product) +``` + + + + ## .isOrdered() @@ -988,6 +1071,7 @@ Entity selections always have a `.length` property. **.max**( *attributePath* : Text ) : any + | Parameter | Type | | Description | | ------------- | ---- |:--:| ------------------------------------------------ | @@ -1898,6 +1982,7 @@ Returns: "lastName": "Durham" } ] + ``` #### Example 4 @@ -2090,6 +2175,7 @@ Returns: }, { "firstName": "Gary", + "lastName": "Reichert", "directReports": [ { From 14c37f9db6aeed2ab3648675e5049b35730c0b13 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:45:13 +0100 Subject: [PATCH 153/311] New translations classes.md (Spanish) --- website/translated_docs/es/Concepts/classes.md | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/website/translated_docs/es/Concepts/classes.md b/website/translated_docs/es/Concepts/classes.md index cbb21b6b1c8c0d..2bba6eff1a6482 100644 --- a/website/translated_docs/es/Concepts/classes.md +++ b/website/translated_docs/es/Concepts/classes.md @@ -495,7 +495,7 @@ $message:=$square.description() //I have 4 sides which are all equal The `This` keyword returns a reference to the currently processed object. In 4D, it can be used in [different contexts](https://doc.4d.com/4Dv18/4D/18/This.301-4504875.en.html). -In most cases, the value of `This` is determined by how a function is called. It can't be set by assignment during execution, and it may be different each time the function is called. It can't be set by assignment during execution, and it may be different each time the function is called. +In most cases, the value of `This` is determined by how a function is called. It can't be set by assignment during execution, and it may be different each time the function is called. When a formula is called as a member method of an object, its `This` is set to the object the method is called on. For example: @@ -557,13 +557,6 @@ Several commands of the 4D language allows you to handle class features. `OB Class` returns the class of the object passed in parameter. -### OB Instance of - -#### OB Instance of ( object ; class ) -> Boolean - -`OB Instance of` returns `true` if `object` belongs to `class` or to one of its inherited classes, and `false` otherwise.

    - - ### OB Instance of #### OB Instance of ( object ; class ) -> Boolean From 6cdaa4fc5f9103e5f353aa6df8698ba8f5b9846c Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:45:18 +0100 Subject: [PATCH 154/311] New translations building.md (Spanish) --- website/translated_docs/es/Admin/building.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/website/translated_docs/es/Admin/building.md b/website/translated_docs/es/Admin/building.md index 97978617c5bf74..44219b522320e6 100644 --- a/website/translated_docs/es/Admin/building.md +++ b/website/translated_docs/es/Admin/building.md @@ -238,10 +238,6 @@ Used to indicate the current version number for the application generated. You m #### Data linking mode -This option lets you choose the linking mode between the merged application and the local data file. - -#### Data linking mode - This option lets you choose the linking mode between the merged application and the local data file. Two data linking modes are available: * **By application name** (default) - The 4D application automatically opens the most recently opened data file corresponding to the structure file. This allows you to move the application package freely on the disk. This option should generally be used for merged applications, unless you specifically need to duplicate your application. @@ -295,8 +291,6 @@ In some cases, you may want to prevent client applications from being able to ca To force the update, simply exclude the current version number of client applications (X-1 and earlier) in the version number range compatible with the server application. In this case, the update mechanism will not allow non-updated client applications to connect. For example, if the new version of the client-server application is 6, you can stipulate that any client application with a version number lower than 6 will not be allowed to connect. -The [current version number](build-server-application) is set on the Client/Server page of the Build Application dialog box. - The [current version number](#current_version) is set on the Client/Server page of the Build Application dialog box. The intervals of authorized numbers are set in the application project using specific [XML keys](#build-application-settings). @@ -324,8 +318,6 @@ The contents of these folders vary depending on the current platform: > The macOS packages built contain the same items as the Windows subfolders. You can display their contents (**Control+click** on the icon) in order to be able to modify them. -If you checked the “Allow automatic update of client application” option, an additional subfolder called *Upgrade4DClient* is added in the *\Server* folder/package.
  • - If you checked the “Allow automatic update of client application” option, an additional subfolder called *Upgrade4DClient* is added in the *\Server* folder/package. This subfolder contains the client application in macOS and/or Windows format as a compressed file. This file is used during the automatic client application update. From 9c3843676b6ebdb925e29a00eedcc8670821d4e6 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:45:56 +0100 Subject: [PATCH 155/311] New translations MSC_RepairOK.png (German) --- docs/assets/de/MSC/MSC_RepairOK.png | Bin 1231 -> 1125 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/de/MSC/MSC_RepairOK.png b/docs/assets/de/MSC/MSC_RepairOK.png index 13d0696f212fc87115275b87a88f8556a7a3555e..3c4453f9d400bebc15f0fcce5dfbf4e4d5261309 100644 GIT binary patch delta 1090 zcmX@l`IJMkGr-TCmrII^fq{Y7)59eQNIwK(T@EH7dHwh7M-vrI>KTMeTq826E^NKU_OX5N~SQ!|Y?|8a6hE&A8o$i<|>?m^l_sSw6{;vvM8WkTFa0s^E zbFuj@7w|`Ar{~tS97%6Xn~cm?-|X0fUN7M{LA z#$EpV@#pjSw%ga5zc*cY?XAK+Yui_eUurKz=wvPMS3Upvd3m_zI<1JN!`4SspUnK# zIj#P2-4j8bZ5<_R-1I-ZJ*w_?Fk^SQRqLl>?a+dol2xYNJKA5FmQJuem&Vy=_o`q2 zea+6>)_XtHn9N`HPq=_@AZK@9UuF&rR3)QkuO})asIpRd1p2puh6}EeKS^o{DX*~=3>6F}%*T-+?Y%A&RFLu?na+tVhQpF;PC2y_7=8Cp@X;tt( zx&2A~dPVCj9o2ZgZ=Gk}XXw0myIp)g;@Hm71ZVx4I|D))rgr{8{wn=ZXv4RJpi`x(t$%xJ z)~fxF6kpi;o$6baAE5eT@4b~q@2}nKj|i@5{wJ>T`o+P5qPpyo^#990>t7IQYPu?1 z*Pr*TZ`~e?sslPEv-%V@GT0t|4-Blo{B^A&3u~`}#i|a|yD#QC1YF?Qw7BbR?b?^s z%Buex7bHv-v05cy+PWa&=oHIU940`<*E0nni6*jh9D!;#%Z6(B>c6XLU9dn<%W_qP uk%Ti)G*p&#fhO(@g~)D~B+{(@GTRBy_WylUG7wlSFnGH9xvXC#-b6fmUr_ucdy{Ib2qG5gB5bu6PYPak zwbeFKE9hm+B=fQ_lbOk6H)&_<|L}u0nR##K&HHV#8>ML~003bEK>-LD2ns;JKu`bz z27&?*Fc1`gfPtU@1PlZPAYdRUe*ggkK>-LD2ns;JEU}%%-H*=f( z5Y(SVYc*$IoGL-nbSwsOb}fp5tM)cuC z&Bf}Y&3D!)O2m+j;S_NVb671(EO8t6m?X3Nbk8=&l*6}|4099Pxp;7_f<7AWi8D_o zV*S$(ZKdSRQfNb-l^!pOlWgYA)rfG&tQ;^Q@o19pu;dRM{(Q zIR1bBw>H1B{&F6B>u~PL^L$Kk=cuv1=gM9jYcJ+G@)_6XIKKvtP0)v#oEJB~irb?j zaqii)14&hpEF$HF;6tIX>JK`I5{TH zo&xeIDr=I@QO&2#udI<`usS;T>?+zq2iA1ks>a~Xzl{bGq7N*N^Xw%Q}j&-P@kV}qd1e9I=NE+=vAbt*1D zpNj7X=6TK3MXD5BUNaS)NELtlcudTn*goZ}7?}?3XIv+z^uNtfIv-&vde`w0VYvsyknwz1YOSKlW zaXP&UYLoNk+e2|-eJVaq7x}?RiBzHb-d}6Lvapu%IsS1aajX}b%~y?U&8s!IerVM2 zoSG~hmUtE7Ve-)p1o5ku^P5?Y{eF!Z9-hyssa;`j`h^wy-#FgyT)Fr9>wH9)MAow2y zl}}D7=bh0}F4~RFpH@lnvMUZt;48J{awaOD}fC zJx#n)(mlutKp%L22X#rhvNnO70Q7*jpc0#;tD{56e+fVjv=UVEU`t8*ekP+1+1NeVdu=#IGrm6#-joB(vo+=5CtkQ0FJSx8Wcl=S?@H^>P<4=gOG-LD2ns;3q~ae_87GGqQ7(c20000< LMNUMn143Yed!8*J From 8564efb69c9e8b016c7d53f4c523b87f8b28434a Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:46:03 +0100 Subject: [PATCH 156/311] New translations MSC_encrypt1.png (German) --- docs/assets/de/MSC/MSC_encrypt1.png | Bin 5106 -> 3848 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/de/MSC/MSC_encrypt1.png b/docs/assets/de/MSC/MSC_encrypt1.png index bcbd782ae83065b6b0760e58258f9655d2e9b35c..2181fe33d09f03ca21cbf570417bbf6ce5688a5c 100644 GIT binary patch literal 3848 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 Date: Wed, 16 Dec 2020 16:46:04 +0100 Subject: [PATCH 157/311] New translations MSC_encrypt10.png (German) --- docs/assets/de/MSC/MSC_encrypt10.png | Bin 1341 -> 1170 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/de/MSC/MSC_encrypt10.png b/docs/assets/de/MSC/MSC_encrypt10.png index 4aab2e1a54bf05b281a2ffab4287dbedff33d53d..9ab73cab6f6bf714ddef606af7e5c24ea593b1ab 100644 GIT binary patch delta 1135 zcmV-#1d#i^3X%ySiBL{Q4GJ0x0000DNk~Le0002s0000W2m$~A0EDOG0+As!e*hA6 zMObuGZ)S9NVRB^vM{;FlZgXgFbY4{m1poj92}wjjRCr$PmrrXHK@i3BsrDou;z1Nq z@ZdoaRupm*@tk`=@ss2x(Ig^>7$l3Z(Of(!U0v1lm~7_8iqc}#ph~Mze}gKmMh&X88a1fWYSf@gt5Jh0t)^jvZVwLJNKu-g zNrOJ^k1jkPtbY07=896A#tizTKf1d1?SAj*(#xTGRB4K449f0&xOM#a)1QS8zty8k zQ#4>ubSHmqy&Yd)AMWYTQKdF@4Vt_2?)$?ltHaO3+@8zbIZJmLr+(HDfBmIS14*g0 z&Qjk^8{sT+{`*uuuagY=ZfF1Y>*3ek(l_BG?j+EYXY;@+8m2?5?W+c@!znMBnBJfp zJNxr51~=av+*p@AYW`=R%$*jh-9Dyf-gG%9=jG#@KlL>HHwK;PlBYDNd3PFjKIk18 z+uhmtnR|5Ncc+I7>U6v2e=9yM?ul?gc$~2Z9yyYxl9gOciQo`YWP(UM9X8>C9PV^n zhOiyvg_Mv}l9ePB`YJ?Ondp+65yWN1gVM&5oUDfZX2{?4C@r)Io%urY0t)pOD^3s$ zx;@yxxH7!A`74;O;L)kwNrV=Bu^gZpxo$i3myiTqTYh5zGQiLSf2o930|*>GlCL;8 z5v>$z=Ik*T2)RUAc|txOHqnq%2PqGPQYEo?7LPDNnlrA`$PThREQM12Oe}zcsaQaM zgD&=Vuf5uR1Qv829o2NF#WkLE;Ad$M+;E5`*8pIKC=L@sx;sJO@TZ6M;+c>r6qO`T z>L7ehSyq)W=Hn=0f1+WJ)dHeeI!j1U2>A-=o1&D*t@~9o#InT#PyqX6N`Hfj9-Utq z)O4o>8!Pk^>IF^gfk$DdM{JmbRtu?6DGD4IVO^XPkSG)dF)Z5SbIP)+gh3cqZ8RW9 zOTyAwA%CQ}*-5%)HwS%3uxR(^Wfuw%`zoW;yNcqM6pg2F+<@|zLFC1;`1M)I6a z;6u=b#T94p3mnM{khbQhF%w=a_zrKCK@G;EMVHsUt2>ohGJ!!2&$dSDPGy!% zW>7_$F=|ky)u=(0R-*=0T8$c1X*Ft4rNxZLe*tPR?FMo|3UdGe002ovPDHLkV1gI$ B4+a1L delta 1307 zcmV+$1?2jY3B3v-iBL{Q4GJ0x0000DNk~Le000390000S2nGNE0G-Am#*ra3e+1G= zL_t(|UhSFBs~c4m$MaXsN?g>1D5BuPg+)kF=uX6S_W{MfB)d}ES_Bb`^daPFH?9=i zB>JBAMcN8=bIqB|nVfs(oHLWjB&OlJ_(0yh_x!l$-20u$%V@b=CIA4ifIt8MTp$nt z02c@Z0Kf$T0RV7;KmY(-4k8ebf9F@`H~`?d*}Fh|KD$h>+@7ay-2@awEq&Z zn>Y~FMJ^_3R*muDuZz8lKtz5cs+e0{z&`YB=>H}Vhp5Ym3&f^(votAIHluNxYMZ|3 z9{1>1C=d@<;&AQDd3yJof2;J)>Z?H{67*}uZsI^RFY-gcK)^O9kxK)0mqS(wwIWgo{?ybcS=Pqe9KJw90$8wybP2~;ZR<;}~Z~BI{Pxba9<3@gXu8QBx zFZUPuC}Y(JIueym7bgL4H;| zGlvdmk^P7La&X@uZk=7Ew;o)iPt?V)MdEU3aUkN0>=n2H7pta&UmB|q#u~SV?iwmL?3f7m%s4cSIH@SMJ&HL~yO zJARj#!Y}7f@E&^A&HF6;Q9Yx0axC13@;|6R5Rph+yE7kH90=Ss%ZPF?F0!VM zGmZ1f@ceQ;f2+A^pSpRUSL+&mQ1QxKoE*%3DF0!<972I0JdwD0_HY|QtS{;AmslSrSvX2}wXI^AxBcSd@u2C_?db3}KkJh?n zH59qgaaeWksE<~>t~u0mE&UoyAc#mLh7kt% zC(hOaL6Atie*X`M0{|yZFM%MwIKPBA0C3{;76<^q=>vfP0JuOP000il^dI_Lnyq5! R`Vs&D002ovPDHLkV1i{Fe8vC( From cd49b737b8e4aed735615ddcf06a4dc057b4c4a0 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:46:06 +0100 Subject: [PATCH 158/311] New translations MSC_encrypt2.png (German) --- docs/assets/de/MSC/MSC_encrypt2.png | Bin 6691 -> 4750 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/de/MSC/MSC_encrypt2.png b/docs/assets/de/MSC/MSC_encrypt2.png index 1a1162cc78faa86eb14b09f03d5feb1c5aa87f26..659086edf8cdc75f79382b77ab80c3b98166e463 100644 GIT binary patch literal 4750 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 literal 6691 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

    M6sPxcSD+>Le~&-jk5=-WnZg{-O=Kt zJ+Ixlqc(Cjba;W6N>gJjt5lVVks$1UPyHc(G2oMS<06=*A) zg)<(#1<^J~y&_kTCso8J& zo9Av(XCwuKNDx32hdqr|DJ7v{KFV_zark|r(gi-#jo(`x>U$nX24dPK%r@I&qAe4- z?tMnNPZr=bvk=dNTs}b7bgSz4(GNkz*x1)9UA1chkEx?E&pG;@CeNuOZ{7~2gwWD1 z@;yn4i%1dD)cjl@6 zs2G6{b>YAfhXNYcAH$3l-YWPXVnBC(_qEY7;&v_@_*GRmLkwSR*+_~uAH`QRpsN-y zKHA zfolLxMvi71B)gJwFVaMl`&ER9CdU8zlxOoI?SbB#TSy9% znMYEjZqfz_33WsRoD*(WhM$%4<|nzJ0ey~Pfmn7V6n1-vLW6=2iUtsR3D-w09g_p1 zv901aoSRJwizlNchA(sWpxKkwNpF>SyjeZ-1c+#bx>r%iEehHD`~TP3ONPl{)d*)_7(# zvliPG`ki=eXa`7f$5FTq02tLga+p&L&tL|3{JekNx$Rk^RRt50f-j=ZgrSwzPX|V> zY#pw~iW|7`7F*}L5kfPo{w_RP;+?Jvg80+bOZ^$O7~LnQO6G;B?W(rEOgsfPx=oaZ zb7+3QRQm~+d%IG3-P-UFX+=Z%fmZez7AKtpq-;3bS&tM8Q_Xc04?#)TSoME06CosA zv3CzH=^0DarVq4bchJN=k(u!uu`T>4qzX;8EF50Cwh*my3k#BTmFI*75)nUt{w+T*10I@UH(+bO-VwS#e9 zbuR1#4U>=cc!`)6-?Ce0f|%~-Y2IG+2D5odM<%{L9tgh;WR{Wl_%TGXmf>w=kXS%7 z>m--Yed)FXYOo7WbkWJjd+RrSV2O1c=(qL2Ts6;4=I`AG*;sS&qq zP&pG)Qu?;;`MHg&hV;?ttDV42)3@gAIkrOA%h{SfDr7Bt%yQUIwQQ!-Mj1W}n710x z*|aKdL?2j~rS+9?8fZ;_p!NHwP+#O1hKmu=cQ(U*@lVvxB%A%73G`8Rz54x5-hHe` zd!%IdxT7F)MX#pj=8ht z9-ajJ(LMhp*!|QC<9ELHDDr3fBydhx*c=3@fZHCt{d)K+)e^LB1MS+;yZ*=P3pOEZ z=TRQX3-eubY9-AoMBy`hmoLl6<_=h$k$PL;>IJ{^m;kNGOOIquy7fI8d;ZZ=MK&xH zifie+o>n-st9}TRX3V0~c^n$!LQ4Byq3}kEL1FkNumlD4s5)7@T zI%x4=NgFxndW<`cV#zD`R=7HpE>)^9=&g%Ly`2n(<*7^B_F}T6I;rt(nA0}OBPLL- zo*}b^+cEZ!2f_@{^nCfgq>iE5#cAbCPfC)UhT2*lw(jKT82((>!%Nl|ffzcs@k$E* z?DFxsTP~?_UyzKQsBjFc^TI{e1)ZQ~=CYFH)Gt74njzl%KP7ih>Mx4TjmyC|ww7bV z_9(Wa@Bg%t07YsEAgjD^I#sSiLN9lh3{`g3^*BF; Date: Wed, 16 Dec 2020 16:46:09 +0100 Subject: [PATCH 159/311] New translations MSC_encrypt4.png (German) --- docs/assets/de/MSC/MSC_encrypt4.png | Bin 8416 -> 6236 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/de/MSC/MSC_encrypt4.png b/docs/assets/de/MSC/MSC_encrypt4.png index 39d9afe1d10e6223288b4fa5b1126e5d6e78f889..a215c22162f4a8cb38ad2b85a34fcb0b853d4e35 100644 GIT binary patch literal 6236 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 YB39V_zikhp_Xhxg($v=|2Jb!jFP?e+y#N3J literal 8416 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 From 39560a2b994c5750d8e1517877d13ca2ca765f43 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:46:10 +0100 Subject: [PATCH 160/311] New translations MSC_encrypt5.png (German) --- docs/assets/de/MSC/MSC_encrypt5.png | Bin 885 -> 717 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/de/MSC/MSC_encrypt5.png b/docs/assets/de/MSC/MSC_encrypt5.png index 55ead066ab71609abfb4bea9ca54738aa72c5757..a2f1b974180020cb46ad820b64f76bb1631cfb37 100644 GIT binary patch delta 678 zcmV;X0$Kg_2F(Q_iBL{Q4GJ0x0000DNk~Le0002?0000O2m$~A07gESZIK}~e*hA6 zMObuGZ)S9NVRB^vM{;FlZgXgFbY4{m1poj7L`g(JRCr$Pmy2z~FbqUHS|{oZ8KOgY zg94c$Gh~L0P*FdgB-)Y@2e5^E5DJRsM;0$Z`t>4YYAA6sIg~h=97>!_4kb<|hY}}~ zQ%U@>+%muSXY?L{t9)$15A(eLf9^Z*n=g2^`?(IS#N$Qp9&v~3j&Shgl=w+mmH5$@ ze%%ocp8U-hyzc#+ogs-kE3!QNBl(I4N452dkLXL~R-Mb@e3IAeVmJ~bk=7yWH^uV= zrylCI++782j0FVP7p-JtWYs5359+eyU3UFYfidXNnyu`UinR(j#msYUf0~HX>XQB5 zEVBBM?b|?%+RlJXb%HN70yAL8i)CarG1&u8$RTX}y9pCix4(Y>4Wxspw&j%ErXH%= zMWpN^-f4AFP+#3h@nC|Zd!99Cs8fB&94X8=XOm^e)D>HP{=T`kSG*};MSA&p8D+3DnnN?d~#Q)Q#uCj8r(b?+)d?7+si(@FV3CfOT zvCgA*3{16Ui`^rTYjpQ6%&KEjI+SUt#>v&LcvCIT4gNnH)--Ob#VZCWjIylS7GHr0n$zpNV5~|mH+?% M07*qoM6N<$f(9Hrx&QzG delta 848 zcmV-W1F!te1@#6YiBL{Q4GJ0x0000DNk~Le0003K0000I2nGNE0C<8rsgWTxe*+3h zL_t(|UhSCc)ubQ{hPT?S!y^2%9asZ3Sc5f82Q1;DNsI`N$C>^1{qdYRk_(v-0{ZLq zdU*fTKeDwe^IZee3( zoEOpJ-MC$|(^$POAf(TV|;+! z7JFT2QLITWHu()u+f|=Wbl13wyy$HC zjISj}{>1;X@=QpZgK9qe?Ccst|RbOXDFBl+WhgAb$EvlzyP7q!w zwbz_lq4nD6=N2E@euIiv+iqjpj&GnqJYkRKIEsstbc(;Uk+{E>+%(E4R`V5Q<2)BE z9PwhH+UAkCgulNIx!;aRnsb>P4E2F3dDlazE5l}_*g&skxX2( z^MTX{C ztYsZ>5G^@mSj7#VMXyQqH3$5U)EX54$Do-21)2%C2AT;_CZL&sYoM6`0B!-z1ORXY aFaH Date: Wed, 16 Dec 2020 16:46:12 +0100 Subject: [PATCH 161/311] New translations MSC_encrypt6.png (German) --- docs/assets/de/MSC/MSC_encrypt6.png | Bin 10936 -> 7492 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/de/MSC/MSC_encrypt6.png b/docs/assets/de/MSC/MSC_encrypt6.png index 47eebe0a570f18669d0cafc3f4c224031ca25777..2a83cdd65c7fba4c46ae3dc0e7cb8954ab19db82 100644 GIT binary patch literal 7492 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 Rz(-C#Gq9ymnSpD}e*ocYyQ%;H literal 10936 zcmd^lc|4Ts`~OI#EKQ4$wR2h|dxRK98&QlXvL}ZjYxZ?U3U#tnwvZ+JKG_Cit5KZD z&I|^VBg+_rFoPL0e$SN7=X^iQ>-YWV`~BzphhaR=bKlo}-Pd*9@Avh7o*EhI@^K4u zgFqlYy=zyDL7-hQ5QxKW-(KK9&QA?%fL|Qm#=4h4<=vtr;LC3KMT3hVP(>WimfarU z`+m=B=H4LCfmZepN4rPiZy?ZF1HCI3Zw1&;#wqdqA353|u!p*_suK(S7OA&!_H(sdGh2;_#Dp%9~!=)i9jGIX*8)0jPVkS z=!29S>ptrXU6d_%M|bz}S|Y*)nBItQaz6-koa2A^^P>Hvb7zvQ<5XMBOn#dCF5x%K z>kM<(ZB9^@RLtXok9nuOiJ|K$0|l_O&SZJcm|j*M^9IAx6}lUgwI8@4B4UsC%;#g? zr2bRhlh{33helhfGo6voC{ZAg@|zdSx!2FCD;?DM!r|MG$Y;u;C3b;&AGcu#;-D<2 z?o23HS)XwXSmN^|ll#kb0(ODE>I7UWIg|kc)gQ{}z5iGer0xD#vRasZi)GHFlVnL!e(giS;N&nU5OMhbgMVX zxxV`}iA)+Opt$UjNc=PagKFZMn~P(+^`#n}A>1$vvy1w^)hrQ@M!TMCQV?hJzx+|Z zTaptVy;yHh%6#e+jDjzIe#;MQ^;de~O5E-TQtQS(B9c!g3Ai zs{yIsm#Gt={}mg5>6!Z)&P6b~0~;^*roM8#!9Pu7v98t1yX$=3EnVO7pl#+7l42Hd zeq4|`5xg{V7kI|~H@px(dXT8G)OZg1=Jg@IpR z=w@FmipD*FXI@cFCF^*mJM@pp3ufHP56kn+Q?lp21B5PUe&|jB#)tH>Y2opUC<%m` zaBO)CE695`-QOZetR%w7dYoIRj1I}zb#@sTQWHr7{L=v??17(5}Q`Obg$}({`Q|33w zg?u%6UNxvFTMQ-@@1m*`qr1uyYA9@)bRPMPvV`LTX9UcCrQ)6^URA1f@0KaQ(xLBc z2{-pRpSm#M(J+HZnr#ZbHzCtL&zne1Cu`bXg(^{C_2`lVvfHdIe!!OQt-0pYcyWIDc%pUuwB<7JxoP3Sobe3e?=BLH~YVPZA+W~P?`vCO?Y7SR8f#>-hO9G<^Gt8 z$mzy+gK4%_v<}Gxs#sFltB>`*j?MUqm5}s{O>Gp^Nq=O?gYyVvx%lIP-RdPdB5g-A z*0xS*>WxK6CQ4P;;e&33b(}}(f;Tv>UF@v65Hn9F7t5OEN4d^BPYK8Iz~%|au!2hh zlg_fghZII|^%T~u*u6RzE3G(_twk1kM%0NR=^0AX@vVuqv~{aL zr)g(3sRtgv72wr*G{cH02dS?tC*2BIK`;gz5u9Q+*a~=VwP9VU89q|3b}RyQk?}02 zQ~Mjyk&Bw7>sGj(__6+vAotIErj`TkQ!TATOI6KP6eskjgj6@R0x2U}TvO?panS^n zU^(7I1!qS%N;ae0@F!B&`DzhJiDT8|CU`utWZ73u!bKHb3ZD;F%wGEB+4MGc^l8(2 zAFVyPVBz}e>ZpICUwEc`C%80m^lX5K#W&`$#te)^HaC!#3Cp>R*fk4qOLRnL@z!!4 zddv%JQrl|M=w4@|K-3UggC4ADT<0KRA2%hpL7%HV3R(o6tDAM)c%zQC8Bq&is*L-s zaT>i3nhcPR$+_klG8rtqW~(ld5EFCWw4fA`xD*k6AUa2JJ(-XA?9Ign`z7+b5}YezBPY=w%JPBr;gEnF{eQDoHx>HLDaXZfBU>bA+6 z^BrOy95|S9_%kFp#>GI(F;EXn{=R610j!;8xL(dcpt;Q&ihLdTdc-0&|rTH$j>`;2>sj7*YRl%jeD54 z12WsTgQQ$_xu{=4C0y)B@3i7eHf&_%gF5L`^R?40wE1K-xkZl9_M$>TvEl~h_OaF{ z*0q9JW9q4ynf}S~Sl`Z3TS_y3FQT8vYn9u(b(-WBGm(Z4L3Xq~y7k?r%K^n^4XyFW zRL!k}WMtOpImSikS&50`l}pKUWq>x4CWpi%s2 zRvMbA4&VSKFl0Hbo{F<<-vv7&ARypsJ3l~0Aulx|w-Mg+gHjr(Z=@IdEf(i}^nzQD zfU?T=!H!CW)J5IXq7B>6r29`)tYT(A4c&Y)^49LM@|?0>CTRrvkW*>~mNljZpfQkgLB;Y~D;PS=8DJ)Q!Rv$TIA*9Br+Foqwot*L58Lqb z#VQP}@zZA8-Y{PK*f(UX=PJ&d!`v6FbC}U=eD`!YK^vSlcuX|n$oTbYTf-_XwYz|X-v@Ky zVITJ*lTtTD0OTSy|1v!TVaNs}HtZwjLxT=*UStirFsIY8@zOl4H#(|QeMMCdj1QJ0 z?}g0u{=zs8i;y(Ko!{9>;Rw6a4i;VNhORfPb$=l2;+sN_#;2Ky)*ZH^&fJV=F-7DZ z484D?=b`Tj+GJ}KWedPS_NJz$k<)gsoP)R--c!r%h2NZCmzTQyyx9jCzbM(S31eM8 zXB{Zy_+$UqdY-LQ2yogG5gKwW|L^Vz^iqu`KTPqRP|)gR@BKFb|BWu^Dtfi5fk4#z zGLX=1=DLcjPYgD`Tb)$HiW;L)2vH6{r|-2LC3&UWkRNap&~740zA-cRPOnZ+Q8p$^1?olLOjlaY`_o)hF%c8|cietn zIAg8!P03SMr2#>lN7cYMb6!IwzkG*coKg!|&KhY7u4T5rOT|OShw?O9VlPE^@0zZA zT%a|WEb)46d%-4{a-N~Kr>nhf_-7LB#d6|W+ErFu9GOW z#MtuWN8#yhtNqvIM-=bNH26`@!L&AW#WLHDS)wREeQc$DGoU|aiu;U3zGP4Xs<;3d zb-0|sA9Hoh0(Jy%@^O5a|CNuaK0JrD*@HAJCG6SRb~bD+;n9;*CPl|VQC>p>4$bZ2 z!Jqe*PER{nqTxN_!Kbe$5Al0h4c{CAn2)PXDE0Pr_{-`WR*Y=Pv=YA1p}Z@y!2q?P zOsfOf+@;R_N7kJe$dI#XbZWhXuj|c4O{PeukAIuJT^_WE{46zm22yn6p>8sL?F@&e zg*N=j+HD7RK}sIGGI_1@3dbK!rpv}6^y24v4%|*b(cu6_PjOMTs=fXf2xccomAd+B z&a9M_P|@cI$*z*vj@tlNFw=!+^FQa0whAx~_4m_XKSRo2IyKIE31;x8R$EOM&qhg(JCz^L5vf1g2n?0deT7t- zIOCgCtRG;kU~FjtyQuFV2YD(tT?AF#DF*+BVIHxFVV9e-J^=ang`NKQbXDYE7%kws zX2zlh!}D5}-e?bdgI^2phw*d8omM`ak(8A5 z8Hm@ePw|qJ6ppO@|3t7)rm479!gu@V?QsgH$y4AJOfV=cUs(XCkRZ$xz)aBdu>X^v zSryCG4xIv352kdy2Mkm>zPB!9(AylK-UJ=&z@Pmu>zA4tp8-nSHQkx~P{(QeZygHY z1}rxGg7-{xJ;2}UJtued?xWa__Efigq+JGzNbj|P{!>TOk3A7v4pVoA4zL6WU=EPe zCHqMdK|G8E1k3iy==A7T*uK%h3@oxf3IHNmVgG>2$b~OI2B~o^? zz%czByPzOhtC?LMh*c49f?I70m5e8#Qt@7iB{r_il082X#W`kkV=AueGFbDs@`goq zfF0v+C4Vl+MBLwwBLJSJn02|-137IAqZBsXfm-J>O94{) zQKq|0X|n)vZTl{?~sF&F49?qEi_!k+YoMU0CK$Ze$Z<7>4C*jp*LU{oe`XkzGa z)~FZ|BYnDtkyj2Qt#86ug=8#d9-8=*b-WL+{BHRfncxPSwknk+)?^mAs!xzX-Y`iyb(+_Q#31=sg9TTnBiwdtKvk>zoOr zaa6*oGBAwp`8rK?)%$$tuuiAhdqe>E0QaNKj}EBDbI54lIR8e?;QfP<)o*Rag+qu{ z<~#%=mB_cQK1G%-K7)e1jsX()86*43W`Ylwmu%WRNu_s=+^1VzUvcA_BynHxTNobh znjGj>1Ns=-O7e}%;Um?~@%7)@M85kNS|o-H`-Z)Gc{afskug8EczVE>tqp&6Bd;sWY`8d;NZ} z*MyCLFBy#FT$ejVo4cVCGO|`-IvzVeHD^Ag0=DU?T)LA}rP1nuFe*Nx z_qoN^q^(To&_B_t6m8&J!7oQmjfleA2*brFCPl~=S7J%iG6?ku(#N5;F5FUyoK(RC zhWh#j=V!QCiUHf0l~zAKeV$n}R-M-B8>#23>OST)5wdE)xO*dXs4=NzEORh}Aq}DC zuCqAVL6i?S`>-grosgMq*&!1J; zq&V4h-WE5!kEgz2ZBa3~U6WFcx8P9aC<)priG%iUq>b~zCodmYadK%wE_%<;5Dw^xwimj?NQ`6M$q7Z2>`-{! zXW8`w_v|MXRnS@KSW2;HmROp6kl1HIni;jJY&gzEQrXErKa+1rYAfR;`ly)8@-uT+ zC@;QbP3tPo+tG%YmRS_@w)Dc|0%`4Si;sImG*Ql@K2tHOqZsw6ueCXWvSxv5Mb`Kz z`YN9Mk`^h+e9k4oYx>^9niVnXsMW=e+xrJt$Q!mMn5RQVOnX;0?jdXd5M z*qmxfjFaaf(2&nEeKqoZdg*mnTGgQFA; zj+g<~sX`=3TG(=U_7A6qEoM7P$*pnGcSI%bWGFQ1cY1Uec#vLoleYSL)Krc3Mf2HW z)HiAev0%8dB_xT;+{{*S9A7724Z!SL>j|}f+jpe3z@TUy;%wYd4yFo<=n7V!hmiVV z3zvHlo~9R?+@K0{cu9wc(2|~}wfih{+RpL?y-&+pgbCJY7(;jhF>_4UnQ+(~{>Ks_ z_~het7GDqTV-nx!BJsWc(oGku_S?M5`UbgseN<*a)^NKnD&BcJB=6gr^L>A)#&z7?lxt`#c<|ZGnK{{V>RZ} z42a@ViZkeWr_s0o_clyqiuX z=K#5m%Lu%5U3qdK`N2R{&XTdpQfKmx8SF1I{>@ z(JO;J5~c^l=$GV{t!ahfTTBVRB9nj~6IW4d?SM;F0Qv)PV|f^GQNH!=YKJt6_fNwn zlMTFI#RDI<=mS7l5_bS=b2jR|{!HmQn$tuU~G`&Hj<#Z{EoA)!e{6Bmx@=>DQexFVFKD z(&M*y1m%X2_1Th9WR6!svGL-%Us%Q6ea8w)PO0tx;fNv*-`xcOi|&We=W=EMSw(_J z_o|O~-Qoi}-~-9F0f!yZlR9+hwPCut1JGD$!`?hJKAYQqsF3I>W5&5NWlZWmL%QTU ze`08@H5%x}GGGWKlWd#DB@xogvj0*-I&96$o)gfT^pc;K3jmsm(w+i%MxbMz;kEaq z7}bdC-Ph4nP04!+pv91ioH@zPUq4oOOIN9{gStcYlZ3 zDHX38TbG93V(ScS1Vsn7t?R`JUG+{dw4|wB3a3@vhxjguT?t5iA%Q5qfneSVe)ZRA z2%)oS_u#MZQS4N9R)1{MuF&Z$=9ZufxaxZ!;{>GZ5AfxRr@^mRegus&L`*BBu4+qx zKW%Gem|n=WgYR?@YQGyG0$oD~AN_!m$|solm`zIl?GBU4@NE*JXg7>5Xveys5|97o2FYi=U;Hsnd%2&N$N6-(t zG)lb3_yq(qa5@S3ly8u>aE!y+m?JgoZz5;}&@>2>`xQt!&`Gv8{_lM{$w1iX+jXq2 zZ_H=FK>I{B(i!@Uf&}_}c`uf$>#BbPc0bO^iK@eNAD_p?>#O^mf_zB7O=X4aj3JTEghNEm; zQaWx)q8DYhD04sitl@Xg=ut=DnJG%}?%{PQobEN>8pF~u{t9%%-=;7Q0V;Yc+9%Q( zUv53~o=Za6f9ye2J&R86;!_>FyNDsnH7o!ViDkT?&!l;LE;1>|b~Bx(Q+_rXfoY2L zC);bP{FiLJ8I;;Im-71jgiAw<;|)<{lCe!G<*b#6_4k?rsGtXVPTk&kPkJhu@nmn_ zxj4wm6HP`g6|TuSO<(#xB0F{St|u=zNJhI7(6Yj@KA#qWqoR6E-E?*`N+K2=STpdm z2z7h~%AW$Dx{lvDj@g_^>v|^N?9{xq(rKsJggckG={sG6w-IqU!mdULK!dC3v~yT9 z^Rj@&iTB2QK^(NOu&DIKYKbNm#kRyQKJ4+GA zZEm&S*6a9Pw z=dHGKYi~0-=~^p2Dh`Z4yYP?@Dwep(H95%XmD_x26cbnlF_o_tIIvZ6?D7bv9_=RE z7zIiN1bFpenkzf7fX0K{$hWEXE?k*q7trXWe9qs1k@RssD6 z(-!4g_ok!{qX|bT2Vm+9MYY~hC8KAK4tHiG9zWu&4(2_nPR^ZH=UH3L+zt`)WGzQQhaD#A+(vR+xxMP;ZkpEyWWntwZ62uW z7GfD~yW$V@UgcWL#%p%2zTosSYMO# z6kJ@Koy?gLhoe{vyM|K$B!4C^O+>#$SZRPP*wMs$5@?kk9v$~5Y6^Jfp3%`+Y zBcT7Gvf74)Np}MOUM}0O$0;aPT%<&C_+OB|Ov0mcZ|4NVzUOrrX1p>e)Sme<>9%m| z8Uj>(WU}ZqW>zXh^x@#4tlzOmEJQPWX5b6rlHcUZj*2~|28}i;RXjoq?%ry4+xLVz zHSjtOHb=ohM}u5z$oKEAm z2Iw_a`Z}g#RXW>99hk`PcyvdPVt8Us3g~}GjIwJpFxXT0wyE*~rn3AmoW(Afe|EGg zOu-Cx7rrg~esKp$4V~dtn!M#7#!Yzo54q$#ck2z;v)o4A%ylBP@IojzKIR`6_uory zWzUrFlq!%_Y&aR@Fy-U$qcpS2K+u{KPzHeIDSS>aaNsDOKh@~@!;c0$ybXUDYrQj$oM^HkTPaGJBT@acv=Bi(y)2gty9{h3<-Sg zu7qIgpR(Ht$j*{`%_+*V+C?y^_5}y~g})trY^z?Y=U0NLz|lF3Xa(K=`K-$i^=Rgg z7bnsWf8WF~6Z|dyti`5vn^gc=6Pl0acCf=i=jZ!oQagS!NH@_BJ1b)UPyQJm)V$4S z^iR|Kx4~N@`Hs9lEeO>X)9`b>7tQkX`AJfA(o{WS_oi8GfqZNJ2DdkgSAe&=M%?1| zq*6ieBkH~SJ-WL+?+=Xpi_2617@0Tz*#kxRQ|(i8HjabKp&9(Z%yvK z`At^s!Jm(tT!o~)?-2(6!6|{{&6Q>U=jV78M*RX66w_a^@q1>{b&p3RUSmG ze}$aY)xW8DOt>0mK%9GcK?eWy)}kc4PpWw$>-t&kBY(rP6@U{#y;p%1fx>qG4}W$v dpWo*CO&jtxDruJ!Ak~2Mt{Pq`zjQbJ{{fm0>jwY; From 322b580119e60853b5e5374c596d6ed301152781 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:46:15 +0100 Subject: [PATCH 162/311] New translations MSC_encrypt8.png (German) --- docs/assets/de/MSC/MSC_encrypt8.png | Bin 1489 -> 1366 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/de/MSC/MSC_encrypt8.png b/docs/assets/de/MSC/MSC_encrypt8.png index a61e238eacd67ac05e264672a8ee282375f26627..bb665844fc0668d929ddfbcdb307da87db49070e 100644 GIT binary patch delta 1333 zcmV-51E3txQMcaiUtAo18s?UofA62M^yl@X zd#c3xT(3gW39Ha#y}5OHJYC4U*fgG>{Zw4S5k3ebO!a1S=f=z7m#xNcoGy+cw2zMG z(ns6^iH^P_n5qH3n6}aU>?igT#{3Krl})v>xij-@aP8IZ)#b9U9(Q$=g$A-$J>kc; zk@mVQKUx*0YGCxm_}NeDe5bApD2sX8;VgB)llQ=y`S?lyQ8%0&f2;6o{4Q{9fp02r zAdVU2O2?yYs*i)6a|^@UtG~Qq5?>wJQG}n%O~3(aoQH|t8y%Ec-9eA4pq36*s<3NN z2?7gID5!f}etu418FieN6y-vpXepQ-*XpULdJf4-RmdYH>7;n7mGo1T_CdD@%Cw5g zm3rV9=Y_JNii0CAe-!pC3gry`Mf_~xl=+##uNODkluaD}T~ayaf*0TvbYE783-0mu|P5&(ZKq=mb})*n4>(u1V@` z3A~}SeAj;AX^Nzk4ar3DV^pUk9fDz3Hv1;P*^Y7#tVkL@A<|{i!w ztQ=V+RpC1Hz*{V%*X~TzfGV79kHrX686K{ZuilG`fArrG9c570E%5w=i_1JVLO(+7 zU~1e1Rls7CT}c0i4N;R(P9Ru_?~>B&ZkF!?hPWrSVe#)tn91Odfp zDnrp%e@Ax|m`3Q6s||20#46g=|B$gvWk`GlM}cnq4^N$RQyIip8;5Wd=!E<$)#+cT z?i5r`zNrkxR~MGP!BGIT(9KkaCmY*v6aX!BHWdJ%9heG$%D_|rR0gI3pfWHO0F{BM r0H_R11wdtBDgY`2Qvpzwy}iF!G_~o}&mH>!3jhEBNkvXXu0mjfQks6j delta 1457 zcmV;i1y1_b3egK8iBL{Q4GJ0x0000DNk~Le0003Z0000Z2nGNE05FvYr;#Bve+6bq zL_t(|UhSFBiyTE1$LFu=lX!>+QAELm2ZJy{AvY1vxeqA*C36cgi9rxCNETsMbMd6$ zWkz>3JCa0*m$Is-Ud^l5ud1tm%(U749zHNrUH#s-UcLJE^zLlC-5LM@m=YKf0AO-p zL;!%vfe`@!CI?0Y0GJ#Y5ddIve_%uafXRUo0RSdv5+i!NzEH;j09TWv8`0;hbMwmW zwYm4pU+Q%Lz}4fZM)a9Ap*QdUZazGDZeF{)ff)e+YK~?^WI`XGzA&Hu^sl-3!#^-1 z06@)Aj7XXg@!q#v^Y&L8^XG+r9{}KLaBw3^na~H{KQ(XM+nAp>xj$Slf6aV0Gc!T8 zSncO5=gqNJ3gTW;R*R}$>wKwSKNicmuY0vHE9H8i*Zvkz5_h#QmD4z1>er_xr|(d8 z(-VZVsPw>ciZJ|AP^chN3+? z)PX9Adx?x_zwaxvsO&wnf4N!8d-@`4+2ee4GNOmpgsy$LHt&9OVcxN?R5>$p{~a4< zLXM_kY`0X%$}CoVZWo5drKdTJs2`m)9Lk7Fz%QaQM6N#Pqu7YtFCk|_ADuj}4dwd7 zzmsM({Fe}+8HQ+NS#a7MLfpHfAZ{W~c%>ky2~v5zzFAf6uPd5%e{snK$rNcbnO?Ep ztY-hzqdA<=Bm;G4V<>tSQVZ3O@_E93Cf3Wzt-Wo1slKVlX)Id<A!OK6O) z^Yx0gM{7}YwXcuYSN4M(Pu4)_isyB!Py9gg^wF288=t4;Q#F*3<`ZEs!HmwwHX(;!yx4%Yf;XVz1q$N2vCt?xl7-IYf2C_)1LdGt0lBf&+|1pR z)@iI`_{Q+@w5HM;R%+F1*Px5;Tnt4Ik42gq^-MH*b}d@2g7vw$$+dAEEM8+?)KB7X zFdgedS{#(8m%h|z7SGi!myeHS*CFB`)QB88GrD$XJ+cWoG{ew0+7%(WVGY{jQZegT zErrhJr497Wf0CZ-^IJ^|7vIj`&9#Q)zLQp=h2o_SWA5;dp*tHxGY3ng*?w;{Ek#o9 z`&mFIBXXq7=;q1Okxj_aGz?l~CCdAVo&WeV%TH0~BzscTVbT%T#tw-LBe%zam zWVi`Ae|#Y##Jj6(j!>|~{F?H(j$L!{LbCg*2~v4Q6J$3f&0jew@DZwUn&AZG9n+m{*U}n0C;4jvBTvr5Y5?@m~3P zN{m*0k=At2X!%MtBx@34sG6Ua4V1mxjSc Date: Wed, 16 Dec 2020 16:46:34 +0100 Subject: [PATCH 163/311] New translations MSC_encrypt7.png (German) --- docs/assets/de/MSC/MSC_encrypt7.png | Bin 8522 -> 5046 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/de/MSC/MSC_encrypt7.png b/docs/assets/de/MSC/MSC_encrypt7.png index ee07b87cc8cb2f660200b63e8ec92e8485ffa1a8..3b30e573abd2530774b9b5ce804fa8016f1ce1a7 100644 GIT binary patch literal 5046 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 DSZ!Xv literal 8522 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%0A6xuobD&5J zo73u>N(06JRuimu+BJ9oCG9a{?fiQ%U1Gb+KBQUci&7Ab|STf`z4Z3LSzF--aYJq6(D%+of1yU4!yR(Oj`P?e6dX#g~P)P0% zoV+r+va{9w8A=LS;P!hq2y5BlYUbB&-C5MuLqszrKuGHL??CYE2QM0||I&E2mt_oz zV}-5Mh7kkQTiWh5hlbV~^Pt7bgjT0wA*vs>QK=%7znSpMU3&?mxmQrlEd8_#ln{RyoGz>bVVvq4&;9m^7`E>8>YF9JaDd=(feZ>WV@EQtvEYjYlzB%Ic zRfJxzIQVF4c&GPP!b$|2%5TpR(=YVN2mGTsdZJD0fE8DZ=jy$3jWfNl;OL<2q{$3D zr<9znrk!{|EnJrM8cQW<9ZIiu`7p_g(s=3lciG#n%>XTwp%Z9SC&7i0oPPReuQH}x z7A-j7Z)O<`7eb`oQ@wKmE@HyY>8ErSXq1!;LY+es0qsLzAamap5pu~$hk7=Mzt@oy z&9?^{Zbn(HfMKTTsb$E0`$UD=s((gl=xHoZvs#;BpfI$Vo}XwtUlXk?l8ISN#{nvuK^?nWg(h; zN+5K=|Nd<~n;kHmxFY_?NIS{Y#Kf04Y2mO72MFa%4M2|k)8&1MTo^v!>-vMS6UK-Q XXGQF%e;NUU45XuBs9ve&`0C#PY6gpb From afdf18c05aeb53c03ea7dd6c4ea854250f0f125c Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:46:36 +0100 Subject: [PATCH 164/311] New translations MSC_encrypt9.png (German) --- docs/assets/de/MSC/MSC_encrypt9.png | Bin 8416 -> 6236 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/de/MSC/MSC_encrypt9.png b/docs/assets/de/MSC/MSC_encrypt9.png index 39d9afe1d10e6223288b4fa5b1126e5d6e78f889..a215c22162f4a8cb38ad2b85a34fcb0b853d4e35 100644 GIT binary patch literal 6236 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 YB39V_zikhp_Xhxg($v=|2Jb!jFP?e+y#N3J literal 8416 zcmeHsXH-*Nw{Cb*5D8$TBN0L5l~98;fgp-V6A-0J2}tO@mjnw%je;ly0@4vsdJ8=W zNRi%KC@RtkNDGiq&W_*roqNU|# z?gz%kyW3r>I{xnPqU|p}qoYN6_BGQ5g-bZS7eAt$J!+({`2nn$+w5Ua{5JHa$ z1-FXg$ZhbW{>duOW`YqqZqWH--qG$%=!{$5Mc0*zWqtEP*Oq{-d0i?GpgU4qEMm^T zftqY;X^BT#+u617DF+SJ9Z^>1yKu1iU*F!(k2V}tbno`uSWf`NNvx>2UW?lMjqqOV z6QELlwqWMv8us5@7nHtKRJZv`A()&mc1)Z(8i9(5nR;)|C%Gq{zj`lW)H1jmAAGRq znUt*o$IA2ok!T#2QD=!xZFnLg}D+>k&ZHu}Hb24we2@}@xj!@f+ zP_KOZA?D1QpDz337czqxqXb0%am}z`^X3Blc$|j=$J;$7qFaf*@Z60ZVM6nu^x+6~ zht}Jb&&VXAJz*<(J)sQ}I+-y#ks~u_U@1p^hM)t195^d@Ik->a=)`h;ky%~Ei{#hZ zgNd;uVr7y9YDxQ}Nc3inmwWvV_Rxyqn^;pEw`auMbbYX_E`tWi5vBbe+_^c}i>r?8 z#SPz`xTDcVu$y7*mx&~$<_v}p`wnKAOx%v!nmoa?V_N6c>^lTwrVnJ82S0bg0OY3yCAre9R|OW`SVM$>eLX@L^!=YUx_?sOE!Ajw_?H{ z_hxupXk?{HQr6D{!j%ObY>>nn%spebJR_Elz!@Chv3;8E^7X0X=k*&mYVU93EFjr- zCU+2m1c@}o0vNQW;(X%UqR_(?^2j^4xvG$$0+bf>7PT@m@h&OiqrFxJCxiR<-jCf+ zu5soIwwMWB{V2=+NgAIpZEL#+>AL11J_u4I&&T8|!F`Kw;0nW+*FeD*7 za*OkIX%KbCBr|h6Wqf0;(!2>z*)Ln_w`Bo8z=sYbG;<4>Pd7MVTVO&XrL&N$*v|`t zBczWKqM;wF7#B+NA>MP5AB${>4|~dV4eOhy%`?9yzjZA;@P4PzeXv;seM7Ce? zimia$m=D)E@=3ih?P9@%&OfuxKr`&fA?W7`rhoUqZis);l86w#9(%&3VKexBhg`s4ZR_7{Z$gh9wFZ$QzN z&^|%O%ao^jDpizAIn)8}caQiR?gifz*-s-fyL*&Gt@0YVA2+?LzBK19Dz?r$6ocI$ zYKrgav5A|+MO8Fdv3mbhzei>YuqeX{M}m|)2#tP|~!&Sk=5NpSDZ zSCml!=^E-xsJretf0Zai>U)D_{07BWgKGrcFU5(Lg_Z152x^e|j`?Y;*|tPd*@2&# z+d(hf<&jeo!V}}RV}@}}M)c#&eey=ld{#JSmz_HZOMPMx;|0msQHi{oM`nB95Z~jrhy!j^}5;a17Z|2-U zrSD^&Z8MBx@{hg@v(WAiKzgeef5hkGsGQ;Es889i4AWA1Qo>f}4uu}6PY~{P+-{HC zYHvMT?O~i-xoEN~CE}hi-*yqPSVG}Pw_hASmuEqIN9~yBn{i#Sm zbQsXHsDtYK%p?;vk7u5}XE2ReXCA96Zz`^;5D&WasLSI)i=5KuPSSb=f_s6!0As#> z*+JsP&5P{I1wPQ4zJl44qD1(x&ND$yJyWxAS`?(Wne@3WfnpT0uVo9Ml0OxtO~p`L zmLu$*RWWbIAy#sICY#~R4<{t@GdY^2E%OnncKFDlyt?LT&SFo;Iz+#i!0rT&rNn!o z=jiBj?rW<^Vo`;(v>@+D@fc>@yZUMA=|VSN!vI8~{(7-($sQ+Bz}KkS+KzfvMKuDI zAW*l*`SGFrk*5uJ(Cd>M<3X<|iiW~(1kozNftQ~@QI1!qzjae*zx=f8RpKq`B>~EG zqL3RksJvG*U`_f&o6L5Ze)?gP;xqi|mCxr4O^l2zWHRM|oOOIDlp1= zk=olCKd?+G4G?}&k*cBvWonKtkz1r5E-!B|#Qv-bo`ccfa!(z-ihG(_ITejqRmtn~ zQ;XYrv^~vpW9@P9*gp8%hZzCi$c;82l73V)^5={isg)O|rOxi`Y{u0$oNIk^eb8Q= zcyi}j!8Yn_O6ZtAkfvK3<#<;dO%m@Y<}TezYC)Z{h5SZv`p5ScNf--jJ$|K}mOov3 z(@tMFIGq%~wOOT@$LBl-KV&Y>lh7>Nsa3Muc<`cPbx$MeqcL(!ieqG!QX{igzKTT| zd-?9UB72@LzX5{}w>$n3^=}m{qf2Jj4E$7XNiX<2Oie3bzLG?o8x|7=@mp>0mN03B z=pY%azLn^gk(zEMEHI86-0KQ9FJW-w>hR`r}hh%Bw_-V}@+9WB>DClR%>UUL&Xxl`xp2 zM`R>c%hN62d`<`rZr4p;aA*43_^+v&j1Cn`EsOH=w;|vKUhHo=&$6$fX&=meMBita zUOGjr-P>9TP9542U|JqoEs99%*FVqY&;M43i-^ESCiQZJQD{rkf zBMnhWdN*Gde^h17SY*A;ja6!==wo^&Qpn;#P#o<9flC z9C-^Gy6lRg9k9e@qO3H%ncz7Ud2yLD4=XI^4&>RBf~%(T(FbRMUZq2_%|FovrbVO9 z{UjMTrX_Qoh2B)T(ITrhns!6CU7bxnAo^E!4zPVfc6{Qj=|r_4o+7lyDH?9qXXC=& zMw>Ua2uK2y1+?=Vq4}%w$|JrSi;u*c6oK0`lc}PtP0sDRGI6#I47^kDTTMVIN&wad zrKvcW^VI) z<8w4WH)FS7*H7}>34L>dsizcxfS7Gh&^$yRgV=!ZRhE|8jF$a73s@a5JMuog@%o-PUPoIOcPMG4U0y?>d|w?F4ATQQ($m{ctruiGeW(L+sVAr?1O=4wkmO= z$Y*X)EbCSztEso3VY-rWk!1x;w#H7-R$yxud2>2wMQn>qbWiGxmq=pf6dyyO4}VTp zd(S8PPnW>1)tt;iNi-ak0_@^mYjN&$G0j1`7{JVb_I`tghW*qrroP&DkhdLsE;yJ| z;|fE1irc>e!gyXe5W@P8&2b{NysbpSB2nySMFv(F?%%g42h+SYT>FQ3hBb7?2mI|y6nd{2k{G)pmx9TwOTDEc zx-%1p!$oMjH(@$&tVV;LBOEWs&^ZJW?9ZLX{Zw_D-I&nBb7JeaOK?K-F5|=DV(dCo zL4B$~h!o#jov7$cJcnvFA_B1~tEaRPhMLBqQ|`b-0UFaCM{Q(7Tl=j|j?bhpaA8|Z zoH+1ZxcwNG#tV%1y9;$%!1<{NTyhLxx-YGBNizr8`*RYZ<1-`BS1=I)E${uwX!cr? z;}e7<&kvV7;H0Zn%Cigub2lfj;loaL91NAg(smRPE2tP(U8d`afIvJH8Zf6(AleRb zk?5^0W!hS+zVV6MhiYiZMI6l&orrH9oL{IEq7EkHwZ%x<9MAP+&P11ZD_);v0`Z%%fC%+h$AD_`; z6e8(uR+su&=b5y!Wcej)HL5PLls+GaG)!m6KC+Cr*H=--o9ut~W!bzib8d5UX^)bf zuHj-O(esnAJs^$3X3yFBI$rVITbd~J=z6YnbR-k8s4%?Z0HFhc1Ac^a=F|0qU-5tV zoYM;5|MebK1`u5T*;ba?5%n3apt(5X4BvvQT-a;`V_Tn00R8=WiB*0-kJAigCk}nx zyKl}(?<;z3FL!j^j%{U+?FJ{Hg9S(Iwy1&6RLbZpv^z(Vr2Z;F#h@2=?ZgYdb3L*U zY?W$HIg^j-#fl6`tNT~vX|7aUzRT$XU zv%J=ID8If}-Os}2>MA7TIv?;(uDaZj*XO|hNLPwu>3mz$VbdLJ41c^;Z7M1^_EC>BZ7MH5JH#~>UnnXXleK>=+KQT?v@g&8L5 zPM=+>#kP>s-7b$Q<@TyJ)F9tBs# zI)J3`gbzpzPqLo^{{aukf#*-2a8UX$8*GH<_c#9Cp@+SiTd6mI6A@I-`Ub(%X=6Jn zWNpIJnisE9vOp&gcE$;)K{ZA8OSzo`>_^}H?2KA2sj1ip1ZD=xa(L$E0Xj+ODS@yF zaj-Vym*PvnfLclDMbQ6t{9p6@f9(|CDH^-o{kuTmOki3|$GGH}{>yly9o_#;Nd6~X za(g;50_Sn|LC{2YQf*+rCD-tV*mVRcmfa z;ar*G(T;o@s0F~KX*_8F*)GMtN{)O)I!B-{q zG9?`+L34iwBr4>(j;Q9Zt6C--bX?z%9~I2L*7f<~;x$0Y+!qX4_FdEGmQD@j@F>&ZHF5hZ}Wlmwq^_XHPqr% z!dTbf(1HpB!ZX6~YXB-1+!9hh|X=!FL`6JPH< zO=YYB(H6?t<#eAfa$^zk3tg4?Zr%4SPE%JOa>F4mmOC#hEu=^X`5Qyxy%P0IcGI)E zv|fq(){kL>r7E@9`FN(D$m{3C#fUwNsFH4T z7XXIyI{dIxnNNxIT{;TEU7}NE@hPe}L`yOAM=w`6_09`H9nsgFw*s|TwBrb$60o22 z$`IornY-$WnX;t_?kiE(P+VttRT22FJ)K#9Hcs@a7yUy@d@-CWZt9#@V3TV-e+4k> z$Ee~15X)P{cq5_s1N`pQG2F8Z*;hX|HMgoL1C0|!MOrftbPV(Ri3;=)yWyOAtvX>O z3i0N|UC$G)MweutG`YM?j@P7dWA%Zjw?g;LD1)0NPo3Vn?^(?-`SqP%;lGc3tw>>3 zj>A@8>F4#ar8apX2rcSGZzNm893ENL{9YEd@>%K7m{>BzViU#8d#8ompj{o(UwXsekkyj?+rPiM8(FT5OuieXACVM?DSHmxqNb z2Y2bAH_y`;{nmQuF|U?BhVF&z7qGPG_IW(iWZ7vrSlq}Qi#x}73M9Vj^24dau0n@6Ge2#G+$zr9`Gzx z?Y;um!|S}fX#&yz9I+g?8L9yr=l3x^{o&lNJbi8 zf%X)C9e8Duk_z+Q>TEo+gTX6Xp!pQ)=Pcb0nU$V00dVKUyYXso`&4_qsm+1Wu7Mu= z?oZ}!RII{|%R6_+?oQYZngZ6qg-GLb#$l5wS6TNIxveC*q^Ugg#C;pSCe*_LVY@`% z1;=_s3G#~jU54x{&L$&RwOcUrKO_6U=e1<*uFn*G?bww~>Yg!QI)>k+!nbB#dhShY z$sYeM*Tf;G0*8!A*P)*jOwE|dGm3U8Q`L`0R>@zAClz;GTw$WDv?2mfgQ)gjw>&AH zXaTHm!TEla(;wHJP5@%sf^|kAW?Q?2=Cnc;RE$wFX(ca{q7%sUtMY_@}(Ebla1dCAIhLQ1Y+J z)~r;HygXy%icRQonvOz&9Ms_a&)&NB;w)!#FPPMI+Kz!R3^SpC56-u~;k~6$ZTo(_ zeD*OicrE6zo^&`LQ>}|^`*!o_FuDt;L5@!F^NJi7g8j&pT|Lt1I0+HdA;25AJUK{Ye(ZUue8k5r<;>9hV{d-{MdHnu;c58pZYE0vxjlqG7 zmL@*++MufWX^WaQr2vT{8oe#J)vo~=AEy_&gUTY@Pi>);o{o&-le6zh(O%ZJXZt@n zU(j3GEIxVkuMB{^VuO-DEm0rT)x)!B#CRd|KV%}1>MSjb{*O1`xHwz^ nF+ehBolUmcXaac$4jsUAls8@era<4)K544oyIrVe{p{ZWQz^8p From 408fcec45718bd73e67ce0ce2642f4ca47dea1b7 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:47:04 +0100 Subject: [PATCH 165/311] New translations msc_Backup.png (German) --- docs/assets/de/MSC/msc_Backup.png | Bin 60492 -> 23198 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/de/MSC/msc_Backup.png b/docs/assets/de/MSC/msc_Backup.png index 01cea9df490a28270c3ba535b9180c20a59a741e..04ac3a99ed1879f93ca47ea6e499ccf2e01e601d 100644 GIT binary patch literal 23198 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 literal 60492 zcmX6^WmMc;*9AIIC|2B|xD7tIyGwC**W&KQ-5mypQrz9$y+HBe?hfBP-}@tSbCZ>< zl_UG?vu}iwf+X@6{4Y>YP{`6!V#-iZp8}wuVDjMMAXfzYODZ7;XlG?f5vZyu!XwB4 zU?D6o3K*HC0%~!~rh>&13eYK8lE`S4gVHJXDfZ=pG62p~ zXqe7a;>xNhO%yuBYtBo}ODJmXZWq=rpJL!z)TWw^0VKLGQyKuLh8>6k^-WJM@3u%={p}`oO=f$zf|C>~VP&=cp} z@E~9J|9HFoV-olMWT~=T?w#*(E7;}bta;wxM}GImhi{Vp5oh$q%i}oAwfIKI$@O>9 ztJa9D(loUbIBegyw)@h`%-3m@gFF02%mhuZrr@H*_caduRA%si<_rN_0lF$N>P zS_tItqLEN@x$*Ey2K!**YQPIbaP6SsFaPCwZQ9!{=`D{tQW}ty4+^GcAPEY;?2S{z6P`sg5b(ixXh7z*Ecs_mEWer>3^lFy>`g0AGYBFW>)gBRH7{dqOQDo~rS#e>? z>wpcpdHkmeX$z6X>{;6;1wtdD%FNm1scD0X=-Ep6G+X%Eh!%Wf<%v+)I`NLX!CS)l z#}oVQf#65$3hBw4x4yq4k0Y;R$4OOt?0MS>W6CXkMOm5B^~2`Ju|xR-0eRW}r8mfa zTmM&fO~^`i&Xtiqo2tSe%rv%}j-k6Q4oAeh+!n1_3v`psn@5n>O-Jf7y6s%_ff?nW z^xleHjyZZp6Hc+)y6D>98n?F|o(*P1cOLUb3);u_huF2DZ86cFRs;CQbVvq7v*NXp zJgAEPiS2ljp_8>it^PGD?}QyMKtzDun?%iJVl&6gQTUk4|3wQqLA6YyRSp~u6SAL76y5=e?pn?IgW2Wwo;i6jK2m_aEQoAW3c9jL(Z(IN6x}S4fPwfu0R!+ar>u6Eg6ioL~lF9tFx+c-{Nn{SJkY(4t*xOFZ*fJUsR4l4@%}@M6$|n zD-KF&?Y;ckc2aRloZG{#c!SrZ*$(gB*jmq2i(BeNv6@TGXV)RF#Xr%RV?N)RV=@1x zw=c#w5Ka;a&$G<<{&tyaF=?UF@f<0r>iA_iBZ${eufbF_IZkS7-P8}UDKS+-xn?#JeZ|WBNy?gW$cJ({F8~)k56AZw}Z!c zSx3x%4*Qtblm0HNBjj0rMW$MDv4h1f%lwz;UCkbu$HsdkgLKgb5{HUGsvHh|4x@~e zXHLImuS>aUVD!q@D>~VtJuK`|4Nd$?Il6pPPfW3I>^558*w+~(u-Plf+fa0h4+}I$ z`^t_63TRyZp-O)yk2=e63)V!>Xd;W8h=Od0z(^*s#1^s9eDr~?#akrV?Rj79S(Q%q zN^d6BpvR&S(x`m!znWzjua0FOuivF;{b>htksSa%0;2JL0eRj-1#5Bl{SbYJgqes#T86Qzf=bIHG;o zFZ>6qrAw|o-V4+WnnF45WjXyik3y_m*!-_HZu^iXZ?1WAN~ggDAslRnY18thCwW=I z-5zc{;{~ar^dZ{tc=Y}fQ1eC8gDD-lwSu8naVF`HpZ{1HO2VXz!-QZ$C&T$vqK{Z2 zOknncAUk12IC2EJNJAwkngcOGl#AggZ%PN{F=P!HSS|PBHphKB@hJU( z-U*kqD;NnF`D+TFN*qds+1zHfGI%YeQp~84vCKWou6Pqie4vZE;LG#yKzdty+(`di zXKYoFq(~E$5>)$7fSDP#=1AhmK z(!kVF1(&SzCJXrD?!okNdSUe-RB6}s)^OZdkO1r2xM;>k-Fhd!IRDxhACIvu#g5L^BfGQa=qzHn>lfw{-3Rj>A z&Janb3P6~nU>1GWB_u^0(H4zQK)}>Ri#DCH?_O7Q^B;QAB_Z%WJ#}mx-bfQl;PBqa zxKYk2^g*c@%8hzLDjNa;YCyHaCAZuTrb-Az{tC#m7s_B;Wtd{QL@^?_4x;@FWP|6w zj$Y~ApD~-ViLsCBcgYYi#oiwmWx(`78uf%!tU=Mfc{UQvV{qDNrcW65=JuXOaO=im zGn4SEw%~BE=_eZu;Vk3^vNDSQ3>fnLz(5&544{q7l2S|vRhk-|yVCLdRUMo6{@wC$Zc{PNF)|G-+4 z0v2s-Sd*p@SR~w5E+cVmbfZst;XT1-_IPI|+y!q^G=5_88uBO=2dnD_%|Bp}jCzf; zU;Q+G)5Yj~lso18i0IC-K4s9++>|BGS^srogw;co0K3;h3n2fX)SK25|EQ%~JD&15 ztbyOH^}`RhK9MX?8|s86FaheB3w@->48R6pCJl^*dj3Zr)F=&(CkxPO58?s9#*bnO zM$wx@Q`;bm4>?Ufx19WL9z75CAQ|rjZcJJFf?Y> zTb`r=#XKPt-vBB|_+=)AnCgS04y7odm8g(4s6?lXK9GX|*A-E1MF>rp zA($Zsz6~8W0(^v?880-HA|$H};K83YVSl}HfkO%g)u(P8Qgzh}^vS%X6c6ZLID zH$<&Wp5n0v+~c93;7Nt0lTWY=LhXjErJfd!60Ph-t&s@M&)tdisbCB#3`Mv^eB-EEE~vg(HvC#x*cA zTKLVj(~>%v5R#B!TPS4`mjH})(j!MKOdLY1&?K~5R+TWr*TRqCa%-3yDYGwszl-{$ zNeG+bsw=`&BV;aP+IU`o-^o~D@vQ06tR@_qXWrV-@2H{f$KG$AS&?Ygn3fa^kbrc)IAX8^Z==WWnxk>7vaM@LgQ8X0Vjxk2e

    vgdBjK3f$9d*Atz|L(3N7&Or{1QJw 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 From 10899127be9e7be1d729782c89f338068a7129a6 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:48:15 +0100 Subject: [PATCH 166/311] New translations properties_Action.md (Spanish) --- website/translated_docs/es/FormObjects/properties_Action.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/es/FormObjects/properties_Action.md b/website/translated_docs/es/FormObjects/properties_Action.md index 448504cefcdca2..7779fa5bb6e0a5 100644 --- a/website/translated_docs/es/FormObjects/properties_Action.md +++ b/website/translated_docs/es/FormObjects/properties_Action.md @@ -99,7 +99,7 @@ Several types of method references are supported: - a project method name: name of an existing project method without file extension, i.e.: `myMethod` In this case, 4D does not provide automatic support for object operations. - a custom method file path including the .4dm extension, e.g.: - `ObjectMethods/objectName.4dm` You can also use a filesystem: + `../../CustomMethods/myMethod.4dm` You can also use a filesystem: `/RESOURCES/Buttons/bOK.4dm` In this case, 4D does not provide automatic support for object operations. From afbaa894281fbdafbfbcf63692d6225a1ff4ff5e Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:49:04 +0100 Subject: [PATCH 167/311] New translations entities.md (Spanish) --- website/translated_docs/es/ORDA/entities.md | 119 +++++++++++++------- 1 file changed, 79 insertions(+), 40 deletions(-) diff --git a/website/translated_docs/es/ORDA/entities.md b/website/translated_docs/es/ORDA/entities.md index afa3396ee84d0d..392c0c4065b6ef 100644 --- a/website/translated_docs/es/ORDA/entities.md +++ b/website/translated_docs/es/ORDA/entities.md @@ -184,71 +184,109 @@ You can create an object of type [entity selection](dsMapping.md#entity-selectio You can simultaneously create and use as many different entity selections as you want for a dataclass. Keep in mind that an entity selection only contains references to entities. Different entity selections can contain references to the same entities. -### Shareable or non-shareable entity selections +### Shareable or alterable entity selections -An entity selection can be **shareable** (readable by multiple processes, but not modifiable after creation) or **non-shareable** (only usable by the current process, but modifiable afterwards): +An entity selection can be **shareable** (readable by multiple processes, but not alterable after creation) or **alterable** (supports the [`.add()`](API/entitySelectionClass.md#add) function, but only usable by the current process). -- a **shareable** entity selection has the following characteristics: - - it can be stored in a shared object or shared collection, and can be shared between several processes or workers; - - it can be stored in several shared objects or collections, or in a shared object or collection which already belongs to a group (it does not have a *locking identifier*); - - it does not allow the addition of new entities. Trying to add an entity to a shareable entity selection will trigger an error (1637 - This entity selection cannot be altered). To add an entity to a shareable entity selection, you must first transform it into a non-shareable entity selection using the [`.copy()`](API/entitySelectionClass.md#copy) function, before calling [`.add()`](API/entitySelectionClass.md#add). +#### Properties -- a **non-shareable** entity selection has the following characteristics: - + it cannot be shared between processes, nor be stored in a shared object or collection. Trying to store a non-shareable entity selection in a shared object or collection will trigger an error (-10721 - Not supported value type in a shared object or shared collection); - + it accepts the addition of new entities. +A **shareable** entity selection has the following characteristics: -In most cases, new entity selections are **shareable**, including: +- it can be stored in a shared object or shared collection, and can be passed as parameter between several processes or workers; +- it can be stored in several shared objects or collections, or in a shared object or collection which already belongs to a group (it does not have a *locking identifier*); +- it does not allow the addition of new entities. Trying to add an entity to a shareable entity selection will trigger an error (1637 - This entity selection cannot be altered). To add an entity to a shareable entity selection, you must first transform it into a non-shareable entity selection using the [`.copy()`](API/entitySelectionClass.md#copy) function, before calling [`.add()`](API/entitySelectionClass.md#add). -- entity selections resulting from various ORDA class functions ([`.query()`](API/entitySelectionClass.md#query), [`.query()`](API/dataclassClass.md#query), etc.), -- entity selections based upon relations (e.g. `company.employee`), -- entity selections resulting from projections of values (e.g. `ds.Employee.all().employer`), -- entity selections explicitely copied as shareable with [`.copy()`](API/entitySelectionClass.md#copy) or `OB Copy`. +> Most entity selection functions (such as [`.slice()`](API/entitySelectionClass.md#slice), [`.and()`](API/entitySelectionClass.md#and)...) support shareable entity selections since they do not need to alter the original entity selection (they return a new one). -New entity selections are **non-shareable** in the following cases: +An **alterable** entity selection has the following characteristics: -- blank entity selections created using the [`.newSelection()`](API/dataclassClass.md#newselection) function or `Create entity selection` command, -- entity selections explicitely copied as non-shareable with [`.copy()`](API/entitySelectionClass.md#copy) or `OB Copy`. +- it cannot be shared between processes, nor be stored in a shared object or collection. Trying to store a non-shareable entity selection in a shared object or collection will trigger an error (-10721 - Not supported value type in a shared object or shared collection); +- it accepts the addition of new entities, i.e. it is supports the [`.add()`](API/entitySelectionClass.md#add) function. -#### Example + +#### How are they defined? + +The **shareable** or **alterable** nature of an entity selection is defined when the entity selection is created (it cannot be modified afterwards). You can know the nature of an entity selection using the [.isAlterable()](API/entitySelectionClass.md#isalterable) function or the `OB Is shared` command. + + +A new entity selection is **shareable** in the following cases: + +- the new entity selection results from an ORDA class function applied to a dataClass: [dataClass.all()](API/dataclassClass.md#all), [dataClass.fromCollection()](API/dataclassClass.md#fromcollection), [dataClass.query()](API/dataclassClass.md#query), +- the new entity selection is based upon a relation [entity.*attributeName*](API/entityClass.md#attributename) (e.g. "company.employees") when *attributeName* is a one-to-many related attribute but the entity does not belong to an entity selection. +- the new entity selection is explicitely copied as shareable with [entitySelection.copy()](API/entitySelectionClass.md#copy) or `OB Copy` (i.e. with the `ck shared` option). + +Example: +```4d +$myComp:=ds.Company.get(2) //$myComp does not belong to an entity selection +$employees:=$myComp.employees //$employees is shareable +``` + +A new entity selection is **alterable** in the following cases: + +- the new entity selection created blank using the [dataClass.newSelection()](API/dataclassClass.md#newselection) function or `Create entity selection` command, +- the new entity selection is explicitely copied as alterable with [entitySelection.copy()](API/entitySelectionClass.md#copy) or `OB Copy` (i.e. without the `ck shared` option). + +Example: +```4d +$toModify:=ds.Company.all().copy() //$toModify is alterable +``` + + +A new entity selection **inherits** from the original entity selection nature in the following cases: + +- the new entity selection results from one of the various ORDA class functions applied to an existing entity selection ([.query()](API/entitySelectionClass.md#query), [.slice()](API/entitySelectionClass.md#slice), etc.) . +- the new entity selection is based upon a relation: + - [entity.*attributeName*](API/entityClass.md#attributename) (e.g. "company.employees") when *attributeName* is a one-to-many related attribute and the entity belongs to an entity selection (same nature as [.getSelection()](API/entityClass.md#getselection) entity selection), + - [entitySelection.*attributeName*](API/entitySelectionClass.md#attributename) (e.g. "employees.employer") when *attributeName* is a related attribute (same nature as the entity selection), + - [.extract()](API/entitySelectionClass.md#extract) when the resulting collection contains entity selections (same nature as the entity selection). + +Examples: + +```4d +$highSal:=ds.Employee.query("salary >= :1"; 1000000) + //$highSal is shareable because of the query on dataClass +$comp:=$highSal.employer //$comp is shareable because $highSal is shareable + +$lowSal:=ds.Employee.query("salary <= :1"; 10000).copy() + //$lowSal is alterable because of the copy() +$comp2:=$lowSal.employer //$comp2 is alterable because $lowSal is alterable +``` + + +#### Sharing an entity selection between processes (example) You work with two entity selections that you want to pass to a worker process so that it can send mails to appropriate persons: ```4d - If(Storage.info=Null) - Use(Storage) - Storage.info:=New shared object() - End use - End if - Use(Storage.info) - //Put entity selections in a shared object - Storage.info.paid:=ds.Invoices.query("status=:1";"Paid") - Storage.info.unpaid:=ds.Invoices.query("status=:1";"Unpaid") - End use +var $paid; $unpaid : cs.InvoicesSelection +//We get entity selections for paid and unpaid invoices +$paid:=ds.Invoices.query("status=:1"; "Paid") +$unpaid:=ds.Invoices.query("status=:1"; "Unpaid") + +//We pass entity selection references as parameters to the worker +CALL WORKER("mailing"; "sendMails"; $paid; $unpaid) + +``` - CALL WORKER("mailing";"sendMails";Storage.info) -The sendMails method: +The `sendMails` method: - var $info: ;$1Object - var $paid;$unpaid : cs.InvoicesSelection +```4d + + #DECLARE ($paid : cs.InvoicesSelection; $unpaid : cs.InvoicesSelection) var $invoice : cs.InvoicesEntity - var $server;$transporter;$email;$status : Object + var $server; $transporter; $email; $status : Object //Prepare emails - $server:=New object + $server:=New object() $server.host:="exchange.company.com" $server.user:="myName@company.com" $server.password:="my!!password" $transporter:=SMTP New transporter($server) - $email:=New object + $email:=New object() $email.from:="myName@company.com" - //Get entity selections - $info:=$1 - $paid:=$info.paid - $unpaid:=$info.unpaid - //Loops on entity selections For each($invoice;$paid) $email.to:=$invoice.customer.address // email address of the customer @@ -385,6 +423,7 @@ The following methods automatically associate the optimization context of the so * `entitySelection.drop()` + **Example** Given the following code: From c6462ff0d5eebb2cd29b2ea25d381d39a362fe9e Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:49:39 +0100 Subject: [PATCH 168/311] New translations onCloseBox.md (Spanish) --- website/translated_docs/es/Events/onCloseBox.md | 1 - 1 file changed, 1 deletion(-) diff --git a/website/translated_docs/es/Events/onCloseBox.md b/website/translated_docs/es/Events/onCloseBox.md index 36f0caaee610d5..5c0bff081375fc 100644 --- a/website/translated_docs/es/Events/onCloseBox.md +++ b/website/translated_docs/es/Events/onCloseBox.md @@ -24,7 +24,6 @@ This example shows how to respond to a close window event with a form used for r :(Form event code=On Close Box) If(Modified record($vpFormTable->)) CONFIRM("This record has been modified. Save Changes?") - Save Changes?") If(OK=1) ACCEPT Else From 4a212d0a93d6e62477c8d2868c218203927b4073 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:50:55 +0100 Subject: [PATCH 169/311] New translations listboxBuilderIcon.png (German) --- .../de/FormEditor/listboxBuilderIcon.png | Bin 10339 -> 12884 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/de/FormEditor/listboxBuilderIcon.png b/docs/assets/de/FormEditor/listboxBuilderIcon.png index 4c11a5989f23eb8d20b69ef98098d335893a02af..40daf8fccf2aa0ab9873c4a1a33568983835cc05 100644 GIT binary patch literal 12884 zcmY*=1z3||_qQ0Jq;!MQ-3@|Bw{&+3(j5Z<=^ikoVRTNAP8E@E*yxa!X25_E-_-Yg z|JV0i7qGF1=RR@YzjMy-9Ae(8E8t*KU_N;807pqtR_nooM{TIrj!)51-+_~yE2tl6 zo>~fT9@LIf?V{d1wwG3ue(<0!3G2r43F`ebH$_9w2M=(+|M@~AW>Nm|-~sQhlB~3j zpV`3@h6R!BJjOBeOGVePXtXe9HT)q<>DVW-Ib^0RK6fv=Pwt?r4-DbuQC+j!)@M>Zmo>zifZsWj5D-na|yj z;w9bRi|xg)bA^8|!4F@y%ljTKwpM=S@z_uV#76(UtTvlhf>XcPj}3l&MtBCKLM(bF zNy^!o#c&ZU*4qvZen5LvY}Of|RbwQmt1kQZn#f2=dAWdh%PPEt_>eQ-B44VSRm^P( z-eb@Q$1yZp_a#oν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 k;s4JstvcRZ-C(}`R3SLsgiHwhFc3*fOinaU Date: Wed, 16 Dec 2020 16:51:32 +0100 Subject: [PATCH 170/311] New translations properties_WebArea.md (German) --- .../de/FormObjects/properties_WebArea.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/website/translated_docs/de/FormObjects/properties_WebArea.md b/website/translated_docs/de/FormObjects/properties_WebArea.md index b1f440e0c2add9..a690347b17a8e4 100644 --- a/website/translated_docs/de/FormObjects/properties_WebArea.md +++ b/website/translated_docs/de/FormObjects/properties_WebArea.md @@ -16,9 +16,9 @@ When this property is on, a special JavaScript object named `$4d` is instantiate #### JSON Grammar -| Name | Datentyp | Possible Values | -| -------------------- | -------- | ----------------------- | -| methodsAccessibility | string | "none" (default), "all" | +| Name | Data Type | Possible Values | +| -------------------- | --------- | ----------------------- | +| methodsAccessibility | string | "none" (default), "all" | #### Objects Supported @@ -32,9 +32,9 @@ Name of a Longint type variable. This variable will receive a value between 0 an #### JSON Grammar -| Name | Datentyp | Possible Values | -| -------------- | -------- | -------------------------- | -| progressSource | string | Name of a Longint variable | +| Name | Data Type | Possible Values | +| -------------- | --------- | -------------------------- | +| progressSource | string | Name of a Longint variable | #### Objects Supported @@ -63,9 +63,9 @@ The URL variable produces the same effects as the [WA OPEN URL](https://doc.4d.c #### JSON Grammar -| Name | Datentyp | Possible Values | -| --------- | -------- | --------------- | -| urlSource | string | A URL. | +| Name | Data Type | Possible Values | +| --------- | --------- | --------------- | +| urlSource | string | A URL. | #### Objects Supported @@ -94,9 +94,9 @@ This option allows choosing between two rendering engines for the Web area, depe #### JSON Grammar -| Name | Datentyp | Possible Values | -| --------- | -------- | -------------------- | -| webEngine | string | "embedded", "system" | +| Name | Data Type | Possible Values | +| --------- | --------- | -------------------- | +| webEngine | string | "embedded", "system" | #### Objects Supported From e6c118db2f57c1db7642f91d5dc23c5f8e6a2bb6 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:53:17 +0100 Subject: [PATCH 171/311] New translations button_osxgradient.en.png (German) --- .../de/FormObjects/button_osxgradient.en.png | Bin 6596 -> 6689 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/de/FormObjects/button_osxgradient.en.png b/docs/assets/de/FormObjects/button_osxgradient.en.png index c667b5992fbe9df30c9882713e1c5ef9bd9297d8..106bdd992461f08a702ee229456c06f6306b27fe 100644 GIT binary patch literal 6689 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 Date: Wed, 16 Dec 2020 16:54:20 +0100 Subject: [PATCH 172/311] New translations $skip.md (German) --- website/translated_docs/de/REST/$skip.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/de/REST/$skip.md b/website/translated_docs/de/REST/$skip.md index 43756ffc9b5d44..1feb4d28be386e 100644 --- a/website/translated_docs/de/REST/$skip.md +++ b/website/translated_docs/de/REST/$skip.md @@ -6,13 +6,13 @@ title: '$skip' Starts the entity defined by this number in the collection (*e.g.*, `$skip=10`) -## Beschreibung +## Description `$skip` defines which entity in the collection to start with. By default, the collection sent starts with the first entity. To start with the 10th entity in the collection, pass 10. `$skip` is generally used in conjunction with [`$top/$limit`]($top_$limit.md) to navigate through an entity collection. -## Beispiel +## Example In the following example, we go to the 20th entity in our entity set: From a7293bbefc1d3082ec24894cebdee16e938a13fd Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:54:22 +0100 Subject: [PATCH 173/311] New translations genInfo.md (German) --- website/translated_docs/de/REST/genInfo.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/REST/genInfo.md b/website/translated_docs/de/REST/genInfo.md index 0590f96de40d19..f0733a46c9c7c2 100644 --- a/website/translated_docs/de/REST/genInfo.md +++ b/website/translated_docs/de/REST/genInfo.md @@ -25,7 +25,7 @@ Use the [`$info`]($info.md) parameter to get information about the entity select Entity selections that are generated through queries can have the following two properties: `queryPlan` and `queryPath`. To calculate and return these properties, you just need to add [`$queryPlan`]($queryplan.md) and/or [`$queryPath`]($querypath.md) in the REST request. -Beispiel: +For example: `GET /rest/People/$filter="employer.name=acme AND lastName=Jones"&$queryplan=true&$querypath=true` From a9e88c18c3f6311752caa900b9cf9d2a1a53c2cc Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:54:25 +0100 Subject: [PATCH 174/311] New translations authUsers.md (German) --- website/translated_docs/de/REST/authUsers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/REST/authUsers.md b/website/translated_docs/de/REST/authUsers.md index 23500f03553080..7bbb98da7fa022 100644 --- a/website/translated_docs/de/REST/authUsers.md +++ b/website/translated_docs/de/REST/authUsers.md @@ -26,7 +26,7 @@ WASID4D=EA0400C4D58FF04F94C0A4XXXXXX3 In the subsequent REST requests, make sure this cookie is included in the **"Cookie" request header** so that you will reuse the same session. Otherwise, a new session will be opened, and another license used. -### Beispiel +### Example The way to handle session cookies actually depends on your HTTP client. This example shows how to extract and resend the session cookie in the context of requests handled through the 4D `HTTP Request` command. From fe53c6c00eeb7e666ec63b1bda4521c96017567f Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:54:27 +0100 Subject: [PATCH 175/311] New translations REST_requests.md (German) --- website/translated_docs/de/REST/REST_requests.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/de/REST/REST_requests.md b/website/translated_docs/de/REST/REST_requests.md index 9a1f517a147239..cf2ab3ccad554e 100644 --- a/website/translated_docs/de/REST/REST_requests.md +++ b/website/translated_docs/de/REST/REST_requests.md @@ -15,7 +15,7 @@ The following structures are supported for REST requests: While all REST requests must contain the URI and Resource parameters, the Output (which filters the data returned) is optional. -As with all URIs, the first parameter is delimited by a “?” and all subsequent parameters by a “&”. Beispiel: +As with all URIs, the first parameter is delimited by a “?” and all subsequent parameters by a “&”. For example: `GET /rest/Person/?$filter="lastName!=Jones"&$method=entityset&$timeout=600` > You can place all values in quotes in case of ambiguity. For example, in our above example, we could have put the value for the last name in single quotes: "lastName!='Jones'". @@ -31,7 +31,7 @@ With each REST request, the server returns the status and a response (with or wi ### Request Status With each REST request, you get the status along with the response. Below are a few of the statuses that can arise: -| Status | Beschreibung | +| Status | Description | | ------------------------- | -------------------------------------------------------------------------- | | 0 | Request not processed (server might not be started). | | 200 OK | Request processed without error. | From d3a1e614779de475ed8f51b1f1f60eae564649b4 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:54:29 +0100 Subject: [PATCH 176/311] New translations ClassFunctions.md (German) --- .../translated_docs/de/REST/ClassFunctions.md | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/website/translated_docs/de/REST/ClassFunctions.md b/website/translated_docs/de/REST/ClassFunctions.md index 89647258bd59f1..9651353e316923 100644 --- a/website/translated_docs/de/REST/ClassFunctions.md +++ b/website/translated_docs/de/REST/ClassFunctions.md @@ -42,13 +42,13 @@ Functions are called on the corresponding object on the server datastore. > The function is searched in the entity selection class first. If not found, it is searched in the dataclass. In other words, if a function with the same name is defined in both the DataClass class and the EntitySelection class, the dataclass class function will never be executed. -## Parameter +## Parameters You can send parameters to functions defined in ORDA user classes. On the server side, they will be received in the class functions in regular $1, $2, etc. parameters. -Es gelten folgende Regeln: +The following rules apply: - Parameters must be passed in the **body of the POST request** - Parameters must be enclosed within a collection (JSON format) @@ -74,7 +74,7 @@ Entities passed in parameters are referenced on the server through their key (*i > If the request sends modified attribute values for an existing entity on the server, the called ORDA data model function will be automatically executed on the server with modified values. This feature allows you, for example, to check the result of an operation on an entity, after applying all business rules, from the client application. You can then decide to save or not the entity on the server. -| Properties | Typ | Beschreibung | +| Properties | Type | Description | | ------------------------ | ------------------------------------ | -------------------------------------------------------------------------- | | Attributes of the entity | mixed | Optional - Values to modify | | __DATACLASS | String | Mandatory - Indicates the Dataclass of the entity | @@ -100,7 +100,7 @@ The entity selection must have been defined beforehand using [$method=entityset] > If the request sends a modified entity selection to the server, the called ORDA data model function will be automatically executed on the server with the modified entity selection. -| Properties | Typ | Beschreibung | +| Properties | Type | Description | | ------------------------ | ------- | ------------------------------------------------------------------------------------ | | Attributes of the entity | mixed | Optional - Values to modify | | __DATASET | String | Mandatory - entitySetID (UUID) of the entity selection | @@ -132,7 +132,7 @@ You can then run this request: **POST** `127.0.0.1:8111/rest/$catalog/getName` -#### Ergebnis +#### Result ``` { @@ -162,7 +162,7 @@ You can then run this request: Body of the request: ["Aguada"] -#### Ergebnis +#### Result The result is an entity: ``` @@ -206,7 +206,7 @@ You can then run this request: **POST** `127.0.0.1:8111/rest/City(2)/getPopulation` -#### Ergebnis +#### Result ``` { @@ -232,7 +232,7 @@ You can then run this request: **POST** `127.0.0.1:8111/rest/City/getPopulation/?$filter="ID<3"` -#### Ergebnis +#### Result ``` { @@ -264,7 +264,7 @@ Once you have created an entityset, you can run this request: **POST** `127.0.0.1:8044/rest/Students/getAgeAverage/$entityset/17E83633FFB54ECDBF947E5C620BB532` -#### Ergebnis +#### Result ``` { @@ -295,7 +295,7 @@ You can then run this request: **POST** `127.0.0.1:8044/rest/Students/getLastSummary/$entityset/?$filter="lastname=b@"&$orderby="lastname"` -#### Ergebnis +#### Result ``` { @@ -350,7 +350,7 @@ Body of the request: Since no `__KEY` is given, a new Students entity is loaded on the server **with the attributes received from the client**. Because the `pushData()` function runs a `save()` action, the new entity is created. -#### Ergebnis +#### Result ``` { @@ -387,7 +387,7 @@ Body of the request: Since `__KEY` is given, the Students entity with primary key 55 is loaded **with the lastname value received from the client**. Because the function runs a `save()` action, the entity is updated. -#### Ergebnis +#### Result ``` { @@ -423,7 +423,7 @@ Body of the request: }] ``` -#### Ergebnis +#### Result ``` { @@ -477,7 +477,7 @@ You run this request, called on a Students entity : **POST** `http://127.0.0.1:8 }] ``` -#### Ergebnis +#### Result ``` { @@ -544,7 +544,7 @@ Body of the request: ``` -#### Ergebnis +#### Result The entities with primary keys 1 and 2 have been updated. From 0d9796c295767485c4f7a600f45eca21c346bd94 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:54:31 +0100 Subject: [PATCH 177/311] New translations $version.md (German) --- website/translated_docs/de/REST/$version.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/de/REST/$version.md b/website/translated_docs/de/REST/$version.md index edd4bae5bb2b77..e80c60a3b08c92 100644 --- a/website/translated_docs/de/REST/$version.md +++ b/website/translated_docs/de/REST/$version.md @@ -5,13 +5,13 @@ title: '$version' Image version number -## Beschreibung +## Description `$version` is the image's version number returned by the server. The version number, which is sent by the server, works around the browser's cache so that you are sure to retrieve the correct image. The value of the image's version parameter is modified by the server. -## Beispiel +## Example The following example defines the image format to JPEG regardless of the actual type of the photo and passes the actual version number sent by the server: From 9ccef6b9f92f4803257f0b5a5595c071b59f268f Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:54:33 +0100 Subject: [PATCH 178/311] New translations $upload.md (German) --- website/translated_docs/de/REST/$upload.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/REST/$upload.md b/website/translated_docs/de/REST/$upload.md index 430097a6cb48fd..9b8159b841e27e 100644 --- a/website/translated_docs/de/REST/$upload.md +++ b/website/translated_docs/de/REST/$upload.md @@ -6,7 +6,7 @@ title: '$upload' Returns an ID of the file uploaded to the server -## Beschreibung +## Description Post this request when you have a file that you want to upload to the Server. If you have an image, you pass `$rawPict=true`. For all other files, you pass `$binary=true`. You can modify the timeout, which by default is 120 seconds, by passing a value to the `$timeout parameter`. From a3e6e5838b47e58d67af21ea29460faf5f3357e6 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:54:35 +0100 Subject: [PATCH 179/311] New translations $top_$limit.md (German) --- website/translated_docs/de/REST/$top_$limit.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/de/REST/$top_$limit.md b/website/translated_docs/de/REST/$top_$limit.md index 9f2825f96624ac..8539277f771f3e 100644 --- a/website/translated_docs/de/REST/$top_$limit.md +++ b/website/translated_docs/de/REST/$top_$limit.md @@ -5,13 +5,13 @@ title: '$top/$limit' Limits the number of entities to return (e.g., `$top=50`) -## Beschreibung +## Description `$top/$limit` defines the limit of entities to return. By default, the number is limited to 100. You can use either keyword: `$top` or `$limit`. When used in conjunction with [`$skip`]($skip.md), you can navigate through the entity selection returned by the REST request. -## Beispiel +## Example In the following example, we request the next ten entities after the 20th entity: From 0d96fa14b01d5868f820db0cdb725a43774b2f49 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:54:37 +0100 Subject: [PATCH 180/311] New translations $timeout.md (German) --- website/translated_docs/de/REST/$timeout.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/de/REST/$timeout.md b/website/translated_docs/de/REST/$timeout.md index 32480ef7a88401..2eac9ac71f3f27 100644 --- a/website/translated_docs/de/REST/$timeout.md +++ b/website/translated_docs/de/REST/$timeout.md @@ -6,7 +6,7 @@ title: '$timeout' Defines the number of seconds to save an entity set in 4D Server's cache (*e.g.*, `$timeout=1800`) -## Beschreibung +## Description To define a timeout for an entity set that you create using [`$method=entityset`]($method.md#methodentityset), pass the number of seconds to `$timeout`. For example, if you want to set the timeout to 20 minutes, pass 1200. By default, the timeout is two (2) hours. @@ -14,7 +14,7 @@ Once the timeout has been defined, each time an entity set is called upon (by us If an entity set is removed and then recreated using `$method=entityset` along with [`$savedfilter`]($savedfilter.md), the new default timeout is 10 minutes regardless of the timeout you defined when calling `$timeout`. -## Beispiel +## Example In our entity set that we're creating, we define the timeout to 20 minutes: From af27ae8d30a89f8d9894fdcca8e98706617d9973 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:54:39 +0100 Subject: [PATCH 181/311] New translations $savedorderby.md (German) --- website/translated_docs/de/REST/$savedorderby.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/de/REST/$savedorderby.md b/website/translated_docs/de/REST/$savedorderby.md index 582514b4ff6460..180b3ff16b7bce 100644 --- a/website/translated_docs/de/REST/$savedorderby.md +++ b/website/translated_docs/de/REST/$savedorderby.md @@ -5,7 +5,7 @@ title: '$savedorderby' Saves the order by defined by `$orderby` when creating an entity set (*e.g.*, `$savedorderby="{orderby}"`) -## Beschreibung +## Description When you create an entity set, you can save the sort order along with the filter that you used to create it as a measure of security. If the entity set that you created is removed from 4D Server's cache (due to the timeout, the server's need for space, or your removing it by calling [`$method=release`]($method.md#methodrelease)). @@ -13,7 +13,7 @@ You use `$savedorderby` to save the order you defined when creating your entity If the entity set is no longer in 4D Server's cache, it will be recreated with a new default timeout of 10 minutes. If you have used both [`$savedfilter`]($savedfilter.md) and `$savedorderby` in your call when creating an entity set and then you omit one of them, the new entity set, having the same reference number, will reflect that. -## Beispiel +## Example You first call `$savedorderby` with the initial call to create an entity set: `GET /rest/People/?$filter="lastName!=''"&$savedfilter="lastName!=''"&$orderby="salary"&$savedorderby="salary"&$method=entityset` From 164ed7654320400f4851681c0b680db073278c06 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:54:41 +0100 Subject: [PATCH 182/311] New translations manData.md (German) --- website/translated_docs/de/REST/manData.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/website/translated_docs/de/REST/manData.md b/website/translated_docs/de/REST/manData.md index bdc4c1f319daeb..175b3de414697e 100644 --- a/website/translated_docs/de/REST/manData.md +++ b/website/translated_docs/de/REST/manData.md @@ -18,7 +18,7 @@ To query data directly, you can do so using the [`$filter`]($filter.md) function With the REST API, you can perform all the manipulations to data as you can in 4D. -To add and modify entities, you can call [`$method=update`]($method.md#methodupdate). Before saving data, you can also validate it beforehand by calling [`$method=validate`]($method.md#methodvalidate). If you want to delete one or more entities, you can use [`$method=delete`]($method.md#methoddelete). +To add and modify entities, you can call [`$method=update`]($method.md#methodupdate). If you want to delete one or more entities, you can use [`$method=delete`]($method.md#methoddelete). Besides retrieving a single entity in a dataclass using [{dataClass}({key})](%7BdataClass%7D_%7Bkey%7D.html), you can also write a [class function](classFunctions.md#function-calls) that returns an entity selection (or a collection). @@ -87,18 +87,18 @@ You can always define which attributes to return in the REST response after an i You can apply this filter in the following ways: -| Objekt | Syntax | Beispiel | +| Object | Syntax | Example | | ---------------------- | --------------------------------------------------- | ------------------------------------------------------------- | | Dataclass | {dataClass}/{att1,att2...} | /People/firstName,lastName | | Collection of entities | {dataClass}/{att1,att2...}/?$filter="{filter}" | /People/firstName,lastName/?$filter="lastName='a@'" | | Specific entity | {dataClass}({ID})/{att1,att2...} | /People(1)/firstName,lastName | | | {dataClass}:{attribute}(value)/{att1,att2...}/ | /People:firstName(Larry)/firstName,lastName/ | -| Entity-Selection | {dataClass}/{att1,att2...}/$entityset/{entitySetID} | /People/firstName/$entityset/528BF90F10894915A4290158B4281E61 | +| Entity selection | {dataClass}/{att1,att2...}/$entityset/{entitySetID} | /People/firstName/$entityset/528BF90F10894915A4290158B4281E61 | The attributes must be delimited by a comma, *i.e.*, `/Employee/firstName,lastName,salary`. Storage or relation attributes can be passed. -### Beispiele +### Examples Here are a few examples, showing you how to specify which attributes to return depending on the technique used to retrieve entities. You can apply this technique to: @@ -242,7 +242,7 @@ If you want to save a BLOB stored in your dataclass, you can write the following ## Retrieving only one entity -You can use the [`{dataClass}:{attribute}(value)`](%7BdataClass%7D.html#dataclassattributevalue) syntax when you want to retrieve only one entity. It's especially useful when you want to do a related search that isn't created on the dataclass's primary key. Sie schreiben zum Beispiel: +You can use the [`{dataClass}:{attribute}(value)`](%7BdataClass%7D.html#dataclassattributevalue) syntax when you want to retrieve only one entity. It's especially useful when you want to do a related search that isn't created on the dataclass's primary key. For example, you can write: `GET /rest/Company:companyCode("Acme001")` From a562dff91257e4b77c04358a86b42587f8d36640 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:54:43 +0100 Subject: [PATCH 183/311] New translations $savedfilter.md (German) --- website/translated_docs/de/REST/$savedfilter.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/de/REST/$savedfilter.md b/website/translated_docs/de/REST/$savedfilter.md index 5e748568850121..0c144247101d85 100644 --- a/website/translated_docs/de/REST/$savedfilter.md +++ b/website/translated_docs/de/REST/$savedfilter.md @@ -5,7 +5,7 @@ title: '$savedfilter' Saves the filter defined by $filter when creating an entity set (*e.g.*, `$savedfilter="{filter}"`) -## Beschreibung +## Description When you create an entity set, you can save the filter that you used to create it as a measure of security. If the entity set that you created is removed from 4D Server's cache (due to the timeout, the server's need for space, or your removing it by calling [`$method=release`]($method.md#methodrelease)). @@ -15,7 +15,7 @@ If the entity set is no longer in 4D Server's cache, it will be recreated with a If you have used both `$savedfilter` and [`$savedorderby`]($savedorderby.md) in your call when creating an entity set and then you omit one of them, the new entity set, which will have the same reference number, will reflect that. -## Beispiel +## Example In our example, we first call ``$savedfilter` with the initial call to create an entity set as shown below: From af65eb64434526b523f383fb7a661704222173b8 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:54:45 +0100 Subject: [PATCH 184/311] New translations $queryplan.md (German) --- website/translated_docs/de/REST/$queryplan.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/de/REST/$queryplan.md b/website/translated_docs/de/REST/$queryplan.md index 1aca8adf9710ee..6032a4a3aa2093 100644 --- a/website/translated_docs/de/REST/$queryplan.md +++ b/website/translated_docs/de/REST/$queryplan.md @@ -6,17 +6,17 @@ title: '$queryplan' Returns the query as it was passed to 4D Server (*e.g.*, `$queryplan=true`) -## Beschreibung +## Description $queryplan returns the query plan as it was passed to 4D Server. -| Property | Typ | Beschreibung | +| Property | Type | Description | | -------- | ------ | ------------------------------------------------------------------------------------------- | | item | String | Actual query executed | | subquery | Array | If there is a subquery, an additional object containing an item property (as the one above) | For more information about query plans, refer to [queryPlan and queryPath](genInfo.md#querypath-and-queryplan). -## Beispiel +## Example If you pass the following query: `GET /rest/People/$filter="employer.name=acme AND lastName=Jones"&$queryplan=true` From 6a4556400af2630f01621b801246a5d8cf9d469e Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:54:47 +0100 Subject: [PATCH 185/311] New translations $querypath.md (German) --- website/translated_docs/de/REST/$querypath.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/website/translated_docs/de/REST/$querypath.md b/website/translated_docs/de/REST/$querypath.md index 55808295456424..666c5dc9513b1c 100644 --- a/website/translated_docs/de/REST/$querypath.md +++ b/website/translated_docs/de/REST/$querypath.md @@ -5,7 +5,7 @@ title: '$querypath' Returns the query as it was executed by 4D Server (*e.g.*, `$querypath=true`) -## Beschreibung +## Description `$querypath` returns the query as it was executed by 4D Server. If, for example, a part of the query passed returns no entities, the rest of the query is not executed. The query requested is optimized as you can see in this `$querypath`. @@ -13,14 +13,14 @@ For more information about query paths, refer to [queryPlan and queryPath](genIn In the steps collection, there is an object with the following properties defining the query executed: -| Property | Typ | Beschreibung | +| Property | Type | Description | | ------------- | ---------- | --------------------------------------------------------------------------- | | description | String | Actual query executed or "AND" when there are multiple steps | -| time | Zahl | Number of milliseconds needed to execute the query | -| recordsfounds | Zahl | Number of records found | +| time | Number | Number of milliseconds needed to execute the query | +| recordsfounds | Number | Number of records found | | steps | Collection | An collection with an object defining the subsequent step of the query path | -## Beispiel +## Example If you passed the following query: From e6585fb50f54652f9aa7899a3bdf158d7015b714 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:54:49 +0100 Subject: [PATCH 186/311] New translations $orderby.md (German) --- website/translated_docs/de/REST/$orderby.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/de/REST/$orderby.md b/website/translated_docs/de/REST/$orderby.md index 888edb84ef7e5e..17481423abd973 100644 --- a/website/translated_docs/de/REST/$orderby.md +++ b/website/translated_docs/de/REST/$orderby.md @@ -6,12 +6,12 @@ title: '$orderby' Sorts the data returned by the attribute and sorting order defined (*e.g.*, `$orderby="lastName desc, salary asc"`) -## Beschreibung +## Description `$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"`. -## Beispiel +## Example In this example, we retrieve entities and sort them at the same time: From 008fdeccbffc08ee060d7a0377a0a06e45112a57 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:54:49 +0100 Subject: [PATCH 187/311] New translations shared.md (Japanese) --- website/translated_docs/ja/Concepts/shared.md | 131 +++++++++--------- 1 file changed, 65 insertions(+), 66 deletions(-) diff --git a/website/translated_docs/ja/Concepts/shared.md b/website/translated_docs/ja/Concepts/shared.md index 76a02aefc5d803..8985b81f33c743 100644 --- a/website/translated_docs/ja/Concepts/shared.md +++ b/website/translated_docs/ja/Concepts/shared.md @@ -1,33 +1,33 @@ --- id: shared -title: 共有オブジェクトと共有コレクション +title: Shared objects and collections --- -**共有オブジェクト** および **共有コレクション** はプロセス間でコンテンツを共有することができる、特殊な [オブジェクト](Concepts/dt_object.md) と [コレクション](Concepts/dt_collection.md) です。 [インタープロセス変数](Concepts/variables.md#インタープロセス変数) に比べると、共有オブジェクトと共有コレクションは **プリエンプティブ4Dプロセス** と互換性があるという点で利点があります。つまり、`New process` や `CALL WORKER` といったコマンドの引数として、参照の形で渡すことができるということです。 +**Shared objects** and **shared collections** are specific [objects](Concepts/dt_object.md) and [collections](Concepts/dt_collection.md) whose contents are shared between processes. In contrast to [interprocess variables](Concepts/variables.md#interprocess-variables), shared objects and shared collections have the advantage of being compatible with **preemptive 4D processes**: they can be passed by reference as parameters to commands such as `New process` or `CALL WORKER`. -共有オブジェクトと共有コレクションは、標準の `C_OBJECT` と `C_COLLECTION` コマンドで宣言された変数に保存することができますが、専用のコマンドを使用してインスタンス化されている必要があります: +Shared objects and shared collections can be stored in variables declared with standard `C_OBJECT` and `C_COLLECTION` commands, but must be instantiated using specific commands: -- 共有オブジェクトを作成するには、`New shared object` コマンドを使用します。 -- 共有コレクションを作成するには、`New shared collection` コマンドを使用します。 +- to create a shared object, use the `New shared object` command, +- to create a shared collection, use the `New shared collection` command. -**注:** 共有オブジェクトと共有コレクションは標準の (非共有の) オブジェクトおよびコレクションのプロパティとして設定することができます。 +**Note:** Shared objects and collections can be set as properties of standard (not shared) objects or collections. -共有オブジェクト/コレクションを編集するには、**Use...End use** 構文を使う必要があります。 共有オブジェクト/コレクションの値を読むにあたっては、**Use...End use** は必要ありません。 +In order to modify a shared object/collection, the **Use...End use** structure must be called. Reading a shared object/collection value does not require **Use...End use**. -`Storage` コマンドが返す、データベースにおいて固有かつグローバルなカタログは、そのアプリケーション内あるいはコンポーネントからいつでも利用することができ、すべての共有オブジェクトおよびコレクションを保存するのに使用することができます。 +A unique, global catalog returned by the `Storage` command is always available throughout the application and its components, and can be used to store all shared objects and collections. -## 共有オブジェクト/共有コレクションの使用 +## Using shared objects or collections -`New shared object` あるいは `New shared collection` コマンドでインスタンス化されると、その共有オブジェクト/コレクションの属性と要素はどのプロセスからでも編集/読み出しができるようになります。 +Once instantiated with the `New shared object` or `New shared collection` commands, shared object/collection properties and elements can be modified or read from any process of the application. -### 編集 +### Modification -共有オブジェクトと共有コレクションは、編集することが可能です: +Modifications can be applied to shared objects and shared collections: -- オブジェクトプロパティの追加・削除 -- 値の追加・編集 (共有オブジェクトがサポートしている範囲内で)。これには、他の共有オブジェクトやコレクションの追加・編集も含まれます (この場合、共有グループを作成します。後述参照) +- adding or removing object properties, +- adding or editing values (provided they are supported in shared objects), including other shared objects or collections (which creates a shared group, see below). -ただし、共有オブジェクトあるいは共有コレクションを編集するコードは、必ず `Use...End use` 構文に組み込まれている必要があり、そうでない場合にはエラーが返されます。 +However, all modification instructions in a shared object or collection must be surrounded by the `Use...End use` keywords, otherwise an error is generated. ```4d $s_obj:=New shared object("prop1";"alpha") @@ -36,67 +36,67 @@ title: 共有オブジェクトと共有コレクション End Use ``` -一度に 1プロセスのみ、共有オブジェクト/コレクションを編集することができます。 `Use` は共有オブジェクト/コレクションを他のスレッドからアクセスできないようにロックする一方、`End use` はこのロックを解除します (ロックカウンターが 0 の場合; 後述参照)。 . `Use...End use` を使わずに共有オブジェクト/コレクションを編集しようとすると、エラーが生成されます。 すでに他のプロセスによって使用されている共有オブジェクト/コレクションに対して、別のプロセスが `Use...End use` を呼び出した場合、先着プロセスが `End use` でロックを解除するまで、その呼び出しは待機状態になります (エラーは生成されません)。 したがって、`Use...End use` 構文内の処理は迅速に実行され、ロックは可及的速やかに解除される必要があります。 そのため、共有オブジェクト/コレクションをインターフェース(ダイアログボックスなど) から直接編集することは避けることが強く推奨されます。 +A shared object/collection can only be modified by one process at a time. `Use` locks the shared object/collection from other threads, while `End use` unlocks the shared object/collection (if the locking counter is at 0, see below). . Trying to modify a shared object/collection without at least one `Use...End use` generates an error. When a process calls `Use...End use` on a shared object/collection that is already in use by another process, it is simply put on hold until the `End use` unlocks it (no error is generated). Consequently, instructions within `Use...End use` structures should execute quickly and unlock the elements as soon as possible. Thus, it is strongly advised to avoid modifying a shared object or collection directly from the interface, e.g. through a dialog box. -共有オブジェクト/コレクションを他の共有オブジェクト/コレクションのプロパティあるいは要素に割り当てることは可能で、このとき **共有グループ** が作成されます。 共有グループは、共有オブジェクト/コレクションのプロパティ値あるいは要素として他の共有オブジェクト/コレクションが設定されたときに自動的に作成されます。 共有グループを使用すると共有オブジェクトを入れ子にすることができますが、以下のルールに気をつける必要があります: +Assigning shared objects/collections to properties or elements of other shared objects/collections is allowed and creates **shared groups**. A shared group is automatically created when a shared object/collection is set as property value or element of another shared object/collection. Shared groups allow nesting shared objects and collections but enforce additional rules: -- あるグループの共有オブジェクト/コレクションに対して `Use` を使うと、そのグループに所属するすべての共有オブジェクト/コレクションのプロパティ/要素がロックされ、ロックカウンターを 1 増加させます。 `End use` はグループのロックカウンターを 1 減らします。カウンターが 0 になると、すべてのリンクされた共有オブジェクト/コレクションのロックが解除されます。 -- 共有オブジェクト/コレクションは一つの共有グループにしか所属することができません。 すでにグループに所属している共有オブジェクト/コレクションを他のグループへと割り当てようとした場合、エラーが返されます。 -- 一旦グループ化された共有オブジェクト/コレクションについて、グループを解除することはできません。 一度共有グループに含まれた共有オブジェクト/コレクションは、セッション中はずっと同グループに所属することになります。 親オブジェクト/コレクションから子オブジェクト/コレクションへの参照をすべて削除したとしても、両者のリンクが解除されるわけではありません。 +- Calling `Use` on a shared object/collection belonging to a group locks properties/elements of all shared objects/collections of the group and increments its locking counter. Calling `End use` decrements the locking counter of the group and when the counter is at 0, all the linked shared objects/collections are unlocked. +- A shared object/collection can only belong to one shared group. An error is returned if you try to set an already grouped shared object/collection to a different group. +- Grouped shared objects/collections cannot be ungrouped. Once included in a shared group, a shared object/collection is linked permanently to that group during the whole session. Even if all references of an object/collection are removed from the parent object/collection, they will remain linked. -共有グループのルールについての詳細は、例題2を参照してください。 +Please refer to example 2 for an illustration of shared group rules. -**注:** 共有グループは、*ロック識別子* と呼ばれる内部プロパティによって管理されています。 この値についての詳細は、[ランゲージリファレンス](https://doc.4d.com/4Dv18/4D/18/Shared-objects-and-shared-collections.300-4505654.ja.html#3648963) を参照ください。 +**Note:** Shared groups are managed through an internal property named *locking identifier*. For detailed information on this value, please refer to the 4D Developer's guide. -### 読み出し +### Read -たとえ共有オブジェクト/コレクションが他のプロセスによって使用中であっても、それらのプロパティや要素は、`Use...End use` 構文を呼び出さずとも取得することが可能です。 +Reading properties or elements of a shared object/collection is allowed without having to call the `Use...End use` structure, even if the shared object/collection is in use by another process. -ただし、複数の値が互いにリンクしていてそれらを一度に読み出す必要がある場合には、一貫性の観点から、共有オブジェクト/コレクションを `Use...End use` 内で扱う必要があります。 +However, it is necessary to read a shared object/collection within `Use...End use` when several values are linked together and must be read at once, for consistency reasons. -### 複製 +### Duplication -共有オブジェクト (あるいは共有オブジェクトをプロパティとして格納しているオブジェクト) に対して `OB Copy` コマンドを使用することは可能ですが、含まれている子オブジェクト含め、標準 (非共有) のオブジェクトが戻り値として返されます。 +Calling `OB Copy` with a shared object (or with an object containing shared object(s) as properties) is possible, but will return a standard (not shared) object including its contained objects (if any). -### ストレージ +### Storage -**ストレージ** は固有の共有オブジェクトで、各アプリケーションおよびマシン上で利用可能です。 この共有オブジェクトは `Storage` コマンドから返されます。 このオブジェクトは、他のプリエンティブあるいは標準プロセスからでも利用出来るように、セッション中に定義されたすべての共有オブジェクト/コレクションを参照するためのものです。 +**Storage** is a unique shared object, automatically available on each application and machine. This shared object is returned by the `Storage` command. You can use this object to reference all shared objects/collections defined during the session that you want to be available from any preemptive or standard processes. -`ストレージ` オブジェクトは標準の共有オブジェクトとは異なり、共有オブジェクト/コレクションがプロパティとして追加されたときでも共有グループを作成しないという点に注意してください。 この例外的な振る舞いにより、**ストレージ** オブジェクトを使用するたびに、リンクされている共有オブジェクト/コレクションをすべてロックせずに済みます。 +Note that, unlike standard shared objects, the `storage` object does not create a shared group when shared objects/collections are added as its properties. This exception allows the **Storage** object to be used without locking all connected shared objects or collections. -詳細な情報については、`Storage` コマンドの詳細を参照してください。 +For more information, refer to the `Storage` command description. ## Use...End use -`Use...End use` 構文の正式なシンタックスは、以下の通りです: +The formal syntax of the `Use...End use` structure is: ```4d Use(Shared_object_or_Shared_collection) - statement(s) // ステートメント + statement(s) End use ``` -`Use...End use` 構文は、内部セマフォーの保護下において *Shared_object_or_Shared_collection* 引数に対して処理を実行するステートメントを定義します。 *Shared_object_or_Shared_collection* として任意の有効な共有オブジェクトあるいは共有コレクションを渡すことができます。 +The `Use...End use` structure defines a sequence of statements that will execute tasks on the *Shared_object_or_Shared_collection* parameter under the protection of an internal semaphore. *Shared_object_or_Shared_collection* can be any valid shared object or shared collection. -共有オブジェクトおよび共有コレクションは、プロセス間の (とくに **プリエンプティブ4Dプロセス** 間の) 通信ができるように設計されています 。 これらはプロセスから他のプロセスへ、参照型の引数として渡すことができます。 共有オブジェクトおよび共有コレクションについての詳細な情報については、**共有オブジェクトと共有コレクション** を参照してください。 共有オブジェクトおよび共有コレクションを扱う際には、複数プロセスによる同時アクセスを避けるために、必ずそれらを `Use...End use` キーワードでくくる必要があります。 +Shared objects and shared collections are designed to allow communication between processes, in particular, **preemptive 4D processes**. They can be passed by reference as parameters from a process to another one. For detailed information on shared objects or shared collections, refer to the **Shared objects and shared collections** page. Surrounding modifications on shared objects or shared collections by the `Use...End use` keywords is mandatory to prevent concurrent access between processes. -- **Use** の実行が成功すると、対応する **End use が実行されるまで、_Shared_object_or_Shared_collection_ のプすべてのロパティ/要素は他のあらゆるプロセスに対し書き込みアクセスがロックされます。 -- _statement(s)_ で実行されるステートメントは、*Shared_object_or_Shared_collection* のプロパティ/要素に対して、競合アクセスのリスクなしに変更も実行することができます。 -- _Shared_object_or_Shared_collection_ に他の共有オブジェクトあるいはコレクションがプロパティとして追加された場合、それらも同じ共有グループとして連結されます (**共有オブジェクト/共有コレクションの使用** を参照してください)。 -- **Use...End use ** 内ステートメントの実行中に、他のプロセスが _Shared_object_or_Shared_collection_ のプロパティやリンクされたプロパティにアクセスしようとした場合、そのアクセスは自動的に保留され、実行中の処理が終了するまで待機します。 -- **End use** は、_Shared_object_or_Shared_collection_ プロパティおよび、同じグループのすべてのオブジェクトのロックを解除します。 -- 4D コード内では、複数の **Use...End use** 構文を入れ子にすることができます。 グループの場合、**Use** を使用するごとにグループのロックカウンターが 1 増加し、 **End use** ごとに 1 減少します。最後の **End use** によってロックカウンターが 0 になった場合にのみ、すべてのプロパティ/要素のロックが解除されます。 +- Once the **Use** line is successfully executed, all _Shared_object_or_Shared_collection_ properties/elements are locked for all other process in write access until the corresponding `End use` line is executed. +- The _statement(s)_ sequence can execute any modification on the Shared_object_or_Shared_collection properties/elements without risk of concurrent access. +- If another shared object or collection is added as a property of the _Shared_object_or_Shared_collection_ parameter, they become connected within the same shared group (see **Using shared objects or collections**). +- If another process tries to access one of the _Shared_object_or_Shared_collection_ properties or connected properties while a **Use...End use** sequence is being executed, it is automatically put on hold and waits until the current sequence is terminated. +- The **End use** line unlocks the _Shared_object_or_Shared_collection_ properties and all objects of the same group. +- Several **Use...End use** structures can be nested in the 4D code. In the case of a group, each **Use** increments the locking counter of the group and each **End use** decrements it; all properties/elements will be released only when the last **End use** call sets the locking counter to 0. -**注:** コレクションのメンバーメソッドが共有コレクションを変更する場合、そのメソッド実行中は、対象の共有コレクションに対して **Use** が内部的に自動で呼ばれます。 +**Note:** If a collection method modifies a shared collection, an internal **Use** is automatically called for this shared collection while the function is executed. -## 例題 1 +## Example 1 -それぞれ異なる製品の在庫更新を実行する複数のプロセスを起動し、同じ共有オブジェクトを更新していきます。 まずメインプロセスで空の共有オブジェクトをインスタンス化してから、共有オブジェクトへの参照と対象製品を引数として渡して別プロセス起動します: +You want to launch several processes that perform an inventory task on different products and update the same shared object. The main process instantiates an empty shared object and then, launches the other processes, passing the shared object and the products to count as parameters: ```4d ARRAY TEXT($_items;0) - ... // 在庫を確認する製品を配列に格納します + ... //fill the array with items to count $nbItems:=Size of array($_items) C_OBJECT($inventory) $inventory:=New shared object @@ -104,60 +104,59 @@ title: 共有オブジェクトと共有コレクション $inventory.nbItems:=$nbItems End use - // プロセスを起動します + //Create processes For($i;1;$nbItems) $ps:=New process("HowMany";0;"HowMany_"+$_items{$i};$_items{$i};$inventory) - // $inventory オブジェクトは参照で渡されます + //$inventory object sent by reference End for ``` -"HowMany" メソッド内では、在庫確認が終わるとすぐに $inventory 共有オブジェクトが更新されます: +In the "HowMany" method, inventory is done and the $inventory shared object is updated as soon as possible: ```4d C_TEXT($1) C_TEXT($what) C_OBJECT($2) C_OBJECT($inventory) - $what:=$1 // 可読性のため + $what:=$1 //for better readability $inventory:=$2 - $count:=CountMethod($what) // 在庫確認用のメソッド - Use($inventory) // 共有オブジェクトを使用します - $inventory[$what]:=$count // 当該製品の在庫を保存します + $count:=CountMethod($what) //method to count products + Use($inventory) //use shared object + $inventory[$what]:=$count //save the results for this item End use ``` -## 例題 2 +## Example 2 -以下の例題は、共有グループを扱う際のルールについて説明しています: +The following examples highlight specific rules when handling shared groups: ```4d $ob1:=New shared object $ob2:=New shared object Use($ob1) - $ob1.a:=$ob2 // グループ1 が作成されます + $ob1.a:=$ob2 //group 1 is created End use $ob3:=New shared object $ob4:=New shared object Use($ob3) - $ob3.a:=$ob4 // グループ2 が作成されます + $ob3.a:=$ob4 //group 2 is created End use - Use($ob1) // グループ1のオブジェクトを使用します - $ob1.b:=$ob4 // これはエラーになります - // $ob4 はすでに他のグループに所属しているため - // 代入することはできません + Use($ob1) //use an object from group 1 + $ob1.b:=$ob4 //ERROR + //$ob4 already belongs to another group + //assignment is not allowed End use Use($ob3) - $ob3.a:=Null // グループ2から$ob4 への参照をすべて解除します - + $ob3.a:=Null //remove any reference to $ob4 from group 2 End use - Use($ob1) // グループ1のオブジェクトを使用します - $ob1.b:=$ob4 // これもエラーになります - // $ob4 は依然としてグループ2に所属しているため - // 代入は不可能です + Use($ob1) //use an object from group 1 + $ob1.b:=$ob4 //ERROR + //$ob4 still belongs to group 2 + //assignment is not allowed End use ``` From 44a55aa862a2a17838a6f6c7ffae1f29af98531a Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:54:51 +0100 Subject: [PATCH 188/311] New translations $method.md (German) --- website/translated_docs/de/REST/$method.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/website/translated_docs/de/REST/$method.md b/website/translated_docs/de/REST/$method.md index 20daaa13cf96c3..c9e72360ff205f 100644 --- a/website/translated_docs/de/REST/$method.md +++ b/website/translated_docs/de/REST/$method.md @@ -7,7 +7,7 @@ This parameter allows you to define the operation to execute with the returned e ## Available syntaxes -| Syntax | Beispiel | Beschreibung | +| Syntax | Example | Description | | ----------------------------------------------- | ----------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | | [**$method=delete**](#methoddelete) | `POST /Employee?$filter="ID=11"& $method=delete` | Deletes the current entity, entity collection, or entity selection | | [**$method=entityset**](#methodentityset) | `GET /People/?$filter="ID>320"& $method=entityset& $timeout=600` | Creates an entity set in 4D Server's cache based on the collection of entities defined in the REST request | @@ -24,13 +24,13 @@ This parameter allows you to define the operation to execute with the returned e Deletes the current entity, entity collection, or entity selection (created through REST) -### Beschreibung +### Description With `$method=delete`, you can delete an entity or an entire entity collection. You can define the collection of entities by using, for example, [`$filter`]($filter.md) or specifying one directly using [`{dataClass}({key})`](%7BdataClass%7D.html#dataclasskey) *(e.g.*, /Employee(22)). You can also delete the entities in an entity set, by calling [`$entityset/{entitySetID}`]($entityset.md#entitysetentitysetid). -## Beispiel +## Example You can then write the following REST request to delete the entity whose key is 22: `POST /rest/Employee(22)/?$method=delete` @@ -57,13 +57,13 @@ Response: Creates an entity set in 4D Server's cache based on the collection of entities defined in the REST request -### Beschreibung +### Description When you create a collection of entities in REST, you can also create an entity set that will be saved in 4D Server's cache. The entity set will have a reference number that you can pass to `$entityset/{entitySetID}` to access it. By default, it is valid for two hours; however, you can modify that amount of time by passing a value (in seconds) to $timeout. If you have used `$savedfilter` and/or `$savedorderby` (in conjunction with `$filter` and/or `$orderby`) when you created your entity set, you can recreate it with the same reference ID even if it has been removed from 4D Server's cache. -### Beispiel +### Example To create an entity set, which will be saved in 4D Server's cache for two hours, add `$method=entityset` at the end of your REST request: @@ -87,11 +87,11 @@ After you create an entity set, the first element, `__ENTITYSET`, is added to th Releases an existing entity set stored in 4D Server's cache. -### Beschreibung +### Description You can release an entity set, which you created using [`$method=entityset`](#methodentityset), from 4D Server's cache. -### Beispiel +### Example Release an existing entity set: @@ -124,7 +124,7 @@ If the entity set wasn't found, an error is returned: Creates an entity set in 4D Server's cache based on the collection of related entities defined in the REST request -### Beschreibung +### Description `$method=subentityset` allows you to sort the data returned by the relation attribute defined in the REST request. @@ -132,7 +132,7 @@ To sort the data, you use the `$subOrderby` property. For each attribute, you sp If you want to specify multiple attributes, you can delimit them with a comma, µ, `$subOrderby="lastName desc, firstName asc"`. -### Beispiel +### Example If you want to retrieve only the related entities for a specific entity, you can make the following REST request where staff is the relation attribute in the Company dataclass linked to the Employee dataclass: @@ -188,7 +188,7 @@ If you want to retrieve only the related entities for a specific entity, you can Updates and/or creates one or more entities -### Beschreibung +### Description `$method=update` allows you to update and/or create one or more entities in a single **POST**. If you update and/or create one entity, it is done in an object with each property an attribute with its value, *e.g.*, `{ lastName: "Smith" }`. If you update and/or create multiple entities, you must create a collection of objects. @@ -207,7 +207,7 @@ If a problem arises while adding or modifying an entity, an error will be return > * **Booleans** are either true or false. > * Uploaded files using `$upload` can be applied to an attribute of type Image or BLOB by passing the object returned in the following format { "ID": "D507BC03E613487E9B4C2F6A0512FE50"} -### Beispiel +### Example To update a specific entity, you use the following URL: From 1dacf74b567042ff7ebe5dbd347c5254c7c085e8 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:54:53 +0100 Subject: [PATCH 189/311] New translations $info.md (German) --- website/translated_docs/de/REST/$info.md | 26 ++++++++++++------------ 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/website/translated_docs/de/REST/$info.md b/website/translated_docs/de/REST/$info.md index 33a3442bd26ca9..751f3baabde2ca 100644 --- a/website/translated_docs/de/REST/$info.md +++ b/website/translated_docs/de/REST/$info.md @@ -5,14 +5,14 @@ title: '$info' Returns information about the entity sets currently stored in 4D Server's cache as well as user sessions -## Beschreibung +## Description When you call this request for your project, you retrieve information in the following properties: -| Property | Typ | Beschreibung | +| Property | Type | Description | | -------------- | ---------- | ----------------------------------------------------------------------------------- | -| cacheSize | Zahl | 4D Server's cache size. | -| usedCache | Zahl | How much of 4D Server's cache has been used. | -| entitySetCount | Zahl | Number of entity selections. | +| cacheSize | Number | 4D Server's cache size. | +| usedCache | Number | How much of 4D Server's cache has been used. | +| entitySetCount | Number | Number of entity selections. | | entitySet | Collection | A collection in which each object contains information about each entity selection. | | ProgressInfo | Collection | A collection containing information about progress indicator information. | | sessionInfo | Collection | A collection in which each object contains information about each user session. | @@ -21,14 +21,14 @@ When you call this request for your project, you retrieve information in the fol For each entity selection currently stored in 4D Server's cache, the following information is returned: -| Property | Typ | Beschreibung | +| Property | Type | Description | | ------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | id | String | A UUID that references the entity set. | | dataClass | String | Name of the datastore class. | -| selectionSize | Zahl | Number of entities in the entity selection. | +| selectionSize | Number | Number of entities in the entity selection. | | sorted | Boolean | Returns true if the set was sorted (using `$orderby`) or false if it's not sorted. | -| refreshed | Datum | When the entity set was created or the last time it was used. | -| expires | Datum | When the entity set will expire (this date/time changes each time when the entity set is refreshed). The difference between refreshed and expires is the timeout for an entity set. This value is either two hours by default or what you defined using `$timeout`. | +| refreshed | Date | When the entity set was created or the last time it was used. | +| expires | Date | When the entity set will expire (this date/time changes each time when the entity set is refreshed). The difference between refreshed and expires is the timeout for an entity set. This value is either two hours by default or what you defined using `$timeout`. | For information about how to create an entity selection, refer to `$method=entityset`. If you want to remove the entity selection from 4D Server's cache, use `$method=release`. > 4D also creates its own entity selections for optimization purposes, so the ones you create with `$method=entityset` are not the only ones returned. @@ -38,14 +38,14 @@ For information about how to create an entity selection, refer to `$method=entit For each user session, the following information is returned in the *sessionInfo* collection: -| Property | Typ | Beschreibung | +| Property | Type | Description | | ---------- | ------ | ------------------------------------------------------------ | | sessionID | String | A UUID that references the session. | | userName | String | The name of the user who runs the session. | -| lifeTime | Zahl | The lifetime of a user session in seconds (3600 by default). | -| expiration | Datum | The current expiration date and time of the user session. | +| lifeTime | Number | The lifetime of a user session in seconds (3600 by default). | +| expiration | Date | The current expiration date and time of the user session. | -## Beispiel +## Example Retrieve information about the entity sets currently stored in 4D Server's cache as well as user sessions: From b47d45c9fe99c9d89e10044ff02e81dfc7f374e1 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:54:55 +0100 Subject: [PATCH 190/311] New translations $imageformat.md (German) --- website/translated_docs/de/REST/$imageformat.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/de/REST/$imageformat.md b/website/translated_docs/de/REST/$imageformat.md index 35276f4678dc8e..ef61f166a921f0 100644 --- a/website/translated_docs/de/REST/$imageformat.md +++ b/website/translated_docs/de/REST/$imageformat.md @@ -5,11 +5,11 @@ title: '$imageformat' Defines which image format to use for retrieving images (*e.g.*, `$imageformat=png`) -## Beschreibung +## Description Define which format to use to display images. By default, the best format for the image will be chosen. You can, however, select one of the following formats: -| Typ | Beschreibung | +| Type | Description | | ---- | ------------------------------ | | GIF | GIF format | | PNG | PNG format | @@ -21,7 +21,7 @@ Once you have defined the format, you must pass the image attribute to [`$expand If there is no image to be loaded or the format doesn't allow the image to be loaded, the response will be empty. -## Beispiel +## Example The following example defines the image format to JPEG regardless of the actual type of the photo and passes the actual version number sent by the server: From 3683ce1bfe8caaf0c86a8593d713bb8e50d77172 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:54:57 +0100 Subject: [PATCH 191/311] New translations $filter.md (German) --- website/translated_docs/de/REST/$filter.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/de/REST/$filter.md b/website/translated_docs/de/REST/$filter.md index 5371c178bd7bcb..e0b8421cabd9a4 100644 --- a/website/translated_docs/de/REST/$filter.md +++ b/website/translated_docs/de/REST/$filter.md @@ -8,7 +8,7 @@ title: '$filter' Allows to query the data in a dataclass or method *(e.g.*, `$filter="firstName!='' AND salary>30000"`) -## Beschreibung +## Description This parameter allows you to define the filter for your dataclass or method. @@ -69,7 +69,7 @@ You can search in the object by writing the following: The comparator must be one of the following values: -| Comparator | Beschreibung | +| Comparator | Description | | ---------- | ------------------------ | | = | equals to | | != | not equal to | @@ -79,7 +79,7 @@ The comparator must be one of the following values: | <= | less than or equal to | | begin | begins with | -## Beispiele +## Examples In the following example, we look for all employees whose last name begins with a "j": From b5e4ab3eba81deafb0a6eea75d59c8b786cbaf93 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:55:01 +0100 Subject: [PATCH 192/311] New translations {dataClass}.md (German) --- .../translated_docs/de/REST/{dataClass}.md | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/website/translated_docs/de/REST/{dataClass}.md b/website/translated_docs/de/REST/{dataClass}.md index ceb79767a5c245..e73c1a08895887 100644 --- a/website/translated_docs/de/REST/{dataClass}.md +++ b/website/translated_docs/de/REST/{dataClass}.md @@ -11,7 +11,7 @@ Dataclass names can be used directly in the REST requests to work with entities ## Available syntaxes -| Syntax | Beispiel | Beschreibung | +| Syntax | Example | Description | | ---------------------------------------------------------------------------------- | ---------------------------------------- | ------------------------------------------------------------------------------- | | [**{dataClass}**](#dataClass) | `/Employee` | Returns all the data (by default the first 100 entities) for the dataclass | | [**{dataClass}({key})**](#dataclasskey) | `/Employee(22)` | Returns the data for the specific entity defined by the dataclass's primary key | @@ -28,35 +28,35 @@ Dataclass names can be used directly in the REST requests to work with entities Returns all the data (by default the first 100 entities) for a specific dataclass (*e.g.*, `Company`) -### Beschreibung +### Description When you call this parameter in your REST request, the first 100 entities are returned unless you have specified a value using [`$top/$limit`]($top_$limit.md). Here is a description of the data returned: -| Property | Typ | Beschreibung | +| Property | Type | Description | | ------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | __entityModel | String | Name of the datastore class. | -| __COUNT | Zahl | Number of entities in the datastore class. | -| __SENT | Zahl | Number of entities sent by the REST request. This number can be the total number of entities if it is less than the value defined by `$top/$limit`. | -| __FIRST | Zahl | Entity number that the selection starts at. Either 0 by default or the value defined by `$skip`. | +| __COUNT | Number | Number of entities in the datastore class. | +| __SENT | Number | Number of entities sent by the REST request. This number can be the total number of entities if it is less than the value defined by `$top/$limit`. | +| __FIRST | Number | Entity number that the selection starts at. Either 0 by default or the value defined by `$skip`. | | __ENTITIES | Collection | This collection of objects contains an object for each entity with all its attributes. All relational attributes are returned as objects with a URI to obtain information regarding the parent. | Each entity contains the following properties: -| Property | Typ | Beschreibung | +| Property | Type | Description | | ----------- | ------ | ---------------------------------------------------------------------------------------------------------- | | __KEY | String | Value of the primary key defined for the datastore class. | -| __TIMESTAMP | Datum | Timestamp of the last modification of the entity | -| __STAMP | Zahl | Internal stamp that is needed when you modify any of the values in the entity when using `$method=update`. | +| __TIMESTAMP | Date | Timestamp of the last modification of the entity | +| __STAMP | Number | Internal stamp that is needed when you modify any of the values in the entity when using `$method=update`. | -If you want to specify which attributes you want to return, define them using the following syntax [{attribute1, attribute2, ...}](manData.md##selecting-attributes-to-get). Beispiel: +If you want to specify which attributes you want to return, define them using the following syntax [{attribute1, attribute2, ...}](manData.md##selecting-attributes-to-get). For example: `GET /rest/Company/name,address` -### Beispiel +### Example Return all the data for a specific datastore class. @@ -146,13 +146,13 @@ Return all the data for a specific datastore class. Returns the data for the specific entity defined by the dataclass's primary key, *e.g.*, `Company(22) or Company("IT0911AB2200")` -### Beschreibung +### Description By passing the dataclass and a key, you can retrieve all the public information for that entity. The key is the value in the attribute defined as the Primary Key for your datastore class. For more information about defining a primary key, refer to the **Modifying the Primary Key** section in the **Data Model Editor**. For more information about the data returned, refer to [{datastoreClass}](#datastoreclass). -If you want to specify which attributes you want to return, define them using the following syntax [{attribute1, attribute2, ...}](manData.md##selecting-attributes-to-get). Beispiel: +If you want to specify which attributes you want to return, define them using the following syntax [{attribute1, attribute2, ...}](manData.md##selecting-attributes-to-get). For example: `GET /rest/Company(1)/name,address` @@ -160,7 +160,7 @@ If you want to expand a relation attribute using `$expand`, you do so by specify `GET /rest/Company(1)/name,address,staff?$expand=staff` -### Beispiel +### Example The following request returns all the public data in the Company datastore class whose key is 1. @@ -195,13 +195,13 @@ The following request returns all the public data in the Company datastore class Returns the data for one entity in which the attribute's value is defined -### Beschreibung +### Description By passing the *dataClass* and an *attribute* along with a value, you can retrieve all the public information for that entity. The value is a unique value for attribute, but is not the primary key. `GET /rest/Company:companyCode(Acme001)` -If you want to specify which attributes you want to return, define them using the following syntax [{attribute1, attribute2, ...}](manData.md##selecting-attributes-to-get). Beispiel: +If you want to specify which attributes you want to return, define them using the following syntax [{attribute1, attribute2, ...}](manData.md##selecting-attributes-to-get). For example: `GET /rest/Company:companyCode(Acme001)/name,address` @@ -209,7 +209,7 @@ If you want to use a relation attribute using [$attributes]($attributes.md), you `GET /rest/Company:companyCode(Acme001)?$attributes=name,address,staff.name` -### Beispiel +### Example The following request returns all the public data of the employee named "Jones". From 3a571fb894cc31cfaac9a3a44b0e8cdcdda13f83 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:55:04 +0100 Subject: [PATCH 193/311] New translations $distinct.md (German) --- website/translated_docs/de/REST/$distinct.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/de/REST/$distinct.md b/website/translated_docs/de/REST/$distinct.md index 859e005472e93a..6c6c98ab886a47 100644 --- a/website/translated_docs/de/REST/$distinct.md +++ b/website/translated_docs/de/REST/$distinct.md @@ -7,13 +7,13 @@ title: '$distinct' Returns the distinct values for a specific attribute in a collection (*e.g.*, `Company/name?$filter="name=a*"&$distinct=true`) -## Beschreibung +## Description `$distinct` allows you to return a collection containing the distinct values for a query on a specific attribute. Only one attribute in the dataclass can be specified. Generally, the String type is best; however, you can also use it on any attribute type that could contain multiple values. You can also use `$skip` and `$top/$limit` as well, if you'd like to navigate the selection before it's placed in an array. -## Beispiel +## Example In our example below, we want to retrieve the distinct values for a company name starting with the letter "a": `GET /rest/Company/name?$filter="name=a*"&$distinct=true` From 85f7190c54980d3bb2900031cf012d6a9c8c4591 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:55:06 +0100 Subject: [PATCH 194/311] New translations zipArchiveClass.md (German) --- .../translated_docs/de/API/zipArchiveClass.md | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/website/translated_docs/de/API/zipArchiveClass.md b/website/translated_docs/de/API/zipArchiveClass.md index 96403db23b263a..d31e4972f79caf 100644 --- a/website/translated_docs/de/API/zipArchiveClass.md +++ b/website/translated_docs/de/API/zipArchiveClass.md @@ -10,7 +10,7 @@ A 4D ZIP archive is a `File` or `Folder` object containing one or more files or - 4D [`ZIPFile`](zipFileClass.md) and [`ZIPFolder`](zipFolderClass.md) instances are available through the [`root`](#root) property (`ZIPFolder`) of the object returned by [ZIP Read archive](#zip-read-archive) command. -### Beispiel +### Example To retrieve and view the contents of a ZIP file object: @@ -50,18 +50,18 @@ End if **ZIP Create archive** ( *fileToZip* : 4D.File ; *destinationFile* : 4D.File ) : Object
    **ZIP Create archive** ( *folderToZip* : 4D.Folder ; *destinationFile* : 4D.File { ; *options* : Integer }) : Object
    **ZIP Create archive** ( *zipStructure* : Object ; *destinationFile* : 4D.File ) : Object -| Parameter | Typ | | Beschreibung | +| Parameter | Type | | Description | | --------------- | --------- |:--:| ---------------------------------------------------- | | fileToZip | 4D.File | -> | File or Folder object to compress | | folderToZip | 4D.Folder | -> | File or Folder object to compress | -| zipStructure | Objekt | -> | File or Folder object to compress | +| zipStructure | Object | -> | File or Folder object to compress | | destinationFile | 4D.File | -> | Destination file for the archive | -| options | Ganzzahl | -> | *folderToZip* option: `ZIP Without enclosing folder` | -| Ergebnis | Objekt | <- | Status object | +| options | Integer | -> | *folderToZip* option: `ZIP Without enclosing folder` | +| Result | Object | <- | Status object | -#### Beschreibung +#### Description The `ZIP Create archive` command creates a compressed ZIP archive object and returns the status of the operation. @@ -78,11 +78,11 @@ You can pass a 4D.File, a 4D.Folder, or a zip structure object as first paramete - Typ + Type - Beschreibung + Description @@ -151,17 +151,17 @@ Once an archive is created, you can use the [ZIP Read archive](#zip-read-archive The returned status object contains the following properties: -| Property | Typ | Beschreibung | -| ---------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------- | -| statusText | Text | Error message (if any):

  • Cannot open ZIP archive
  • Cannot create ZIP archive
  • Password is required for encryption | -| status | Ganzzahl | Status code | -| success | Boolean | True if archive created successfully, else false | +| Property | Type | Description | +| ---------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| statusText | Text | Error message (if any):
  • Cannot open ZIP archive
  • Cannot create ZIP archive
  • Password is required for encryption | +| status | Integer | Status code | +| success | Boolean | True if archive created successfully, else false | -#### Beispiel 1 +#### Example 1 To compress a `4D.File`: @@ -181,7 +181,7 @@ To compress a `4D.File`: -#### Beispiel 2 +#### Example 2 To compress a `4D.Folder` without the folder itself: @@ -275,15 +275,15 @@ You want to pass a collection of folders and files to compress to the *zipStruct **ZIP Read archive** ( *zipFile* : 4D.File { ; *password* : Text }) : 4D.ZipArchive -| Parameter | Typ | | Beschreibung | +| Parameter | Type | | Description | | --------- | ------------- |:--:| --------------------------- | | zipFile | 4D.File | -> | Zip archive file | | password | Text | -> | ZIP archive password if any | -| Ergebnis | 4D.ZipArchive | <- | Archive object | +| Result | 4D.ZipArchive | <- | Archive object | -#### Beschreibung +#### Description The `ZIP Read archive` command retrieves the contents of *zipFile* and returns it as a `4D.ZipArchive` object. @@ -303,7 +303,7 @@ The returned `4D.ZipArchive` object contains a single [`root`](#root) property w -#### Beispiel +#### Example To retrieve and view the contents of a ZIP file object: @@ -365,7 +365,7 @@ To extract from the root folder: **.root** : 4D.ZipFolder -#### Beschreibung +#### Description The `.root` property contains a virtual folder providing access to the contents of the ZIP archive. From 9649adb6d63fc0f1d8921280b83a6a4bdfa73529 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:55:14 +0100 Subject: [PATCH 195/311] New translations zipFolderClass.md (German) --- website/translated_docs/de/API/zipFolderClass.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/API/zipFolderClass.md b/website/translated_docs/de/API/zipFolderClass.md index fd81803650d211..aa377c9bfa20be 100644 --- a/website/translated_docs/de/API/zipFolderClass.md +++ b/website/translated_docs/de/API/zipFolderClass.md @@ -7,7 +7,7 @@ title: ZIPFolder The following properties and functions from the [Folder](folderClass.md) class are available to `ZIPFolder` objects: -| Available [Folder](folderClass.md) APIs for ZIPFolder | Kommentar | +| Available [Folder](folderClass.md) APIs for ZIPFolder | Comment | | ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------- | | [](folderClass.md#copyto) | | | [](folderClass.md#creationdate) | Date may be different for the `root` folder from a folder within the archive | From 7a95ef976da57f704298a0e93243e6cd8f360a3f Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:55:17 +0100 Subject: [PATCH 196/311] New translations zipFileClass.md (German) --- website/translated_docs/de/API/zipFileClass.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/API/zipFileClass.md b/website/translated_docs/de/API/zipFileClass.md index c3977aa1abce4a..34c42602eea48e 100644 --- a/website/translated_docs/de/API/zipFileClass.md +++ b/website/translated_docs/de/API/zipFileClass.md @@ -5,7 +5,7 @@ title: ZIPFile The following properties and functions from the [File](fileClass.md) class are available to `ZIPFile` objects: -| Available [File](fileClass.md) APIs for ZIPFile | Kommentar | +| Available [File](fileClass.md) APIs for ZIPFile | Comment | | --------------------------------------------------------------------------------------------- | -------------------------------------- | | [](fileClass.md#copyto) | | | [](fileClass.md#creationdate) | | From df629e31c3abe370c89b1e62b1e61defb2b86938 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:55:20 +0100 Subject: [PATCH 197/311] New translations webServerClass.md (German) --- .../translated_docs/de/API/webServerClass.md | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/website/translated_docs/de/API/webServerClass.md b/website/translated_docs/de/API/webServerClass.md index f0d9c435369734..b86aa4a1d4776e 100644 --- a/website/translated_docs/de/API/webServerClass.md +++ b/website/translated_docs/de/API/webServerClass.md @@ -70,10 +70,10 @@ They provide the following properties and functions: -| Parameter | Typ | | Beschreibung | +| Parameter | Type | | Description | | --------- | ------------ | -- | -------------------------------------------------------------- | -| option | Ganzzahl | -> | Web server to get (default if omitted = `Web server database`) | -| Ergebnis | 4D.WebServer | <- | Web server object | +| option | Integer | -> | Web server to get (default if omitted = `Web server database`) | +| Result | 4D.WebServer | <- | Web server object | @@ -81,15 +81,15 @@ The `WEB Server` command returns the d By default, if the *option* parameter is omitted, the command returns a reference to the Web server of the database, i.e. the default Web server. To designate the Web server to return, you can pass one of the following constants in the *option* parameter: -| Constant | Wert | Kommentar | -| ------------------------------ | ---- | -------------------------------------------------------- | -| `Web server database` | 1 | Current database Web server (default if omitted) | -| `Web server host database` | 2 | Web server of the host database of a component | -| `Web server receiving request` | 3 | Web server that received the request (target Web server) | +| Constant | Value | Comment | +| ------------------------------ | ----- | -------------------------------------------------------- | +| `Web server database` | 1 | Current database Web server (default if omitted) | +| `Web server host database` | 2 | Web server of the host database of a component | +| `Web server receiving request` | 3 | Web server that received the request (target Web server) | The returned Web server object contains the current values of the Web server properties. -#### Beispiel +#### Example From your component, you want to know if the Web server of the host database is started: @@ -116,9 +116,9 @@ From your component, you want to know if the Web server of the host database is -| Parameter | Typ | | Beschreibung | +| Parameter | Type | | Description | | --------- | ---------- | -- | ---------------------------------------------- | -| Ergebnis | Collection | <- | Collection of the available Web server objects | +| Result | Collection | <- | Collection of the available Web server objects | @@ -136,7 +136,7 @@ All available Web servers are returned by the `WEB Server list` command, whether You can use the [.name](#name) property of the Web server object to identify the project or component to which each Web server object in the list is attached. -#### Beispiel +#### Example We want to know how many running web servers are available: @@ -723,10 +723,10 @@ The IP address va -| Parameter | Typ | | Beschreibung | +| Parameter | Type | | Description | | --------- | ------ | -- | ------------------------------------- | -| settings | Objekt | -> | Web server settings to set at startup | -| Ergebnis | Objekt | <- | Status of the web server startup | +| settings | Object | -> | Web server settings to set at startup | +| Result | Object | <- | Status of the web server startup | @@ -741,16 +741,16 @@ Customized session settings will be reset when the [`.stop()`](#stop) function i The function returns an object describing the Web server launch status. This object can contain the following properties: -| Property | | Typ | Beschreibung | +| Property | | Type | Description | | -------- | ----------------------- | ---------- | -------------------------------------------------------------------- | | success | | Boolean | True if the web server was correctly started, False otherwise | | errors | | Collection | 4D error stack (not returned if the web server started successfully) | -| | \[].errCode | Zahl | 4D error code | +| | \[].errCode | Number | 4D error code | | | \[].message | Text | Description of the 4D error | | | \[].componentSignature | Text | Signature of the internal component which returned the error | > If the Web server was already launched, an error is returned. -#### Beispiel +#### Example ```4d var $settings;$result : Object @@ -783,9 +783,9 @@ The function returns an object describing the Web server launch status. This obj -| Parameter | Typ | | Beschreibung | -| --------- | --- | | ------------------------------- | -| | | | Does not require any parameters | +| Parameter | Type | | Description | +| --------- | ---- | | ------------------------------- | +| | | | Does not require any parameters | @@ -795,7 +795,7 @@ If the web server was started, all web connections and web processes are closed, > This function resets the customized web settings defined for the session using the *settings* parameter of the [`.start()`](#start) function, if any. -#### Beispiel +#### Example To stop the database Web server: From 89545c9d04f134012830f5d8afd5ef73a07d6c4b Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:55:30 +0100 Subject: [PATCH 198/311] New translations webServerObject.md (German) --- website/translated_docs/de/WebServer/webServerObject.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/WebServer/webServerObject.md b/website/translated_docs/de/WebServer/webServerObject.md index e083c3a9d20cc9..e6a8cb25dbddf7 100644 --- a/website/translated_docs/de/WebServer/webServerObject.md +++ b/website/translated_docs/de/WebServer/webServerObject.md @@ -66,7 +66,7 @@ webServer:=WEB Server(Web server receiving request) A [web server class object](API/webServerClass.md#web-server-object) contains the following functions: -| Funktionen | Parameter | Return value | Beschreibung | +| Functions | Parameter | Return value | Description | | ---------------------------------------- | ----------------- | --------------- | --------------------- | | [`start()`](API/webServerClass.md#start) | settings (object) | status (object) | Starts the web server | | [`stop()`](API/webServerClass.md#start) | - | - | Stops the web server | From e3291eb27f6f71fde49095057102eadc9e3e1847 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:55:32 +0100 Subject: [PATCH 199/311] New translations overview.md (German) --- website/translated_docs/de/Users/overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/Users/overview.md b/website/translated_docs/de/Users/overview.md index f2114c2c425804..0c3fc7163d22ce 100644 --- a/website/translated_docs/de/Users/overview.md +++ b/website/translated_docs/de/Users/overview.md @@ -1,6 +1,6 @@ --- id: overview -title: Überblick +title: Overview --- If more than one person uses an application, which is usually the case in client-server architecture or Web interfaces, you need to control access or provide different features according to the connected users. It is also essential to provide security for sensitive data. You can provide this security by assigning passwords to users and creating access groups that have different levels of access to information in the application or to application operations. From 45740a385c3de309401aaa25800467ea47bfc682 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:55:34 +0100 Subject: [PATCH 200/311] New translations $entityset.md (German) --- website/translated_docs/de/REST/$entityset.md | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/website/translated_docs/de/REST/$entityset.md b/website/translated_docs/de/REST/$entityset.md index 3011bdb27d6cb1..b35886a0ba2e95 100644 --- a/website/translated_docs/de/REST/$entityset.md +++ b/website/translated_docs/de/REST/$entityset.md @@ -8,7 +8,7 @@ After [creating an entity set]($method.md#methodentityset) by using `$method=ent ## Available syntaxes -| Syntax | Beispiel | Beschreibung | +| Syntax | Example | Description | | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ------------------------------------------------------------ | | [**$entityset/{entitySetID}**](#entitysetentitySetID) | `/People/$entityset/0ANUMBER` | Retrieves an existing entity set | | [**$entityset/{entitySetID}?$operator...&$otherCollection**](#entitysetentitysetidoperatorothercollection) | `/Employee/$entityset/0ANUMBER?$logicOperator=AND &$otherCollection=C0ANUMBER` | Creates a new entity set from comparing existing entity sets | @@ -21,7 +21,7 @@ After [creating an entity set]($method.md#methodentityset) by using `$method=ent Retrieves an existing entity set (*e.g.*, `People/$entityset/0AF4679A5C394746BFEB68D2162A19FF`) -### Beschreibung +### Description This syntax allows you to execute any operation on a defined entity set. @@ -29,7 +29,7 @@ Because entity sets have a time limit on them (either by default or after callin When you retrieve an existing entity set stored in 4D Server's cache, you can also apply any of the following to the entity set: [`$expand`]($expand.md), [`$filter`]($filter), [`$orderby`]($orderby), [`$skip`]($skip.md), and [`$top/$limit`]($top_$limit.md). -### Beispiel +### Example After you create an entity set, the entity set ID is returned along with the data. You call this ID in the following manner: @@ -40,14 +40,14 @@ After you create an entity set, the entity set ID is returned along with the dat Create another entity set based on previously created entity sets -| Parameter | Typ | Beschreibung | +| Parameter | Type | Description | | ---------------- | ------ | -------------------------------------------------------------- | | $operator | String | One of the logical operators to test with the other entity set | | $otherCollection | String | Entity set ID | -### Beschreibung +### Description After creating an entity set (entity set #1) by using `$method=entityset`, you can then create another entity set by using the `$entityset/{entitySetID}?$operator... &$otherCollection` syntax, the `$operator` property (whose values are shown below), and another entity set (entity set #2) defined by the `$otherCollection` property. The two entity sets must be in the same datastore class. @@ -55,21 +55,21 @@ You can then create another entity set containing the results from this call by Here are the logical operators: -| Operator | Beschreibung | +| Operator | Description | | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | -| UND | Returns the entities in common to both entity sets | -| ODER | Returns the entities in both entity sets | +| AND | Returns the entities in common to both entity sets | +| OR | Returns the entities in both entity sets | | EXCEPT | Returns the entities in entity set #1 minus those in entity set #2 | | INTERSECT | Returns either true or false if there is an intersection of the entities in both entity sets (meaning that least one entity is common in both entity sets) | > The logical operators are not case-sensitive, so you can write "AND" or "and". Below is a representation of the logical operators based on two entity sets. The red section is what is returned. -**UND** +**AND** ![](assets/en/REST/and.png) -**ODER** +**OR** ![](assets/en/REST/or.png) @@ -82,7 +82,7 @@ The syntax is as follows: `GET /rest/dataClass/$entityset/entitySetID?$logicOperator=AND&$otherCollection=entitySetID` -### Beispiel +### Example In the example below, we return the entities that are in both entity sets since we are using the AND logical operator: `GET /rest/Employee/$entityset/9718A30BF61343C796345F3BE5B01CE7?$logicOperator=AND&$otherCollection=C05A0D887C664D4DA1B38366DD21629B` From 32fa85dd178e07a18805be5bd64f7059c7cd1333 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:55:37 +0100 Subject: [PATCH 201/311] New translations $directory.md (German) --- website/translated_docs/de/REST/$directory.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/de/REST/$directory.md b/website/translated_docs/de/REST/$directory.md index 965b46301b7931..f0ac78e4aea2cf 100644 --- a/website/translated_docs/de/REST/$directory.md +++ b/website/translated_docs/de/REST/$directory.md @@ -10,7 +10,7 @@ The directory handles user access through REST requests. Opens a REST session on your 4D application and logs in the user. -### Beschreibung +### Description Use `$directory/login` to open a session in your 4D application through REST and login a user. You can also modify the default 4D session timeout. All parameters must be passed in **headers** of a POST method: @@ -23,7 +23,7 @@ All parameters must be passed in **headers** of a POST method: | session-4D-length | Session inactivity timeout (minutes). Cannot be less than 60 - Not mandatory | -### Beispiel +### Example ```4d C_TEXT($response;$body_t) From 83b1f821ace71abbfe272a33b8fec0583383217c Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:55:41 +0100 Subject: [PATCH 202/311] New translations overview.md (German) --- website/translated_docs/de/MSC/overview.md | 24 +++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/website/translated_docs/de/MSC/overview.md b/website/translated_docs/de/MSC/overview.md index cc9bed43ffa5f5..f4e2d24dd7a370 100644 --- a/website/translated_docs/de/MSC/overview.md +++ b/website/translated_docs/de/MSC/overview.md @@ -1,40 +1,40 @@ --- id: overview -title: Überblick -sidebar_label: Überblick +title: Overview +sidebar_label: Overview --- -Das Fenster Maintenance und Security Center (MSC) enthält alle Tools zum Prüfen, Analysieren, Warten, Sichern, Komprimieren und Verschlüsseln von Datendateien. Das MSC ist in allen 4D Programmen verfügbar, also 4D Developer, 4D Server oder 4D Desktop. +The Maintenance and Security Center (MSC) window contains all the tools needed for verification, analysis, maintenance, backup, compacting, and encrypting of data files. The MSC window is available in all 4D applications: 4D single user, 4D Server or 4D Desktop. **Note:** The MSC window is not available from a 4D remote connection. -Es gibt verschiedene Wege, das MSC-Fenster zu öffnen. The way it is accessed also determines the way the application project is opened: in “maintenance” mode or “standard” mode. In maintenance mode, the project is not opened by 4D, only its reference is provided to the MSC. In standard mode, the project is opened by 4D. +There are several ways to open the MSC window. The way it is accessed also determines the way the application project is opened: in “maintenance” mode or “standard” mode. In maintenance mode, the project is not opened by 4D, only its reference is provided to the MSC. In standard mode, the project is opened by 4D. -## Anzeige im Wartungsmodus +## Display in maintenance mode In maintenance mode, only the MSC window is displayed (the project is not opened by the 4D application). This means that projects that are too damaged to be opened in standard mode by 4D can nevertheless be accessed. Moreover, certain operations (compacting, repair, and so on) require the project to be opened in maintenance mode (see [Feature availability](#feature-availability)). -Es gibt zwei Stellen, das MSC im Wartungsmodus zu öffnen: +You can open the MSC in maintenance mode from two locations: - **From the standard project opening dialog box** The standard Open dialog includes the **Maintenance Security Center** option from the menu associated with the **Open** button: ![](assets/en/MSC/MSC_standardOpen.png) - **Help/Maintenance Security Center** menu or **MSC** button in the tool bar (project not open) ![](assets/en/MSC/mscicon.png) When you call this function, a standard Open file dialog appears so that you can select the *.4DProject* or *.4dz* file of the to be examined. The project will not be opened by 4D. -## Anzeige im Standardmodus +## Display in standard mode -In standard mode, a project is open. Hier sind nicht alle Wartungsfunktionen verfügbar. Es gibt mehrere Möglichkeiten, das MSC Fenster zu öffnen: +In standard mode, a project is open. In this mode, certain maintenance functions are not available. You have several possibilities for accessing the MSC window: - Use the **Help/Maintenance Security Center** menu or the **MSC** button in the 4D toolbar: ![](assets/en/MSC/mscicon.png) - Use the “msc” standard action that it is possible to associate with a menu command or a form object. - Use the `OPEN SECURITY CENTER` language command. -## Verfügbarkeit der Funktionen +## Feature availability -Je nach dem Öffnen-Modus in MSC sind bestimmte MSC Funktionen nicht verfügbar: +Certain MSC functions are not available depending on the MSC opening mode: - Backup function is only available when the project is open (the MSC must have been opened in standard mode). -- Datenkomprimierung, Zurückfahren, Wiederherstellen, Reparieren und Verschlüsselung sind nur bei nicht-geöffneten Datendateien verwendbar, d. h. MSC muss im Wartungsmodus geöffnet sein. If these functions are tried while the project is open in standard mode, a dialog warns you that it implies that the application be closed and restarted in maintenance mode. -- In verschlüsselten Datenbanken ist für den Zugriff auf verschlüsselte Daten oder die Datei .journal ein gültiger Schlüssel zum Entschlüsseln erforderlich (siehe unter [Seite Verschlüsseln](encrypt.md)). Andernfalls sind verschlüsselte Daten nicht sichtbar. +- Data compacting, rollback, restore, repair, and encryption functions can only be used with data files that are not open (the MSC must have been opened in maintenance mode). If these functions are tried while the project is open in standard mode, a dialog warns you that it implies that the application be closed and restarted in maintenance mode. +- In encrypted databases, access to encrypted data or to the .journal file requires that a valid encryption data key be provided (see [Encrypt page](encrypt.md)). Otherwise, encrypted data is not visible. From 92ce32d671479ac19af9520128cdc57b81bb4b80 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:55:43 +0100 Subject: [PATCH 203/311] New translations information.md (German) --- website/translated_docs/de/MSC/information.md | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/website/translated_docs/de/MSC/information.md b/website/translated_docs/de/MSC/information.md index 779dd42158b99d..ade0d827d2ee49 100644 --- a/website/translated_docs/de/MSC/information.md +++ b/website/translated_docs/de/MSC/information.md @@ -1,12 +1,12 @@ --- id: information -title: Seite Information -sidebar_label: Seite Information +title: Information Page +sidebar_label: Information Page --- -Die Seite “Information” liefert Informationen über die 4D Umgebung und die Systemumgebung, die Dateien der Datenbank und der Anwendung. Über die Registerkarten am oberen Rand können Sie die einzelnen Seiten aufrufen. +The Information page provides information about the 4D and system environments, as well as the database and application files. Each page can be displayed using tab controls at the top of the window. -## Programm +## Program This page indicates the name, version and location of the application as well as the active 4D folder (for more information about the active 4D folder, refer to the description of the `Get 4D folder` command in the *4D Language Reference* manual). @@ -15,38 +15,38 @@ The central part of the window indicates the name and location of the project an - **Display and selection of pathnames**: On the **Program** tab, pathnames are displayed in pop-up menus containing the folder sequence as found on the disk: ![](assets/en/MSC/MSC_popup.png) If you select a menu item (disk or folder), it is displayed in a new system window. The **Copy the path** command copies the complete pathname as text to the clipboard, using the separators of the current platform. -- **"Licenses" Folder** The **"Licenses" Folder** button displays the contents of the active Licenses folder in a new system window. Alle Lizenzdateien, die in Ihrer 4D Umgebung installiert sind, sind in diesem Ordner auf Ihrer Festplatte zusammengefasst. Beim Öffnen über einen Web Browser erscheinen die Informationen über die enthaltenen Lizenzen und ihre Merkmale. Der Speicherort des Ordners Licenses kann je nach Version Ihres Betriebssystems variieren. For more information about the location of this folder, refer to the `Get 4D folder` command. ***Note:** You can also access this folder from the “Update License” dialog box (available in the Help menu).* +- **"Licenses" Folder** The **"Licenses" Folder** button displays the contents of the active Licenses folder in a new system window. All the license files installed in your 4D environment are grouped together in this folder, on your hard disk. When they are opened with a Web browser, these files display information concerning the licenses they contain and their characteristics. The location of the "Licenses" folder can vary depending on the version of your operating system. For more information about the location of this folder, refer to the `Get 4D folder` command. ***Note:** You can also access this folder from the “Update License” dialog box (available in the Help menu).* -## Tabellen +## Tables -Diese Seite gibt einen Überblick über die Tabellen in Ihrer Anwendung: +This page provides an overview of the tables in your database: ![](assets/en/MSC/MSC_Tables.png) -> Information auf dieser Seite ist im Standardmodus und im Wartungsmodus verfügbar. +> Information on this page is available in both standard and maintenance modes. -Die Seite listet alle Tabellen der Datenbank - auch die ausgeblendeten - mit den dazugehörigen Merkmalen: +The page lists all the tables of the database (including invisible tables) as well as their characteristics: - **ID**: Internal number of the table. -- **Tables**: Name of the table. Namen von gelöschten Tabellen erscheinen in Klammern (wenn sie noch im Papierkorb sind). -- **Records**: Total number of records in the table. If a record is damaged or cannot be read, *Error* is displayed instead of the number. Dann können Sie abwägen, ob Sie die Tools zum Prüfen und Reparieren einsetzen. -- **Fields**: Number of fields in the table. Ausgeblendete Felder werden mitgezählt, gelöschte Felder dagegen nicht. +- **Tables**: Name of the table. Names of deleted tables are displayed with parenthesis (if they are still in the trash). +- **Records**: Total number of records in the table. If a record is damaged or cannot be read, *Error* is displayed instead of the number. In this case, you can consider using the verify and repair tools. +- **Fields**: Number of fields in the table. Invisible fields are counted, however, deleted fields are not counted. - **Indexes**: Number of indexes of any kind in the table - **Encryptable**: If checked, the **Encryptable** attribute is selected for the table at the structure level (see "Encryptable" paragraph in the Design Reference Manual). - **Encrypted**: If checked, the records of the table are encrypted in the data file. ***Note**: Any inconstency between Encryptable and Encrypted options requires that you check the encryption status of the data file in the Encrypt page of the MSC.* -- **Address Table Size**: Size of the address table for each table. In der Adresstabelle wird pro angelegtem Datensatz in der Tabelle intern ein Element gespeichert. Es verbindet Datensätze mit ihrer physikalischen Adresse. Aus Performance Gründen wird sie beim Löschen von Datensätzen nicht angepasst, so dass ihre Größe von der aktuellen Anzahl der Datensätze in der Tabelle abweichen kann. Bei einem deutlichen Unterschied können Sie die Größe der Adresstabelle über die Option "Komprimiere Adresstabelle" optimieren (siehe Seite [Kompakt](compact.md)). ***Note:** Differences between address table size and record number can also result from an incident during the cache flush.* +- **Address Table Size**: Size of the address table for each table. The address table is an internal table which stores one element per record created in the table. It actually links records to their physical address. For performance reasons, it is not resized when records are deleted, thus its size can be different from the current number of records in the table. If this difference is significant, a data compacting operation with the "Compact address table" option checked can be executed to optimize the address table size (see [Compact](compact.md) page). ***Note:** Differences between address table size and record number can also result from an incident during the cache flush.* -## Daten +## Data The **Data** page provides information about the available and used storage space in the data file. -> Diese Seite ist im Wartungsmodus nicht verfügbar +> This page cannot be accessed in maintenance mode -Diese Angaben werden grafisch dargestellt: +The information is provided in graph form: ![](assets/en/MSC/MSC_Data.png) -> Diese Seite berücksichtigt keine Daten, die außerhalb der Datendatei gespeichert sind (siehe "Daten extern speichern"). +> This page does not take into account any data that may be stored outside of the data file (see "External storage"). -Zu stark fragmentierte Dateien senken die Performance der Festplatte und somit der Datenbank. Bei zu niedriger Auslastungsrate zeigt 4D ein Icon als gelbes Warndreieck und meldet, dass Komprimieren notwendig ist. Das Icon erscheint in der Schaltfläche Information und in der Registerkarte der entsprechenden Datei:![](assets/en/MSC/MSC_infowarn.png) +Files that are too fragmented reduce disk, and thus, database performance. If the occupation rate is too low, 4D will indicate this by a warning icon (which is displayed on the Information button and on the tab of the corresponding file type) and specify that compacting is necessary:![](assets/en/MSC/MSC_infowarn.png) -Das Warndreieck erscheint auch in der Schaltfläche Komprimieren auf der Seite [Kompakt](compact.md): ![](assets/en/MSC/MSC_compactwarn.png) +A warning icon is also displayed on the button of the [Compact](compact.md) page: ![](assets/en/MSC/MSC_compactwarn.png) From f790977555d1178c7bda0fa224a3f3d310427c6b Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:55:45 +0100 Subject: [PATCH 204/311] New translations encrypt.md (German) --- website/translated_docs/de/MSC/encrypt.md | 90 +++++++++++------------ 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/website/translated_docs/de/MSC/encrypt.md b/website/translated_docs/de/MSC/encrypt.md index de2c3cb7f494aa..0dc76b76e7259c 100644 --- a/website/translated_docs/de/MSC/encrypt.md +++ b/website/translated_docs/de/MSC/encrypt.md @@ -1,94 +1,94 @@ --- id: encrypt -title: Seite Verschlüsseln -sidebar_label: Seite Verschlüsseln +title: Encrypt Page +sidebar_label: Encrypt Page --- You can use this page to encrypt or *decrypt* (i.e. remove encryption from) the data file, according to the **Encryptable** attribute status defined for each table in the database. For detailed information about data encryption in 4D, please refer to the "Encrypting data" section in the *Design Reference* manual. -Bei jeder Operation Verschlüsselung/Entschlüsselung wird ein neuer Ordner angelegt. It is named "Replaced Files (Encrypting) *yyyy-mm-dd hh-mm-ss*> or "Replaced Files (Decrypting) *yyyy-mm-dd hh-mm-ss*". -> Verschlüsselung ist nur im [Wartungsmodus](overview.md#display-in-maintenance-mode) verfügbar. If you attempt to carry out this operation in standard mode, a warning dialog will inform you that the application will be closed and restarted in maintenance mode +A new folder is created each time you perform an encryption/decryption operation. It is named "Replaced Files (Encrypting) *yyyy-mm-dd hh-mm-ss*> or "Replaced Files (Decrypting) *yyyy-mm-dd hh-mm-ss*". +> Encryption is only available in [maintenance mode](overview.md#display-in-maintenance-mode). If you attempt to carry out this operation in standard mode, a warning dialog will inform you that the application will be closed and restarted in maintenance mode -**Warnung:** -- Encrypting a data file is a lengthy operation. Währenddessen erscheint ein Ablaufbalken (den der Benutzer unterbrechen kann). Note also that an application encryption operation always includes a compacting step. -- Jeder Verschlüsselungsvorgang produziert eine Kopie der Datendatei, was den Anwendungsordner vergrößert. Sie sollten darauf achten (besonders auf macOS, wo 4D Anwendungen als Package erscheinen), dass die Größe der Anwendung nicht exzessiv ansteigt. In diesem Fall ist es hilfreich, die Kopien der Originaldatei im Package manuell zu entfernen, damit die Größe des Package im Rahmen bleibt. +**Warning:** +- Encrypting a data file is a lengthy operation. It displays a progress indicator (which could be interrupted by the user). Note also that an application encryption operation always includes a compacting step. +- Each encryption operation produces a copy of the data file, which increases the size of the application folder. It is important to take this into account (especially in macOS where 4D applications appear as packages) so that the size of the application does not increase excessively. Manually moving or removing the copies of the original file inside the package can be useful in order to minimize the package size. -## Daten zum ersten Mal verschlüsseln -Beim ersten Verschlüsseln Ihrer Daten über das MSC sind folgende Schritte erforderlich: +## Encrypting data for the first time +Encrypting your data for the first time using the MSC requires the following steps: -1. In the Structure editor, check the **Encryptable** attribute for each table whose data you want to encrypt. Weitere Informationen dazu finden Sie im Abschnitt "Tabelleneigenschaften". -2. Öffnen Sie die Seite Verschlüsseln des MSC. If you open the page without setting any tables as **Encryptable**, the following message is displayed in the page: ![](assets/en/MSC/MSC_encrypt1.png) Otherwise, the following message is displayed: ![](assets/en/MSC/MSC_encrypt2.png)

    This means that the **Encryptable** status for at least one table has been modified and the data file still has not been encrypted. **Note: **The same message is displayed when the **Encryptable** status has been modified in an already encrypted data file or after the data file has been decrypted (see below). +1. In the Structure editor, check the **Encryptable** attribute for each table whose data you want to encrypt. See the "Table properties" section. +2. Open the Encrypt page of the MSC. If you open the page without setting any tables as **Encryptable**, the following message is displayed in the page: ![](assets/en/MSC/MSC_encrypt1.png) Otherwise, the following message is displayed: ![](assets/en/MSC/MSC_encrypt2.png)

    This means that the **Encryptable** status for at least one table has been modified and the data file still has not been encrypted. **Note: **The same message is displayed when the **Encryptable** status has been modified in an already encrypted data file or after the data file has been decrypted (see below). 3. Click on the Encrypt picture button. ![](assets/en/MSC/MSC_encrypt3.png) - You will be prompted to enter a passphrase for your data file: ![](assets/en/MSC/MSC_encrypt4.png) The passphrase is used to generate the data encryption key. Eine Passphrase ist eine sicherere Version als ein Kennwort, da sie eine größere Anzahl Zeichen enthalten kann. For example, you could enter a passphrases such as "We all came out to Montreux" or "My 1st Great Passphrase!!" The security level indicator can help you evaluate the strength of your passphrase: ![](assets/en/MSC/MSC_encrypt5.png) (deep green is the highest level) -4. Geben Sie zum Bestätigen Ihre gesicherte Passphrase ein. + You will be prompted to enter a passphrase for your data file: ![](assets/en/MSC/MSC_encrypt4.png) The passphrase is used to generate the data encryption key. A passphrase is a more secure version of a password and can contain a large number of characters. For example, you could enter a passphrases such as "We all came out to Montreux" or "My 1st Great Passphrase!!" The security level indicator can help you evaluate the strength of your passphrase: ![](assets/en/MSC/MSC_encrypt5.png) (deep green is the highest level) +4. Enter to confirm your secured passphrase. -Dann wird der Prozess zum Verschlüsseln gestartet. If the MSC was opened in standard mode, the application is reopened in maintenance mode. +The encrypting process is then launched. If the MSC was opened in standard mode, the application is reopened in maintenance mode. -4D bietet an, den Verschlüsselungscode zu sichern (siehe unten im Absatz [Verschlüsselungscode sichern](#verschlusselungscode-sichern)). Sie können das gleich oder später machen. Sie können auch das Logbuch zur Verschlüsselung öffnen. +4D offers to save the encryption key (see [Saving the encryption key](#saving-the-encryption-key) below). You can do it at this moment or later. You can also open the encryption log file. -War der Prozess zum Verschlüsseln erfolgreich, zeigt die Seite Verschlüsseln Schaltflächen für Wartungsoperationen beim Verschlüsseln. +If the encryption process is successful, the Encrypt page displays Encryption maintenance operations buttons. -**Warning:** During the encryption operation, 4D creates a new, empty data file and fills it with data from the original data file. Datensätze aus "verschlüsselbaren" Tabellen werden verschlüsselt und dann kopiert, andere Datensätze werden nur kopiert. (Außerdem wird eine Komprimierung durchgeführt). War die Operation erfolgreich, wird die ursprüngliche Datendatei in den Ordner "Replaced Files (Encrypting)" geschoben. If you intend to deliver an encrypted data file, make sure to move/remove any unencrypted data file from the application folder beforehand. +**Warning:** During the encryption operation, 4D creates a new, empty data file and fills it with data from the original data file. Records belonging to "encryptable" tables are encrypted then copied, other records are only copied (a compacting operation is also executed). If the operation is successful, the original data file is moved to a "Replaced Files (Encrypting)" folder. If you intend to deliver an encrypted data file, make sure to move/remove any unencrypted data file from the application folder beforehand. -## Wartungsoperationen beim Verschlüsseln +## Encryption maintenance operations When an application is encrypted (see above), the Encrypt page provides several encryption maintenance operations, corresponding to standard scenarios. ![](assets/en/MSC/MSC_encrypt6.png) -### Den aktuellen Verschlüsselungscode für Daten liefern -Aus Sicherheitsgründen wird bei allen Wartungsoperationen für Verschlüsselung der aktuelle Verschlüsselungscode der Daten angefordert. +### Providing the current data encryption key +For security reasons, all encryption maintenance operations require that the current data encryption key be provided. -- Wurde der Verschlüsselungscode für Daten bereits in den 4D Schlüsselbund (1) geladen, verwendet 4D ihn automatisch wieder. -- Wird kein Verschlüsselungscode für Daten gefunden, müssen Sie ihn liefern. Es erscheint folgendes Dialogfenster: ![](assets/en/MSC/MSC_encrypt7.png) +- If the data encryption key is already loaded in the 4D keychain(1), it is automatically reused by 4D. +- If the data encryption key is not found, you must provide it. The following dialog is displayed: ![](assets/en/MSC/MSC_encrypt7.png) -An dieser Stelle haben Sie zwei Möglichkeiten: -- enter the current passphrase(2) and click **OK**. ODER +At this step, you have two options: +- enter the current passphrase(2) and click **OK**. OR - connect a device such as a USB key and click the **Scan devices** button. (1) The 4D keychain stores all valid data encrpytion keys entered during the application session. (2) The current passphrase is the passphrase used to generate the current encryption key. -Ist die Eingabe korrekt, startet 4D in allen Fällen erneut im Wartungsmodus (falls das noch nicht der Fall ist) und führt die Operation aus. +In all cases, if valid information is provided, 4D restarts in maintenance mode (if not already the case) and executes the operation. -### Daten mit dem aktuellen Verschlüsselungscode erneut verschlüsseln +### Re-encrypt data with the current encryption key -This operation is useful when the **Encryptable** attribute has been modified for one or more tables containing data. Zur Vermeidung von Inkonsistenzen in der Datendatei erlaubt 4D in solchen Fällen keinen Schreibzugriff auf die Datensätze dieser Tabellen in der Anwendung. Die Daten müssen dann erneut verschlüsselt werden, um wieder einen gültigen Verschlüsselungsstatus herzustellen. +This operation is useful when the **Encryptable** attribute has been modified for one or more tables containing data. In this case, to prevent inconsistencies in the data file, 4D disallows any write access to the records of the tables in the application. Re-encrypting data is then necessary to restore a valid encryption status. 1. Click on **Re-encrypt data with the current encryption key**. -2. Geben Sie den aktuellen Verschlüsselungscode für Daten ein. +2. Enter the current data encryption key. -Die Datendatei wird erneut ordnungsgemäß mit dem aktuellen Schlüssel verschlüsselt und es erscheint eine Meldung als Bestätigung: ![](assets/en/MSC/MSC_encrypt8.png) +The data file is properly re-encrypted with the current key and a confirmation message is displayed: ![](assets/en/MSC/MSC_encrypt8.png) -### Passphrase verändern und Daten erneut verschlüsseln -Diese Operation bietet sich an, wenn Sie Ihren aktuellen Verschlüsselungscode für Daten verändern müssen, um bestimmte Sicherheitsregeln einzuhalten (z. B. wenn ein Admin das Unternehmen verlassen hat). +### Change your passphrase and re-encrypt data +This operation is useful when you need to change the current encryption data key. For example, you may need to do so to comply with security rules (such as requiring changing the passphrase every three months). 1. Click on **Change your passphrase and re-encrypt data**. -2. Geben Sie den aktuellen Verschlüsselungscode für Daten ein. -3. Geben Sie die neue Passphrase ein. Für zusätzliche Sicherheit werden Sie aufgefordert, diese ein zweites Mal einzugeben: ![](assets/en/MSC/MSC_encrypt9.png) Die Datendatei wird mit dem neuen Schlüssel verschlüsselt und es erscheint eine Meldung als Bestätigung. ![](assets/en/MSC/MSC_encrypt8.png) +2. Enter the current data encryption key. +3. Enter the new passphrase (for added security, you are prompted to enter it twice): ![](assets/en/MSC/MSC_encrypt9.png) The data file is encrypted with the new key and the confirmation message is displayed. ![](assets/en/MSC/MSC_encrypt8.png) -### Alle Daten entschlüsseln -Diese Operation entfernt jede Verschlüsselung aus der Datendatei. Sollen Ihre Daten nicht länger verschlüsselt sein: +### Decrypt all data +This operation removes all encryption from the data file. If you no longer want to have your data encrypted: 1. Click on **Decrypt all data**. -2. Geben Sie den aktuellen Verschlüsselungscode für Daten ein (siehe unter Den aktuellen Verschlüsselungscode für Daten liefern). +2. Enter the current data encryption key (see Providing the current data encryption key). -Die Datendatei wird komplett entschlüsselt und es erscheint eine Meldung als Bestätigung: ![](assets/en/MSC/MSC_encrypt10.png) -> Ist die Datendatei entschlüsselt, passt der Verschlüsselungsstatus der Tabellen nicht mehr zur Eigenschaft Verschlüsselbar. To restore a matching status, you must deselect all **Encryptable** attributes at the database structure level. +The data file is fully decrypted and a confirmation message is displayed: ![](assets/en/MSC/MSC_encrypt10.png) +> Once the data file is decrypted, the encryption status of tables do not match their Encryptable attributes. To restore a matching status, you must deselect all **Encryptable** attributes at the database structure level. -## Verschlüsselungscode sichern +## Saving the encryption key -In 4D können Sie den Verschlüsselungscode für Daten in einer spezifischen Datei speichern. Storing this file on an external device such a USB key will facilitate the use of an encrypted application, since the user would only need to connect the device to provide the key before opening the application in order to access encrypted data. +4D allows you to save the data encryption key in a dedicated file. Storing this file on an external device such a USB key will facilitate the use of an encrypted application, since the user would only need to connect the device to provide the key before opening the application in order to access encrypted data. -Sie können den Verschlüsselungscode jedes Mal sichern, wenn eine neue Passphrase angelegt wird: +You can save the encryption key each time a new passphrase has been provided: - when the application is encrypted for the first time, - when the application is re-encrypted with a new passphrase. -Aufeinanderfolgende Verschlüsselungscodes lassen sich auf dem gleichen Gerät speichern. +Successive encryption keys can be stored on the same device. -## Logbuch +## Log file After an encryption operation has been completed, 4D generates a file in the Logs folder of the application. It is created in XML format and named "*ApplicationName_Encrypt_Log_yyyy-mm-dd hh-mm-ss.xml*" or "*ApplicationName_Decrypt_Log_yyyy-mm-dd hh-mm-ss.xml*". -Immer wenn ein neues Logbuch angelegt wurde, erscheint auf der Seite Verschlüsselt unten die Schaltfläche Logbuch anzeigen. +An Open log file button is displayed on the MSC page each time a new log file has been generated. -Das Logbuch listet alle internen Operationen, die während dem Prozess Verschlüsseln/Entschlüsseln ausgeführt werden, sowie evtl. aufgetretene Fehler. +The log file lists all internal operations executed pertaining to the encryption/decryption process, as well as errors (if any). From 13c7a895c20ca3bb565d61e576b40d8490f0a2ad Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:55:47 +0100 Subject: [PATCH 205/311] New translations compact.md (German) --- website/translated_docs/de/MSC/compact.md | 68 +++++++++++------------ 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/website/translated_docs/de/MSC/compact.md b/website/translated_docs/de/MSC/compact.md index 0fafbc8496a211..6b5abb40ca8ab4 100644 --- a/website/translated_docs/de/MSC/compact.md +++ b/website/translated_docs/de/MSC/compact.md @@ -1,37 +1,37 @@ --- id: compact -title: Seite Kompakt -sidebar_label: Seite Kompakt +title: Compact Page +sidebar_label: Compact Page --- -Auf dieser Seite können Sie die Funktionen zum Komprimieren der Datendatei verwenden. +You use this page to access the data file compacting functions. -## Warum Dateien komprimieren? +## Why compact your files? -Komprimieren der Dateien erfüllt zwei Anforderungen: +Compacting files meets two types of needs: -- **Reducing size and optimization of files**: Files may contain unused spaces (“holes”). Beim Löschen von Datensätzen wird der zuvor belegte Platz in der Datei zum Leerraum. In der Regel verwendet 4D diese Leerräume soweit wie möglich erneut. Da jedoch die Datengröße unterschiedlich ist, entstehen durch sukzessives Löschen oder Ändern unweigerlich nicht-verwendbare Leerräume. Dasselbe passiert, wenn eine große Menge Daten gerade gelöscht wurde: die leeren Stellen bleiben in der Datei ohne Zuweisung. Das Verhältnis zwischen Größe der Datendatei und derzeit für die Daten genutztem Platz ist die Auslastungsrate der Daten. Eine zu geringe Rate ist zunächst Platzverschwendung, kann aber auch die Performance der Datenbank beeinträchtigen. Hier schafft Komprimieren Abhilfe, denn dadurch wird das Speichern der Daten neu organisiert und optimiert, d. h. die Löcher werden entfernt. Der Bereich “Information” fasst die Daten im Hinblick auf Fragmentierung zusammen und schlägt die auszuführenden Operationen vor. Die Registerkarte [Daten](information.md#data) auf der Seite “Information” des MSC gibt die Fragmentierung der aktuellen Datendatei an. +- **Reducing size and optimization of files**: Files may contain unused spaces (“holes”). In fact, when you delete records, the space that they occupied previously in the file becomes empty. 4D reuses these empty spaces whenever possible, but since data size is variable, successive deletions or modifications will inevitably generate unusable space for the program. The same goes when a large quantity of data has just been deleted: the empty spaces remain unassigned in the file. The ratio between the size of the data file and the space actually used for the data is the occupation rate of the data. A rate that is too low can lead, in addition to a waste of space, to the deterioration of database performance. Compacting can be used to reorganize and optimize storage of the data in order to remove the “holes”. The “Information” area summarizes the data concerning the fragmentation of the file and suggests operations to be carried out. The [Data](information.md#data) tab on the “Information” page of the MSC indicates the fragmentation of the current data file. -- **Complete updating of data** by applying the current formatting set in the structure file. Das ist hilfreich, wenn Daten aus der gleichen Tabelle in unterschiedlichen Formaten gespeichert wurden, z. B. nach einer Änderung in der Struktur der Anwendung. -> Komprimieren ist nur im Wartungsmodus verfügbar. If you attempt to carry out this operation in standard mode, a warning dialog box will inform you that the application will be closed and restarted in maintenance mode. You can compact a data file that is not opened by the application (see [Compact records and indexes](#compact-records-and-indexes) below). +- **Complete updating of data** by applying the current formatting set in the structure file. This is useful when data from the same table were stored in different formats, for example after a change in the database structure. +> Compacting is only available in maintenance mode. If you attempt to carry out this operation in standard mode, a warning dialog box will inform you that the application will be closed and restarted in maintenance mode. You can compact a data file that is not opened by the application (see [Compact records and indexes](#compact-records-and-indexes) below). -## Standard Komprimierung +## Standard compacting -Um das Komprimieren direkt zu starten, klicken Sie im MSC-Fenster auf die Schaltfläche zum Komprimieren. +To directly begin the compacting of the data file, click on the compacting button in the MSC window. ![](assets/en/MSC/MSC_compact.png) -> Da beim Komprimieren die Originaldatei dupliziert wird, ist die Schaltfläche inaktiv, wenn auf der Festplatte mit dieser Datei nicht genügend Speicherplatz vorhanden ist. +> Since compacting involves the duplication of the original file, the button is disabled when there is not adequate space available on the disk containing the file. -Dieser Vorgang komprimiert die Hauptdatei sowie alle Index-Dateien. 4D copies the original files and puts them in a folder named **Replaced Files (Compacting)**, which is created next to the original file. Haben Sie mehrere Komprimierungen durchgeführt, wird jedes Mal ein neuer Ordner angelegt. Er lautet “Replaced Files (Compacting)_1”, “Replaced Files (Compacting)_2”, usw. Im erweiterten Modus können Sie den Ordner zum Abspeichern der Originaldateien verändern. +This operation compacts the main file as well as any index files. 4D copies the original files and puts them in a folder named **Replaced Files (Compacting)**, which is created next to the original file. If you have carried out several compacting operations, a new folder is created each time. It will be named “Replaced Files (Compacting)_1”, “Replaced Files (Compacting)_2”, and so on. You can modify the folder where the original files are saved using the advanced mode. -Ist die Operation abgeschlossen, ersetzen die komprimierten Dateien automatisch die Originaldateien. The application is immediately operational without any further manipulation. -> Bei einer verschlüsselten Anwendung enthält die Komprimierung auch die Schritte Entschlüsselung und Verschlüsselung. Dazu ist auch der aktuelle Verschlüsselungscode erforderlich. Ist noch kein gültiger Datenschlüssel angegeben, erscheint ein Dialogfenster, dass die Passphrase oder den Datenschlüssel anfordert. +When the operation is completed, the compacted files automatically replace the original files. The application is immediately operational without any further manipulation. +> When the database is encrypted, compacting includes decryption and encryption steps and thus, requires the current data encryption key. If no valid data key has already been provided, a dialog box requesting the passphrase or the data key is displayed. -**Warning:** Each compacting operation involves the duplication of the original file which increases the size of the application folder. Sie sollten darauf achten (besonders auf macOS, wo 4D Anwendungen als Package erscheinen), dass die Größe der Anwendung nicht exzessiv ansteigt. In diesem Fall ist es hilfreich, die Kopien der Originaldatei im Package manuell zu entfernen, damit die Größe des Package im Rahmen bleibt. +**Warning:** Each compacting operation involves the duplication of the original file which increases the size of the application folder. It is important to take this into account (especially under macOS where 4D applications appear as packages) so that the size of the application does not increase excessively. Manually removing the copies of the original file inside the package can be useful in order to keep the package size down. -## Logbuch öffnen +## Open log file -After compacting is completed, 4D generates a log file in the Logs folder of the project. Hier können Sie alle ausgeführten Operationen ansehen. It is created in XML format and named: *ApplicationName**_Compact_Log_yyyy-mm-dd hh-mm-ss.xml*" where: +After compacting is completed, 4D generates a log file in the Logs folder of the project. This file allows you to view all the operations carried out. It is created in XML format and named: *ApplicationName**_Compact_Log_yyyy-mm-dd hh-mm-ss.xml*" where: - *ApplicationName* is the name of the project file without any extension, for example "Invoices", - *yyyy-mm-dd hh-mm-ss* is the timestamp of the file, based upon the local system time when the maintenance operation was started, for example "2019-02-11 15-20-45". @@ -39,33 +39,33 @@ After compacting is completed, 4D generates a log file in the Logs folder of the When you click on the **Open log file** button, 4D displays the most recent log file in the default browser of the machine. -## Erweiterter Modus +## Advanced mode The Compact page contains an **Advanced>** button, which can be used to access an options page for compacting data file. -### Komprimiere Datensätze und Indizes +### Compact records and indexes -The **Compact records and indexes** area displays the pathname of the current data file as well as a **[...]** button that can be used to specify another data file. Klicken Sie auf diese Schaltfläche, erscheint ein Standard-Öffnen Dialog, um die gewünschte Datendatei zum Komprimieren auszuwählen. Sie müssen eine Datendatei auswählen, die zur geöffneten Strukturdatei passt. Bestätigen Sie dieses Dialogfenster, erscheint der Pfadname der zu komprimierenden Datei im Fenster. +The **Compact records and indexes** area displays the pathname of the current data file as well as a **[...]** button that can be used to specify another data file. When you click on this button, a standard Open document dialog box is displayed so that you can designate the data file to be compacted. You must select a data file that is compatible with the open structure file. Once this dialog box has been validated, the pathname of the file to be compacted is indicated in the window. -The second **[...]** button can be used to specify another location for the original files to be saved before the compacting operation. Diese Option ist insbesondere beim Komprimieren umfangreicher Dateien auf verschiedenen Festplatten hilfreich. +The second **[...]** button can be used to specify another location for the original files to be saved before the compacting operation. This option can be used more particularly when compacting voluminous files while using different disks. -### Erzwinge Aktualisierung aller Datensätze +### Force updating of the records -Ist diese Option markiert, schreibt 4D während der Komprimierung jeden Datensatz für jede Tabelle gemäß seiner Beschreibung in der Struktur erneut. Ist diese Option nicht markiert, organisiert 4D lediglich das Speichern der Daten auf der Festplatte neu. Diese Option ist in folgenden Fällen von Nutzen: +When this option is checked, 4D rewrites every record for each table during the compacting operation, according to its description in the structure. If this option is not checked, 4D just reorganizes the data storage on disk. This option is useful in the following cases: -- Wenn Feldtypen in der Struktur der Anwendung nach der Dateneingabe geändert wurden. Sie haben z. B. ein Feld vom Typ Lange Ganzzahl in den Typ Zahl geändert. 4D erlaubt sogar Änderungen zwischen unterschiedlichen Typen (mit dem Risiko von Datenverlust), z. B. lässt sich ein Feld vom Typ Zahl in den Typ Text ändern und umgekehrt. In diesem Fall konvertiert 4D bereits eingegebene Daten nicht rückwirkend; Daten werden nur beim Laden und Sichern von Datensätzen konvertiert. Diese Option erzwingt die Konvertierung aller Daten. +- When field types are changed in the application structure after data were entered. For example, you may have changed a Longint field to a Real type. 4D even allows changes between two very different types (with risks of data loss), for instance a Real field can be changed to Text and vice versa. In this case, 4D does not convert data already entered retroactively; data is converted only when records are loaded and then saved. This option forces all data to be converted. -- Wenn die Option externes Speichern für Daten vom Typ Text, Bild oder BLOB nach der Dateneingabe geändert wurde. Das kann insbesondere beim Konvertieren der Datenbanken aus einer Version älter als v13 passieren. Auch hier konvertiert 4D bereits eingegebene Daten nicht rückwirkend. Mit dieser Option können Sie erzwingen, dass alle Datensätze aktualisiert werden, damit der neue Speicherungsmodus auch auf bereits eingegebene Datensätze angewandt wird. +- When an external storage option for Text, Picture or BLOB data has been changed after data were entered. This can happen when databases are converted from a version prior to v13. As is the case with the retyping described above, 4D does not convert data already entered retroactively. To do this, you can force records to be updated in order to apply the new storage mode to records that have already been entered. -- Wenn Tabellen oder Felder gelöscht wurden. In diesem Fall wird der Platz der entfernten Daten beim Komprimieren mit Aktualisieren aller Datensätze wieder verwendet und so die Dateigröße verringert. -> Ist diese Option gewählt, werden alle Indizes aktualisiert. +- When tables or fields were deleted. In this case, compacting with updating of records recovers the space of these removed data and thus reduces file size. +> All the indexes are updated when this option is selected. -### Komprimiere Adresstabelle -(Option nur aktiv, wenn die vorige Option markiert ist) +### Compact address table +(option only active when preceding option is checked) -Diese Option baut beim Komprimieren die Adresstabelle für die Datensätze komplett neu auf. Das optimiert die Größe der Adresstabelle und ist nur sinnvoll für Datenbanken, wo umfangreiches Datenvolumen erstellt und dann wieder gelöscht wurde. In anderen Fällen ist die Optimierung nicht signifikant. +This option completely rebuilds the address table for the records during compacting. This optimizes the size of the address table and is mainly used for databases where large volumes of data were created and then deleted. In other cases, optimization is not a decisive factor. -Beachten Sie, dass diese Option die Komprimierung beträchtlich verlangsamt und alle Mengen, die über den Befehl `SAVE SET` gesichert wurden, ungültig werden. Wir empfehlen außerdem dringend, in diesem Fall gesicherte Mengen zu löschen, da ihre Verwendung zur Auswahl nicht-korrekter Daten führen kann. -> - Beim Komprimieren werden auch die Datensätze von Tabellen berücksichtigt, die im Papierkorb liegen. Gibt es dort eine große Anzahl Datensätze, kann das ein weiterer Faktor sein, der die Operation verlangsamt. -> - Diese Option macht die Adresstabelle und folglich auch die Anwendung inkompatibel zum aktuellen Logbuch (sofern vorhanden). It will be saved automatically and a new journal file will have to be created the next time the application is launched. -> - Um zu sehen, ob die Adresstabelle komprimiert werden muss, gehen Sie auf die Seite [Information](information.md) des MSC und vergleichen die Gesamtanzahl der Datensätze mit der Größe der Adresstabelle. +Note that this option substantially slows compacting and invalidates any sets saved using the `SAVE SET` command. Moreover, we strongly recommend deleting saved sets in this case because their use can lead to selections of incorrect data. +> - Compacting takes records of tables that have been put into the Trash into account. If there are a large number of records in the Trash, this can be an additional factor that may slow down the operation. +> - Using this option makes the address table, and thus the database, incompatible with the current journal file (if there is one). It will be saved automatically and a new journal file will have to be created the next time the application is launched. +> - You can decide if the address table needs to be compacted by comparing the total number of records and the address table size in the [Information](information.md) page of the MSC. From a7698ad6f46bef14d757ee2445278c5f57ff820f Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:55:49 +0100 Subject: [PATCH 206/311] New translations backup.md (German) --- website/translated_docs/de/MSC/backup.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/website/translated_docs/de/MSC/backup.md b/website/translated_docs/de/MSC/backup.md index 2dc75e880c847b..07667b30a86882 100644 --- a/website/translated_docs/de/MSC/backup.md +++ b/website/translated_docs/de/MSC/backup.md @@ -1,19 +1,19 @@ --- id: backup -title: Seite Backup -sidebar_label: Seite Backup +title: Backup Page +sidebar_label: Backup Page --- -Die Seite Backup des MSC zeigt die Backup-Einstellungen für die Datenbank. Hier können Sie auch ein manuelles Backup starten: +You can use the Backup page to view some backup parameters of the database and to launch a manual backup: ![](assets/en/MSC/msc_Backup.png) -Diese Seite ist in drei Bereiche unterteilt: +This page consists of the following three areas: -- **Backup File Destination**: displays information about the location of the application backup file. sowie den freien bzw. verwendeten Platz auf der Backup-Festplatte. +- **Backup File Destination**: displays information about the location of the application backup file. It also indicates the free/used space on the backup disk. - **Last Backup Information**: provides the date and time of the last backup (automatic or manual) carried out on the application. - **Contents of the backup file**: lists the files and folders included in the backup file. The **Backup** button is used to launch a manual backup. -Auf dieser Seite können Sie keine Backup-Parameter verändern. To do this, you must click on the **Database properties...** button. \ No newline at end of file +This page cannot be used to modify the backup parameters. To do this, you must click on the **Database properties...** button. \ No newline at end of file From 639b908a92fda212e09da008581218119f73b796 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:55:51 +0100 Subject: [PATCH 207/311] New translations analysis.md (German) --- website/translated_docs/de/MSC/analysis.md | 40 +++++++++++----------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/website/translated_docs/de/MSC/analysis.md b/website/translated_docs/de/MSC/analysis.md index cbe8450b050324..dfe013a5039a16 100644 --- a/website/translated_docs/de/MSC/analysis.md +++ b/website/translated_docs/de/MSC/analysis.md @@ -1,36 +1,36 @@ --- -id: Analyse -title: Seite Aktivität Analyse -sidebar_label: Seite Aktivität Analyse +id: analysis +title: Activity analysis Page +sidebar_label: Activity analysis Page --- -Auf der Seite Aktivität Analyse des MSC können Sie den Inhalt des aktuellen Logbuchs betrachten. This function is useful for parsing the use of an application or detecting the operation(s) that caused errors or malfunctions. In the case of an application in client-server mode, it allows verifying operations performed by each client machine. -> Sie können die in den Daten der Anwendung ausgeführten Operationen auch zurückfahren (rollback). Weitere Informationen dazu finden Sie auf der [Seite Zurückfahren](rollback.md). +The Activity analysis page allows viewing the contents of the current log file. This function is useful for parsing the use of an application or detecting the operation(s) that caused errors or malfunctions. In the case of an application in client-server mode, it allows verifying operations performed by each client machine. +> It is also possible to rollback the operations carried out on the data of the database. For more information, refer to [Rollback page](rollback.md). ![](assets/en/MSC/MSC_analysis.png) -Jede im Logbuch gespeicherte Operation erscheint als eine Zeile. Die Spalten liefern verschiedene Informationen zur Operation. Durch Anklicken der Kopfteile können Sie die Spalten beliebig umstellen. +Every operation recorded in the log file appears as a row. The columns provide various information on the operation. You can reorganize the columns as desired by clicking on their headers. -Über diese Informationen können Sie die Quelle und den Kontext jeder Operation identifizieren: +This information allows you to identify the source and context of each operation: - **Operation**: Sequence number of operation in the log file. -- **Action**: Type of operation performed on the data. Diese Spalte kann eine der nachfolgenden Operationen anzeigen: - - Öffnen der Datendatei: Datendatei öffnen - - Schließen der Datendatei: Eine geöffnete Datendatei wird geschlossen - - Erstellen eines Kontexts: Einen Prozess erstellen, der einen Ausführungskontext angibt - - Schließen eines Kontexts: Prozess schließen - - Hinzufügen: Einen Datensatz erstellen und speichern - - BLOB hinzufügen: Ein BLOB in einem BLOB Feld speichern - - Löschen: Datensatz gelöscht - - Ändern: Datensatz geändert - - Starten der Transaktion: Transaktion gestartet - - Bestätigen der Transaktion: Transaktion bestätigt - - Abbrechen der Transaktion: Transaktion annulliert +- **Action**: Type of operation performed on the data. This column can contain one of the following operations: + - Opening of Data File: Opening of a data file. + - Closing of Data File: Closing of an open data file. + - Creation of a Context: Creation of a process that specifies an execution context. + - Closing of a Context: Closing of process. + - Addition: Creation and storage of a record. + - Adding a BLOB: Storage of a BLOB in a BLOB field. + - Deletion: Deletion of a record. + - Modification: Modification of a record. + - Start of Transaction: Transaction started. + - Validation of Transaction: Transaction validated. + - Cancellation of Transaction: Transaction cancelled. - Update context: Change in extra data (e.g. a call to `CHANGE CURRENT USER` or `SET USER ALIAS`). - **Table**: Table to which the added/deleted/modified record or BLOB belongs. - **Primary Key/BLOB**: contents of the primary key for each record (when the primary key consists of several fields, the values are separated by semi-colons) or sequence number of the BLOB involved in the operation. -- **Process**: Internal number of process in which the operation was carried out. Diese interne Nummer entspricht dem Kontext der Operation. +- **Process**: Internal number of process in which the operation was carried out. This internal number corresponds to the context of the operation. - **Size**: Size (in bytes) of data processed by the operation. - **Date and Hour**: Date and hour when the operation was performed. - **System User**: System name of the user that performed the operation. In client-server mode, the name of the client-side machine is displayed; in single-user mode, the session name of the user is displayed. From f679eb141b09febebbc1f12a8c9363244d18b047 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:55:55 +0100 Subject: [PATCH 208/311] New translations webArea_overview.md (German) --- website/translated_docs/de/FormObjects/webArea_overview.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/de/FormObjects/webArea_overview.md b/website/translated_docs/de/FormObjects/webArea_overview.md index ac145b32b60472..ad90524db90d86 100644 --- a/website/translated_docs/de/FormObjects/webArea_overview.md +++ b/website/translated_docs/de/FormObjects/webArea_overview.md @@ -59,7 +59,7 @@ $4d.4DMethodName(param1,paramN,function(result){}) > By default, 4D works in UTF-8. When you return text containing extended characters, for example characters with accents, make sure the encoding of the page displayed in the Web area is declared as UTF-8, otherwise the characters may be rendered incorrectly. In this case, add the following line in the HTML page to declare the encoding: `` -#### Beispiel 1 +#### Example 1 Given a 4D project method named `today` that does not receive parameters and returns the current date as a string. 4D code of `today` method: @@ -96,7 +96,7 @@ $4d.today(function(dollarZero) ``` -#### Beispiel 2 +#### Example 2 The 4D project method `calcSum` receives parameters (`$1...$n`) and returns their sum in `$0`: From 42839c71e42d6485f15f2de473feadf32ec70f67 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:55:57 +0100 Subject: [PATCH 209/311] New translations text.md (German) --- website/translated_docs/de/FormObjects/text.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/FormObjects/text.md b/website/translated_docs/de/FormObjects/text.md index 5e0db00aa57e3f..36b404343166c9 100644 --- a/website/translated_docs/de/FormObjects/text.md +++ b/website/translated_docs/de/FormObjects/text.md @@ -1,5 +1,5 @@ --- -id: Text +id: text title: Text --- From b1694ab1aa944e47cbfba81024b1ae32f6079126 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:55:59 +0100 Subject: [PATCH 210/311] New translations restore.md (German) --- website/translated_docs/de/MSC/restore.md | 72 +++++++++++------------ 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/website/translated_docs/de/MSC/restore.md b/website/translated_docs/de/MSC/restore.md index 9c760f468b80ee..8b4fe9867ff873 100644 --- a/website/translated_docs/de/MSC/restore.md +++ b/website/translated_docs/de/MSC/restore.md @@ -1,7 +1,7 @@ --- id: restore -title: Seite Wiederherstellen -sidebar_label: Seite Wiederherstellen +title: Restore Page +sidebar_label: Restore Page --- You can manually restore an archive of the current application using the **Restore** page. This page provides several options that can be used to control the restoration: @@ -10,54 +10,54 @@ You can manually restore an archive of the current application using the **Resto > 4D automatic recovery systems restore applications and include data log file when necessary. -The list found in the left part of the window displays any existing backups of the application. You can also click on the **Browse...** button found just under the area in order to open any other archive file from a different location. Es wird dann zur Liste der Archive hinzugefügt. +The list found in the left part of the window displays any existing backups of the application. You can also click on the **Browse...** button found just under the area in order to open any other archive file from a different location. It is then added to the list of archives. -Wählen Sie hier ein Backup aus, erscheinen im rechten Teil des Fensters Informationen über dieses Backup: +When you select a backup in this list, the right part of the window displays the information concerning this particular backup: -- **Path**: Complete pathname of the selected backup file. Mit der Schaltfläche Anzeigen öffnen Sie die Backup-Datei in einem Systemfenster. +- **Path**: Complete pathname of the selected backup file. Clicking the Show button opens the backup file in a system window. - **Date and Time**: Date and time of backup. -- **Content**: Contents of the backup file. Neben jedem Eintrag in der Liste gibt es ein Ankreuzfeld, über das Sie angeben, ob er wiederhergestellt werden soll. You can also use the **Check All** or **Uncheck All** buttons to set the list of items to be restored. +- **Content**: Contents of the backup file. Each item in the list has a check box next to it which can be used to indicate whether or not you want to restore it. You can also use the **Check All** or **Uncheck All** buttons to set the list of items to be restored. - **Destination folder of the restored files**: Folder where the restored files will be placed. By default, 4D restores the files in a folder named “Archivename” (no extension) that is placed next to the Project folder. To change this location, click on **[...]** and specify the folder where you want the restored files to be placed. The **Restore** button launches the manual restoration of the selected element(s). -## Mehrere Logbücher der Daten nacheinander integrieren +## Successive integration of several data log files -The **Integrate one or more log file(s) after restore** option allows you to integrate several data log files successively into an application. If, for example, you have 4 journal file archives (.4BL) corresponding to 4 backups, you can restore the first backup then integrate the journal (data log) archives one by one. Auf diese Weise können Sie z. B. eine Datei wiederherstellen, auch wenn die letzten Backup-Dateien fehlen. +The **Integrate one or more log file(s) after restore** option allows you to integrate several data log files successively into an application. If, for example, you have 4 journal file archives (.4BL) corresponding to 4 backups, you can restore the first backup then integrate the journal (data log) archives one by one. This means that you can, for example, recover a data file even when the last backup files are missing. -Ist diese Option markiert, zeigt 4D nach dem Wiederherstellen den Standard Öffnen-Dialog. Hier können Sie das entsprechende Logbuch auswählen. Der Öffnen-Dialog erscheint erneut nach jeder Integration, bis er abgebrochen wird. +When this option is checked, 4D displays the standard Open file dialog box after the restore, which can be used to select journal file to be integrated. The Open file dialog box is displayed again after each integration until it is cancelled. -## Eine verschlüsselte Anwendung wiederherstellen +## Restoring an encrypted database -Keep in mind that the data encryption key (passphrase) may have been changed through several versions of backup files (.4BK), .journal files (.4BL) and the current application. Es müssen immer passende Verschlüsselungscodes angegeben werden. +Keep in mind that the data encryption key (passphrase) may have been changed through several versions of backup files (.4BK), .journal files (.4BL) and the current application. Matching encryption keys must always be provided. -Beim Wiederherstellen eines Backup und Integration des aktuellen Logbuchs in eine verschlüsselte Anwendung gilt folgendes: +When restoring a backup and integrating the current log file in a encrypted database: -- Stellen Sie ein Backup mit einer alten Passphrase her, ist diese Passphrase beim nächsten Starten der Anwendung erforderlich. -- Nach dem Verschlüsseln läuft beim Öffnen einer verschlüsselten Datendatei ein Backup und es wird ein neues Logbuch erstellt. Deshalb ist es nicht möglich, eine Datei .4BK, die einen Verschlüsselungscode hat, wiederherzustellen und .4BL Dateien, die einen anderen Verschlüsselungscode haben, zu integrieren. +- If you restore a backup using an old passphrase, this passphrase will be required at the next database startup. +- After an encryption, when opening the encrypted data file, a backup is run and a new journal file is created. Thus, it is not possible to restore a .4BK file encrypted with one key and integrate .4BL files encrypted with another key. -Nachfolgende Übersicht zeigt die Vorgehensweise bei einer Operation Backup/Wiederherstellen mit mehreren Schlüsseln: +The following sequence illustrates the principles of a multi-key backup/restore operation: -| Operation | Generierte Dateien | Kommentar | -| --------------------------------- | ------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| New data file | | | -| Daten hinzufügen (Datensatz # 1) | | | -| Backup Anwendung | 0000.4BL und 0001.4BK | | -| Daten hinzufügen (Datensatz # 2) | | | -| Backup Anwendung | 0001.4BL und 0002.4BK | | -| Daten hinzufügen (Datensatz # 3) | | | -| Datendatei mit key1 verschlüsseln | Datei 0003.4BK (verschlüsselt mit key1) | Verschlüsselung sichert Originaldateien (inkl. Journal) im Ordner "Replaced files (Encrypting) YYY-DD-MM HH-MM-SS". Beim Öffnen der verschlüsselten Datendatei wird ein neues Journal erstellt und ein Backup zum Aktivieren dieses Journals gemacht | -| Daten hinzufügen (Datensatz #4) | | | -| Backup Anwendung | Dateien 0003.4BL und 0004.4BK (verschlüsselt mit key1) | Wir können 0003.4BK wiederherstellen und 0003.4BL integrieren | -| Daten hinzufügen (Datensatz # 5) | | | -| Backup Anwendung | Dateien 0004.4BL und 0005.4BK (verschlüsselt mit key1) | Wir können 0003.4BK wiederherstellen und 0003.4BL + 0004.4BL integrieren. Wir können 0004.4BK wiederherstellen und 0004.4BL integrieren | -| Daten hinzufügen (Datensatz # 6) | | | -| Datendatei mit key2 verschlüsseln | Datei 0006.4BK (verschlüsselt mit key2) | Verschlüsselung sichert Originaldateien (inkl. Journal) im Ordner "Replaced files (Encrypting) YYY-DD-MM HH-MM-SS". Beim Öffnen der verschlüsselten Datendatei wird ein neues Journal erstellt und ein Backup zum Aktivieren dieses Journals gemacht | -| Daten hinzufügen (Datensatz # 7) | | | -| Backup Anwendung | Dateien 0006.4BL und 0007.4BK (verschlüsselt mit key2) | Wir können 0006.4BK wiederherstellen und 0006.4BL integrieren | -| Daten hinzufügen (Datensatz # 8) | | | -| Backup Anwendung | Dateien 0007.4BL und 0008.4BK (verschlüsselt mit key2) | Wir können 0006.4BK wiederherstellen und 0006.4BL + 0007.4BL integrieren. Wir können 0007.4BK wiederherstellen und 0007.4BL integrieren | -> Beim Wiederherstellen eines Backup .4BK und Integrieren eines oder mehrerer Logbücher .4BL müssen diese Dateien denselben Verschlüsselungscode haben. Wird während dem Integrieren der .4BL Datei im 4D Schlüsselbund kein gültiger Verschlüsselungscode gefunden, wird ein Fehler generiert. +| Operation | Generated files | Comment | +| --------------------------- | ------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| New data file | | | +| Add data (record # 1) | | | +| Backup database | 0000.4BL and 0001.4BK | | +| Add data (record # 2) | | | +| Backup database | 0001.4BL and 0002.4BK | | +| Add data (record # 3) | | | +| Encrypt data file with key1 | 0003.4BK file (encrypted with key1) | Encryption saves original files (including journal) in folder "Replaced files (Encrypting) YYY-DD-MM HH-MM-SS". When opening the encrypted data file, a new journal is created and a backup is made to activate this journal | +| Add data (record #4) | | | +| Backup database | 0003.4BL and 0004.4BK files (encrypted with key1) | We can restore 0003.4BK and integrate 0003.4BL | +| Add data (record # 5) | | | +| Backup database | 0004.4BL and 0005.4BK files (encrypted with key1) | We can restore 0003.4BK and integrate 0003.4BL + 0004.4BL. We can restore 0004.4BK and integrate 0004.4BL | +| Add data (record # 6) | | | +| Encrypt data file with key2 | 0006.4BK file (encrypted with key2) | Encryption saves original files (including journal) in folder "Replaced files (Encrypting) YYY-DD-MM HH-MM-SS". When opening the encrypted data file, a new journal is created and a backup is made to activate this journal | +| Add data (record # 7) | | | +| Backup database | 0006.4BL and 0007.4BK files (encrypted with key2) | We can restore 0006.4BK and integrate 0006.4BL | +| Add data (record # 8) | | | +| Backup database | 0007.4BL and 0008.4BK files (encrypted with key2) | We can restore 0006.4BK and integrate 0006.4BL + 0007.4BL. We can restore 0007.4BK and integrate 0007.4BL | +> When restoring a backup and integrating one or several .4BL files, the restored .4BK and .4BL files must have the same encryption key. During the integration process, if no valid encryption key is found in the 4D keychain when the .4BL file is integrated, an error is generated. > -> Haben Sie aufeinanderfolgende Datenschlüssel auf einem externen Gerät gespeichert und wird es angeschlossen, wird beim Wiederherstellen des Backup und Integrieren der Logbücher automatisch der jeweils passende Schlüssel gefunden. +> If you have stored successive data keys on the same external device, restoring a backup and integrating log files will automatically find the matching key if the device is connected. From 5e5d613c8fcca65ba01b16cdf97a01d8f8bd425e Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:56:09 +0100 Subject: [PATCH 211/311] New translations splitters.md (German) --- website/translated_docs/de/FormObjects/splitters.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/FormObjects/splitters.md b/website/translated_docs/de/FormObjects/splitters.md index c613b12eef9c37..38aeb2be788bd8 100644 --- a/website/translated_docs/de/FormObjects/splitters.md +++ b/website/translated_docs/de/FormObjects/splitters.md @@ -46,7 +46,7 @@ In a form, splitters interact with the objects that are around them according to | Resizing options for the object(s) | Object(s) above an horizontal splitter or to the left of a vertical splitter (1) | Object(s) below an horizontal *non-Pusher* splitter or to the right of a vertical *non-Pusher* splitter | Object(s) below an horizontal *Pusher* splitter or to the right of a vertical *Pusher* splitter | | ---------------------------------- | ----------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | | None | Remain as is | Are moved with the splitter (position relative to the splitter is not modified) until the next stop. The stop when moving to the bottom or right is either the window’s border, or another splitter. | Are moved with the splitter (position relative to the splitter is not modified) indefinitely. No stop is applied (see the next paragraph) | -| Zoomen | Keep original position(s), but are resized according to the splitter’s new position | | | +| Resize | Keep original position(s), but are resized according to the splitter’s new position | | | | Move | Are moved with the splitter | | | *(1) You cannot drag the splitter past the right (horizontal) or bottom (vertical) side of an object located in this position.* From c34f22272863594b5248db936be38ff47391cbd2 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:56:15 +0100 Subject: [PATCH 212/311] New translations repair.md (German) --- website/translated_docs/de/MSC/repair.md | 64 ++++++++++++------------ 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/website/translated_docs/de/MSC/repair.md b/website/translated_docs/de/MSC/repair.md index e15eca5ce0db0e..55bc4e7794c9b0 100644 --- a/website/translated_docs/de/MSC/repair.md +++ b/website/translated_docs/de/MSC/repair.md @@ -1,69 +1,69 @@ --- id: repair -title: Seite Reparieren -sidebar_label: Seite Reparieren +title: Repair Page +sidebar_label: Repair Page --- -Auf dieser Seite wählen Sie Optionen zum Reparieren der Datendatei bei Beschädigung. Generally, you will only use these functions at the request of 4D, when anomalies have been detected while opening the application or following a [verification](verify.md). +This page is used to repair the data file when it has been damaged. Generally, you will only use these functions at the request of 4D, when anomalies have been detected while opening the application or following a [verification](verify.md). -**Warning:** Each repair operation involves the duplication of the original file, which increases the size of the application folder. Sie sollten darauf achten (besonders auf macOS, wo 4D Anwendungen als Package erscheinen), dass die Größe der Anwendung nicht exzessiv ansteigt. In diesem Fall ist es hilfreich, die Kopien der Originaldatei im Package manuell zu entfernen, damit die Größe des Package im Rahmen bleibt. -> Reparieren ist nur im Wartungsmodus verfügbar. If you attempt to carry out this operation in standard mode, a warning dialog will inform you that the application will be closed and restarted in maintenance mode. -> Bei einer verschlüsselten Anwendung enthält das Reparieren auch die Schritte Entschlüsselung und Verschlüsselung. Dazu ist auch der aktuelle Verschlüsselungscode erforderlich. Ist noch kein gültiger Verschlüsselungscode angegeben, erscheint ein Dialogfenster, das die Passphrase oder den Verschlüsselungscode anfordert (siehe Seite Verschlüsseln). +**Warning:** Each repair operation involves the duplication of the original file, which increases the size of the application folder. It is important to take this into account (especially in macOS where 4D applications appear as packages) so that the size of the application does not increase excessively. Manually removing the copies of the original file inside the package can be useful to minimize the package size. +> Repairing is only available in maintenance mode. If you attempt to carry out this operation in standard mode, a warning dialog will inform you that the application will be closed and restarted in maintenance mode. +> When the database is encrypted, repairing data includes decryption and encryption steps and thus, requires the current data encryption key. If no valid encryption key has already been provided, a dialog requesting the passphrase or the encryption key is displayed (see Encrypt page). -## Datei Überblick +## File overview -### Datendatei reparieren -Pfadname der aktuellen Datendatei. The **[...]** button can be used to specify another data file. Klicken Sie auf diese Schaltfläche, erscheint ein Standard-Öffnen Dialog, um die gewünschte Datendatei zum Reparieren auszuwählen. Bei der [Standard Reparatur](#standard_repair) müssen Sie eine Datendatei wählen, die mit der geöffneten Projektdatei kompatibel ist. Bei [Reparieren nach Datensatzheader](#recover-by-record-headers) können Sie jede Datendatei wählen. Bestätigen Sie dieses Dialogfenster, erscheint der Pfadname der Datei zum Reparieren im Fenster. +### Data file to be repaired +Pathname of the current data file. The **[...]** button can be used to specify another data file. When you click on this button, a standard Open document dialog is displayed so that you can designate the data file to be repaired. If you perform a [standard repair](#standard_repair), you must select a data file that is compatible with the open project file. If you perform a [recover by record headers](#recover-by-record-headers) repair, you can select any data file. Once this dialog has been validated, the pathname of the file to be repaired is indicated in the window. -### Ordner Backup der Originaldateien -Standardmäßig wird die Originaldatei vor dem Reparieren dupliziert It will be placed in a subfolder named “Replaced files (repairing)” in the application folder. The second **[...]** button can be used to specify another location for the original files to be saved before repairing begins. Diese Möglichkeit ist insbesondere beim Reparieren umfangreicher Dateien auf verschiedenen Festplatten hilfreich. +### Original files backup folder +By default, the original data file will be duplicated before the repair operation. It will be placed in a subfolder named “Replaced files (repairing)” in the application folder. The second **[...]** button can be used to specify another location for the original files to be saved before repairing begins. This option can be used more particularly when repairing voluminous files while using different disks. -### Reparierte Dateien -4D erstellt eine neue leere Datendatei an der Stelle der Originaldatei. The original file is moved into the folder named "\Replaced Files (Repairing) date time" whose location is set in the "Original files backup folder" area (application folder by default). Die leere Datei wird mit den wiederhergestellten Daten gefüllt. +### Repaired files +4D creates a new blank data file at the location of the original file. The original file is moved into the folder named "\Replaced Files (Repairing) date time" whose location is set in the "Original files backup folder" area (application folder by default). The blank file is filled with the recovered data. -## Standard Reparatur +## Standard repair -Wählen Sie diese Option, wenn nur wenige Datensätze oder Indizes beschädigt sind (Adresstabellen sind intakt). Die Daten werden komprimiert und repariert. Diese Art der Reparatur lässt sich nur ausführen, wenn Datendatei und Strukturdatei zueinander passen. +Standard repair should be chosen when only a few records or indexes are damaged (address tables are intact). The data is compacted and repaired. This type of repair can only be performed when the data and structure file match. -Ist die Reparatur abgeschlossen, erscheint die Seite "Reparieren" des MSC. Eine Meldung gibt an, ob die Reparatur erfolgreich war. If so, you can open the application immediately. ![](assets/en/MSC/MSC_RepairOK.png) +When the repair procedure is finished, the "Repair" page of the MSC is displayed. A message indicates if the repair was successful. If so, you can open the application immediately. ![](assets/en/MSC/MSC_RepairOK.png) -## Wiederherstellen nach Datensatzheader -Verwenden Sie diese Reparatur auf niederer Ebene nur, wenn die Datendatei ernsthaft beschädigt ist und alle anderen Lösungen, wie Wiederherstellen über ein Backup, Standard Reparatur wirkungslos geblieben sind. +## Recover by record headers +Use this low-level repair option only when the data file is severely damaged and after all other solutions (restoring from a backup, standard repair) have proven to be ineffective. -4D Datensätze sind unterschiedlich groß. Deshalb muss die Stelle, wo sie auf der Festplatte in einer spezifischen Tabelle, genannt Adresstabelle, gespeichert sind, beibehalten werden, um sie wieder zu finden. Das Programm greift deshalb auf die Adresse des Datensatzes über einen Index und eine Adresstabelle zu. Sind nur Datensätze oder Indizes beschädigt, reicht die Standardreparatur in der Regel aus, um das Problem zu lösen. Ist dagegen die Adresstabelle selbst betroffen, ist ein komplexeres Wiederherstellen erforderlich, da diese Tabelle wiederhergestellt werden muss. Dazu verwendet das MSC die Marker, die im Kopfteil jedes Datensatzes angelegt sind. Sie sind vergleichbar mit einem Inhaltsverzeichnis des Datensatzes, inkl. aller wichtigen Informationen, über die sich die Adresstabelle rekonstruieren lässt. +4D records vary in size, so it is necessary to keep the location where they are stored on disk in a specific table, named address table, in order to find them again. The program therefore accesses the address of the record via an index and the address table. If only records or indexes are damaged, the standard repair option is usually sufficient to resolve the problem. However, when the address table itself is affected, it requires a more sophisticated recovery since it will be necessary to reconstitute it. To do this, the MSC uses the marker located in the header of each record. The markers are compared to a summary of the record, including the bulk of their information, and from which it is possible to reconstruct the address table. > If you have deselected the **Records definitively deleted** option in the properties of a table in the structure, performing a recovery by header markers may cause records that were previously deleted to reappear. > -> Wiederherstellen nach Kopfteil berücksichtigt keine Einschränkungen zur Datenintegrität. More specifically, after this operation you may get duplicated values with unique fields or NULL values with fields declared **Never Null**. +> Recovery by headers does not take integrity constraints into account. More specifically, after this operation you may get duplicated values with unique fields or NULL values with fields declared **Never Null**. -When you click on **Scan and repair...**, 4D performs a complete scan of the data file. Ist die Operation abgeschlossen, erscheint folgendes Fenster: +When you click on **Scan and repair...**, 4D performs a complete scan of the data file. When the scan is complete, the results appear in the following window: ![](assets/en/MSC/mscrepair2.png) -> Ließen sich alle Datensätze und alle Tabellen zuordnen, erscheint nur der Hauptbereich. +> If all the records and all the tables have been assigned, only the main area is displayed. -Der Bereich "Datensätze in Datendatei gefunden" besteht aus zwei Tabellen mit den Informationen aus dem Scan-Vorgang. +The "Records found in the data file" area includes two tables summarizing the information from the scan of the data file. -- Die erste Tabelle zeigt die Information aus dem Scannen der Datendatei. Jede Zeile enthält eine Gruppe der wiederherstellbaren Datensätze in der Datendatei: +- The first table lists the information from the data file scan. Each row shows a group of recoverable records in the data file: - The **Order** column indicates the recovery order for the group of records. - The **Count** column indicates the number of the records in the table. - - The **Destination table** column indicates the names of tables that were automatically assigned to the groups of identified records. Die Namen der dazugehörigen Tabellen erscheinen automatisch in grün. Nicht zugewiesene Gruppen, z.B. Tabellen, die keinen Datensätzen zugeordnet werden konnten, erscheinen in rot. - - The **Recover** column lets you indicate, for each group, whether you want to recover the records. Diese Option ist standardmäßig für jede Gruppe mit Datensätzen markiert, die einer Tabelle zugeordnet werden können. + - The **Destination table** column indicates the names of tables that were automatically assigned to the groups of identified records. The names of tables assigned automatically appear in green. Groups that were not assigned, i.e. tables that could not be associated with any records appear in red. + - The **Recover** column lets you indicate, for each group, whether you want to recover the records. By default, this option is checked for every group with records that can be associated with a table. -- Die zweite Tabelle zeigt die Tabellen der Projekt-Datei. +- The second table lists the tables of the project file. -### Manuell zuweisen -Ließen sich einige Datensatzgruppen aufgrund einer beschädigten Adresstabelle keinen Tabellen zuweisen, können Sie diese manuell zuweisen. Dazu wählen Sie zuerst im ersten Bereich eine nicht zugewiesene Gruppe aus. Zur leichteren Zuordnung zeigt der untere Bereich "Inhalt der Datensätze" eine Vorschau vom Inhalt der ersten Datensätze: +### Manual assigning +If several groups of records could not be assigned to tables due to a damaged address table, you can assign them manually. To do this, first select an unassigned group of records in the first table. The "Content of the records" area then displays a preview of the contents of the first records of the group to make it easier to assign them: ![](assets/en/MSC/mscrepair3.png) -Next select the table you want to assign to the group in the "Unassigned tables" table and click on the **Identify table** button. Sie können eine Tabelle auch per Drag-and-Drop zuweisen. Die Datensatzgruppe wird dann der Tabelle zugewiesen und in dieser Tabelle wiederhergestellt. Die per Hand zugewiesenen Tabellennamen erscheinen in schwarz. Use the **Ignore records** button to remove the association made manually between the table and the group of records. +Next select the table you want to assign to the group in the "Unassigned tables" table and click on the **Identify table** button. You can also assign a table using drag and drop. The group of records is then associated with the table and it will be recovered in this table. The names of tables that are assigned manually appear in black. Use the **Ignore records** button to remove the association made manually between the table and the group of records. -## Logbuch öffnen +## Open log file -After repair is completed, 4D generates a log file in the Logs folder of the project. Hier können Sie alle ausgeführten Operationen ansehen. It is created in XML format and named: *ApplicationName**_Repair_Log_yyyy-mm-dd hh-mm-ss.xml*" where: +After repair is completed, 4D generates a log file in the Logs folder of the project. This file allows you to view all the operations carried out. It is created in XML format and named: *ApplicationName**_Repair_Log_yyyy-mm-dd hh-mm-ss.xml*" where: - *ApplicationName* is the name of the project file without any extension, for example "Invoices", - *yyyy-mm-dd hh-mm-ss* is the timestamp of the file, based upon the local system time when the maintenance operation was started, for example "2019-02-11 15-20-45". From f2ecdfe414a2a7e473564bd6045682ce043fd5db Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:56:17 +0100 Subject: [PATCH 213/311] New translations rollback.md (German) --- website/translated_docs/de/MSC/rollback.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/website/translated_docs/de/MSC/rollback.md b/website/translated_docs/de/MSC/rollback.md index 8176192e658a15..ded1eb72f1edfa 100644 --- a/website/translated_docs/de/MSC/rollback.md +++ b/website/translated_docs/de/MSC/rollback.md @@ -1,10 +1,10 @@ --- id: rollback -title: Seite Zurückfahren -sidebar_label: Seite Zurückfahren +title: Rollback Page +sidebar_label: Rollback Page --- -Auf dieser Seite können Sie auf die Funktion Rollback für die im Logbuch ausgeführten Operationen zugreifen. Sie arbeitet ähnlich wie die Operation Rückgängig auf mehreren Ebenen. Das ist besonders hilfreich, wenn ein Datensatz versehentlich in der Datenbank gelöscht wurde. +You use the Rollback page to access the rollback function among the operations carried out on the data file. It resembles an undo function applied over several levels. It is particularly useful when a record has been deleted by mistake in a database. This function is only available when the application functions with a data log file. @@ -12,14 +12,14 @@ This function is only available when the application functions with a data log f > If the database is encrypted and no valid data key corresponding to the open log file has been provided, encrypted values are not displayed in the **Values** column and a dialog requesting the passphrase or the data key is displayed if you click the **Rollback** button. -Die Liste ist genauso aufgebaut und funktioniert wie auf der Seite [Aktivitätsanalyse](analysis.md). +The contents and functioning of the list of operations are the same as for the [Activity analysis](analysis.md) window. -Um ein Rollback in den Operationen auszuführen, wählen Sie die Zeile, nach der alle Operationen annulliert werden sollen. Die Operation der gewählten Zeile bleibt als letzte erhalten. Wollen Sie z. B. einen Löschvorgang aufheben, wählen Sie die direkt davor liegende Operation. Diese bleibt dann erhalten, alle nachfolgenden Operationen werden annulliert. +To perform a rollback among the operations, select the row after which all operations must be cancelled. The operation of the selected row will be the last kept. If, for example, you wish to cancel a deletion, select the operation located just before it. The deletion operation, as well as all subsequent operations, will be cancelled. ![](assets/en/MSC/MSC_rollback2.png) -Next click on the **Rollback** button. Auf dem Bildschirm erscheint ein Dialogfenster zum Bestätigen. If you click **OK**, the data is then restored to the exact state it was in at the moment of the selected action. +Next click on the **Rollback** button. 4D asks you to confirm the operation. If you click **OK**, the data is then restored to the exact state it was in at the moment of the selected action. -Über das PopUp-Menü am unteren Rand wählen Sie das passende Logbuch zum Ausführen der Rollback-Funktion in einer wiederhergestellten Datenbank. In diesem Fall müssen Sie das passende Logbuch der Datei im Archiv angeben. +You use the menu found at the bottom of the window to select a data log file to be used when you apply the rollback function to a database restored from an archive file. In this case, you must specify the data log file corresponding to the archive. -Here is how the rollback function works: when the user clicks the **Rollback** button, 4D shuts the current database and restores the last backup of the database data. Die wiederhergestellte Datenbank wird dann geöffnet. 4D integriert die Operationen des Logbuchs bis zur gewählten Operation. Wurde die Datenbank noch nicht gesichert, startet 4D mit einer leeren Datendatei. \ No newline at end of file +Here is how the rollback function works: when the user clicks the **Rollback** button, 4D shuts the current database and restores the last backup of the database data. The restored database is then opened and 4D integrates the operations of the data log file up through to the selected operation. If the database has not yet been saved, 4D starts with a blank data file. \ No newline at end of file From 3a6b70d7505c8d68e61b7679180a45ff9c9d9a8b Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:56:19 +0100 Subject: [PATCH 214/311] New translations $compute.md (German) --- website/translated_docs/de/REST/$compute.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/website/translated_docs/de/REST/$compute.md b/website/translated_docs/de/REST/$compute.md index 6d73649885d711..d60c8fcfaf6a9a 100644 --- a/website/translated_docs/de/REST/$compute.md +++ b/website/translated_docs/de/REST/$compute.md @@ -6,7 +6,7 @@ title: '$compute' Calculate on specific attributes (*e.g.*, `Employee/salary/?$compute=sum)` or in the case of an Object attribute (*e.g.*, Employee/objectAtt.property1/?$compute=sum) -## Beschreibung +## Description This parameter allows you to do calculations on your data. @@ -14,14 +14,14 @@ If you want to perform a calculation on an attribute, you write the following: `GET /rest/Employee/salary/?$compute=$all` -If you want to pass an Object attribute, you must pass one of its property. Beispiel: +If you want to pass an Object attribute, you must pass one of its property. For example: `GET /rest/Employee/objectAtt.property1/?$compute=$all` You can use any of the following keywords: -| Keyword | Beschreibung | +| Keyword | Description | | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | $all | A JSON object that defines all the functions for the attribute (average, count, min, max, and sum for attributes of type Number and count, min, and max for attributes of type String | | average | Get the average on a numerical attribute | @@ -31,7 +31,7 @@ You can use any of the following keywords: | sum | Get the sum on a numerical attribute | -## Beispiel +## Example If you want to get all the computations for an attribute of type Number, you can write: From 83182f2a34219cc828b3910eea92b7b11972ee56 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:56:21 +0100 Subject: [PATCH 215/311] New translations architecture.md (German) --- .../de/Project/architecture.md | 62 +++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/website/translated_docs/de/Project/architecture.md b/website/translated_docs/de/Project/architecture.md index 14ccb5dcf6a7d5..542a7aa746eee3 100644 --- a/website/translated_docs/de/Project/architecture.md +++ b/website/translated_docs/de/Project/architecture.md @@ -3,11 +3,11 @@ id: architecture title: Architecture of a project --- -A 4D project is made of several folders and files, stored within a single parent application folder (package folder). Beispiel: +A 4D project is made of several folders and files, stored within a single parent application folder (package folder). For example: - MyProject - - Komponenten - - Daten + - Components + - Data - Logs - Settings - Documentation @@ -32,12 +32,12 @@ The Project folder typically contains the following hierarchy: - Sources + Classes + DatabaseMethods - + Methoden - + Formulare + + Methods + + Forms + TableForms - + Trigger + + Triggers - DerivedData -- Trash (falls vorhanden) +- Trash (if any) ### *applicationName*.4DProject file @@ -52,7 +52,7 @@ Project development file, used to designate and launch the project. This file ca ### Sources folder -| Inhalt | Beschreibung | Format | +| Contents | Description | Format | | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | | catalog.4DCatalog | Table and field definitions | XML | | folders.json | Explorer folder definitions | JSON | @@ -68,50 +68,50 @@ Project development file, used to designate and launch the project. This file ca #### DatabaseMethods folder -| Inhalt | Beschreibung | Format | +| Contents | Description | Format | | ------------------------ | --------------------------------------------------------------------- | ------ | -| *databaseMethodName*.4dm | Database methods defined in the project. One file per database method | Text | +| *databaseMethodName*.4dm | Database methods defined in the project. One file per database method | text | #### Methods folder -| Inhalt | Beschreibung | Format | +| Contents | Description | Format | | ---------------- | ----------------------------------------------------------- | ------ | -| *methodName*.4dm | Project methods defined in the project. One file per method | Text | +| *methodName*.4dm | Project methods defined in the project. One file per method | text | #### Classes folder -| Inhalt | Beschreibung | Format | +| Contents | Description | Format | | --------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------ | -| *className*.4dm | User class definition method, allowing to instantiate specific objects. One file per class, the name of the file is the class name | Text | +| *className*.4dm | User class definition method, allowing to instantiate specific objects. One file per class, the name of the file is the class name | text | #### Forms folder -| Inhalt | Beschreibung | Format | +| Contents | Description | Format | | ----------------------------------------- | ------------------------------------------ | ------- | | *formName*/form.4DForm | Project form description | json | -| *formName*/method.4dm | Project form method | Text | +| *formName*/method.4dm | Project form method | text | | *formName*/Images/*pictureName* | Project form static picture | picture | -| *formName*/ObjectMethods/*objectName*.4dm | Object methods. One file per object method | Text | +| *formName*/ObjectMethods/*objectName*.4dm | Object methods. One file per object method | text | #### TableForms folder -| Inhalt | Beschreibung | Format | +| Contents | Description | Format | | ---------------------------------------------------- | ------------------------------------------------------ | ------- | | *n*/Input/*formName*/form.4DForm | Input table form description (n is the table number) | json | | *n*/Input/*formName*/Images/*pictureName* | Input table form static pictures | picture | -| *n*/Input/*formName*/method.4dm | Input table form method | Text | -| *n*/Input/*formName*/ObjectMethods/*objectName*.4dm | Input form object methods. One file per object method | Text | +| *n*/Input/*formName*/method.4dm | Input table form method | text | +| *n*/Input/*formName*/ObjectMethods/*objectName*.4dm | Input form object methods. One file per object method | text | | *n*/Output/*formName*/form.4DForm | Output table form description (n is the table number) | json | | *n*/Output/*formName*/Images/*pictureName* | Output table form static pictures | picture | -| *n*/Output/*formName*/method.4dm | Output table form method | Text | -| *n*/Output/*formName*/ObjectMethods/*objectName*.4dm | Output form object methods. One file per object method | Text | +| *n*/Output/*formName*/method.4dm | Output table form method | text | +| *n*/Output/*formName*/ObjectMethods/*objectName*.4dm | Output form object methods. One file per object method | text | #### Triggers folder -| Inhalt | Beschreibung | Format | +| Contents | Description | Format | | ------------- | ------------------------------------------------------------------------------------------ | ------ | -| table_*n*.4dm | Trigger methods defined in the project. One trigger file per table (n is the table number) | Text | +| table_*n*.4dm | Trigger methods defined in the project. One trigger file per table (n is the table number) | text | **Note:** The .4dm file extension is a text-based file format, containing the code of a 4D method. It is compliant with source control tools. @@ -120,8 +120,8 @@ Project development file, used to designate and launch the project. This file ca The Trash folder contains methods and forms that were deleted from the project (if any). It can contain the following folders: -- Methoden -- Formulare +- Methods +- Forms - TableForms Within these folders, deleted element names are in parentheses, e.g. "(myMethod).4dm". The folder organization is identical to the [Sources](#sources) folder. @@ -136,7 +136,7 @@ The DerivedData folder contains cached data used internally by 4D to optimize pr The Resources folder contains any custom project resource files and folders. In this folder, you can place all the files needed for the translation or customization of the application interface (picture files, text files, XLIFF files, etc.). 4D uses automatic mechanisms to work with the contents of this folder, in particular for the handling of XLIFF files and static pictures. For using in remote mode, the Resources folder lets you share files between the server machine and all the client machines. See the *4D Server Reference Manual*. -| Inhalt | Beschreibung | Format | +| Contents | Description | Format | | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | | *item* | Project resource files and folders | various | | Images/Library/*item* | Pictures from the Picture Library as separate files(*). Names of these items become file names. If a duplicate exists, a number is added to the name. | picture | @@ -148,7 +148,7 @@ The Resources folder contains any custom project resource files and folders. In The data folder contains the data file and all files and folders relating to the data. -| Inhalt | Beschreibung | Format | +| Contents | Description | Format | | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | | data.4dd(*) | Data file containing data entered in the records and all the data belonging to the records. When you open a 4D project, the application opens the current data file by default. If you change the name or location of this file, the *Open data file* dialog box will then appear so that you can select the data file to use or create a new one | binary | | data.journal | Created only when the database uses a log file. The log file is used to ensure the security of the data between backups. All operations carried out on the data are recorded sequentially in this file. Therefore, each operation on the data causes two simultaneous actions: the first on the data (the statement is executed normally) and the second in the log file (a description of the operation is recorded). The log file is constructed independently, without disturbing or slowing down the user’s work. A database can only work with a single log file at a time. The log file records operations such as additions, modifications or deletions of records, transactions, etc. It is generated by default when a database is created. | binary | @@ -162,7 +162,7 @@ This folder contains **user settings files for data** used for application admin > These settings take priority over **[user settings files](#settings-folder-1)** and **[structure settings](#sources-folder)** files. -| Inhalt | Beschreibung | Format | +| Contents | Description | Format | | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | | directory.json | Description of 4D groups, users, and their access rights when the application is run with this data file. | JSON | | Backup.4DSettings | Database backup settings, used to set the [backup options](Backup/settings.md) when the database is run with this data file. Keys concerning backup configuration are described in the *4D XML Keys Backup* manual. | XML | @@ -187,7 +187,7 @@ This folder contains **user settings files** used for application administration > These settings take priority over **[structure settings](#sources-folder)** files. However, if a **[user settings file for data](#settings-folder)** exists, it takes priority over user settings file. -| Inhalt | Beschreibung | Format | +| Contents | Description | Format | | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------ | | directory.json | Description of 4D groups and users for the application, as well as their access rights | JSON | | Backup.4DSettings | Database backup settings, used to set the [backup options](Backup/settings.md)) when each backup is launched. This file can also be used to read or set additional options, such as the amount of information stored in the *backup journal*. Keys concerning backup configuration are described in the *4D XML Keys Backup* manual. | XML | @@ -198,7 +198,7 @@ This folder contains **user settings files** used for application administration This folder contains files that memorize user configurations, e.g. break point positions. You can just ignore this folder. It contains for example: -| Inhalt | Beschreibung | Format | +| Contents | Description | Format | | ---------------------------- | ------------------------------------------------------ | ------ | | methodPreferences.json | Current user method editor preferences | JSON | | methodWindowPositions.json | Current user window positions for methods | JSON | From 44de187f7df2dd232018ba14f9e4d802399471ae Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:56:24 +0100 Subject: [PATCH 216/311] New translations $catalog.md (German) --- website/translated_docs/de/REST/$catalog.md | 24 ++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/website/translated_docs/de/REST/$catalog.md b/website/translated_docs/de/REST/$catalog.md index 70353686c58343..d17daaeca941cb 100644 --- a/website/translated_docs/de/REST/$catalog.md +++ b/website/translated_docs/de/REST/$catalog.md @@ -9,7 +9,7 @@ The catalog describes all the dataclasses and attributes available in the datast ## Available syntaxes -| Syntax | Beispiel | Beschreibung | +| Syntax | Example | Description | | --------------------------------------------- | -------------------- | -------------------------------------------------------------------------------- | | [**$catalog**](#catalog) | `/$catalog` | Returns a list of the dataclasses in your project along with two URIs | | [**$catalog/$all**](#catalogall) | `/$catalog/$all` | Returns information about all of your project's dataclasses and their attributes | @@ -20,7 +20,7 @@ The catalog describes all the dataclasses and attributes available in the datast Returns a list of the dataclasses in your project along with two URIs: one to access the information about its structure and one to retrieve the data in the dataclass -### Beschreibung +### Description When you call `$catalog`, a list of the dataclasses is returned along with two URIs for each dataclass in your project's datastore. @@ -29,14 +29,14 @@ Only the exposed dataclasses are shown in this list for your project's datastore Here is a description of the properties returned for each dataclass in your project's datastore: -| Property | Typ | Beschreibung | +| Property | Type | Description | | -------- | ------ | --------------------------------------------------------------------------------- | | name | String | Name of the dataclass. | | uri | String | A URI allowing you to obtain information about the |dataclass and its attributes. | | dataURI | String | A URI that allows you to view the data in the dataclass. | -### Beispiel +### Example `GET /rest/$catalog` @@ -64,14 +64,14 @@ Here is a description of the properties returned for each dataclass in your proj Returns information about all of your project's dataclasses and their attributes -### Beschreibung +### Description Calling `$catalog/$all` allows you to receive detailed information about the attributes in each of the datastore classes in your project's active model. For more information about what is returned for each datastore class and its attributes, use [`$catalog/{dataClass}`](#catalogdataClass). -### Beispiel +### Example `GET /rest/$catalog/$all` @@ -185,7 +185,7 @@ For more information about what is returned for each datastore class and its att Returns information about a dataclass and its attributes -### Beschreibung +### Description Calling `$catalog/{dataClass}` for a specific dataclass will return the following information about the dataclass and the attributes it contains. If you want to retrieve this information for all the datastore classes in your project's datastore, use [`$catalog/$all`](#catalogall). @@ -201,11 +201,11 @@ The information you retrieve concerns the following: The following properties are returned for an exposed dataclass: -| Property | Typ | Beschreibung | +| Property | Type | Description | | -------------- | ------ | -------------------------------------------------------------------------------------------------- | | name | String | Name of the dataclass | | collectionName | String | Name of an entity selection on the dataclass | -| tableNumber | Zahl | Table number in the 4D database | +| tableNumber | Number | Table number in the 4D database | | scope | String | Scope for the dataclass (note that only datastore classes whose **Scope** is public are displayed) | | dataURI | String | A URI to the data in the dataclass | @@ -214,11 +214,11 @@ The following properties are returned for an exposed dataclass: Here are the properties for each exposed attribute that are returned: -| Property | Typ | Beschreibung | +| Property | Type | Description | | ----------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | | name | String | Attribute name. | | kind | String | Attribute type (storage or relatedEntity). | -| fieldPos | Zahl | Position of the field in the database table). | +| fieldPos | Number | Position of the field in the database table). | | scope | String | Scope of the attribute (only those attributes whose scope is Public will appear). | | indexed | String | If any **Index Kind** was selected, this property will return true. Otherwise, this property does not appear. | | type | String | Attribute type (bool, blob, byte, date, duration, image, long, long64, number, string, uuid, or word) or the datastore class for a N->1 relation attribute. | @@ -233,7 +233,7 @@ Here are the properties for each exposed attribute that are returned: The key object returns the **name** of the attribute defined as the **Primary Key** for the datastore class. -### Beispiel +### Example You can retrieve the information regarding a specific datastore class. `GET /rest/$catalog/Employee` From ec7dd92cbb9cfb55dd8417ca2b726909401558b4 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:56:25 +0100 Subject: [PATCH 217/311] New translations $binary.md (German) --- website/translated_docs/de/REST/$binary.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/REST/$binary.md b/website/translated_docs/de/REST/$binary.md index 68745668f8b984..c07c9699a761c6 100644 --- a/website/translated_docs/de/REST/$binary.md +++ b/website/translated_docs/de/REST/$binary.md @@ -5,7 +5,7 @@ title: '$binary' Pass "true" to save the BLOB as a document (must also pass `$expand={blobAttributeName}`) -## Beschreibung +## Description `$binary` allows you to save the BLOB as a document. You must also use the [`$expand`]($expand.md) command in conjunction with it. From 9d3aec11b89dfda2bb53e1782a3821aecb6838f7 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:56:27 +0100 Subject: [PATCH 218/311] New translations $attributes.md (German) --- website/translated_docs/de/REST/$attributes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/REST/$attributes.md b/website/translated_docs/de/REST/$attributes.md index fbefc32147e3cc..bc8b65d3152804 100644 --- a/website/translated_docs/de/REST/$attributes.md +++ b/website/translated_docs/de/REST/$attributes.md @@ -6,7 +6,7 @@ title: '$attributes' Allows selecting the related attribute(s) to get from the dataclass (*e.g.*, `Company(1)?$attributes=employees.lastname` or `Employee?$attributes=employer.name`). -## Beschreibung +## Description When you have relation attributes in a dataclass, use `$attributes` to define the path of attributes whose values you want to get for the related entity or entities. From 6f6d4487b2f58aee290fefc122519fdb91743347 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:56:29 +0100 Subject: [PATCH 219/311] New translations $atomic_$atonce.md (German) --- website/translated_docs/de/REST/$atomic_$atonce.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/de/REST/$atomic_$atonce.md b/website/translated_docs/de/REST/$atomic_$atonce.md index 22ad31ce26ee45..493f5fbd752900 100644 --- a/website/translated_docs/de/REST/$atomic_$atonce.md +++ b/website/translated_docs/de/REST/$atomic_$atonce.md @@ -7,11 +7,11 @@ title: '$atomic/$atonce' Allows the actions in the REST request to be in a transaction. If there are no errors, the transaction is validated. Otherwise, the transaction is cancelled. -## Beschreibung +## Description When you have multiple actions together, you can use `$atomic/$atonce` to make sure that none of the actions are completed if one of them fails. You can use either `$atomic` or `$atonce`. -## Beispiel +## Example We call the following REST request in a transaction. `POST /rest/Employee?$method=update&$atomic=true` From 11859ca987483ec00e28e1d801c87028e81fd6cb Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:56:30 +0100 Subject: [PATCH 220/311] New translations $asArray.md (German) --- website/translated_docs/de/REST/$asArray.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/de/REST/$asArray.md b/website/translated_docs/de/REST/$asArray.md index 1d046cf4ec15ae..a0b7b75b361e1e 100644 --- a/website/translated_docs/de/REST/$asArray.md +++ b/website/translated_docs/de/REST/$asArray.md @@ -7,11 +7,11 @@ title: '$asArray' Returns the result of a query in an array (i.e. a collection) instead of a JSON object. -## Beschreibung +## Description If you want to receive the response in an array, you just have to add `$asArray` to your REST request (*e.g.*, `$asArray=true`). -## Beispiel +## Example Here is an example or how to receive the response in an array. `GET /rest/Company/?$filter="name begin a"&$top=3&$asArray=true` From 7e847a7511af5a0eb4c8dd577b9ac5fea54112a8 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:56:32 +0100 Subject: [PATCH 221/311] New translations overview.md (German) --- website/translated_docs/de/Project/overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/Project/overview.md b/website/translated_docs/de/Project/overview.md index 396dd88bda16a3..ccab0c44a89315 100644 --- a/website/translated_docs/de/Project/overview.md +++ b/website/translated_docs/de/Project/overview.md @@ -1,6 +1,6 @@ --- id: overview -title: Überblick +title: Overview --- A 4D project contains all of the source code of a 4D application, whatever its deployement type (web, mobile, or desktop), from the database structure to the user interface, including code, forms, menus, user settings, or any required resources. A 4D project is primarily made of text-based files. From 8629220e798c783616f14ca687dc0a1fac453ccc Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:56:34 +0100 Subject: [PATCH 222/311] New translations documentation.md (German) --- website/translated_docs/de/Project/documentation.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/website/translated_docs/de/Project/documentation.md b/website/translated_docs/de/Project/documentation.md index 1494d42acc3a70..8e80db2b54a9d0 100644 --- a/website/translated_docs/de/Project/documentation.md +++ b/website/translated_docs/de/Project/documentation.md @@ -10,7 +10,7 @@ In application projects, you can document your methods as well as your forms, ta The following project elements accept documentation: - Methods (database methods, component methods, project methods, form methods, 4D Mobile methods, triggers, and classes) -- Formulare +- Forms - Tables and Fields Your documentation files are written in Markdown syntax (.md files) using any editor that supports Markdown. They are stored as independant files within your project folder. @@ -43,10 +43,10 @@ The `Documentation` folder architecture is the following: + **DatabaseMethods** * onStartup.md * ... - + **Formulare** + + **Forms** * loginDial.md * ... - + **Methoden** + + **Methods** * myMethod.md * ... + **TableForms** @@ -54,7 +54,7 @@ The `Documentation` folder architecture is the following: - input.md - ... * ... - + **Trigger** + + **Triggers** * table1.md * ... @@ -124,7 +124,7 @@ New documentation files are created with the following default contents: ![](assets/en/Project/comments-explo4.png) -| Line | Beschreibung | +| Line | Description | | -------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | | "\" | HTML comment. Used in priority as the method description in the [code editor tips](#viewing-documentation-in-the-code-editor) | | ## Description | Heading level 2 in Markdown. The first sentence after this tag is used as the method description in the code editor tips if HTML comment is not used | @@ -196,7 +196,7 @@ The [documentation](https://doc.4d.com) of the command .... -## Beispiel +## Example In the `WP SwitchToolbar.md` file, you can write: From 5468f208eda092a555ba17c83db95b9a5ebf70aa Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:56:36 +0100 Subject: [PATCH 223/311] New translations creating.md (German) --- website/translated_docs/de/Project/creating.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/de/Project/creating.md b/website/translated_docs/de/Project/creating.md index 970e8cbbe7d2b0..e36701060fb2a1 100644 --- a/website/translated_docs/de/Project/creating.md +++ b/website/translated_docs/de/Project/creating.md @@ -12,7 +12,7 @@ New 4D application projects can be created from **4D** or **4D Server** (see [De To create a new project: 1. Launch 4D or 4D Server. -2. Select **New > Project...** from the **File** menu:

    ![](assets/en/getStart/projectCreate1.png)

    ODER

    (4D only) Select **Project...** from the **New** toolbar button:

    ![](assets/en/getStart/projectCreate2.png)

    A standard **Save** dialog appears so you can choose the name and location of the 4D project's main folder. +2. Select **New > Project...** from the **File** menu:

    ![](assets/en/getStart/projectCreate1.png)

    OR

    (4D only) Select **Project...** from the **New** toolbar button:

    ![](assets/en/getStart/projectCreate2.png)

    A standard **Save** dialog appears so you can choose the name and location of the 4D project's main folder. 3. Enter the name of your project folder and click **Save**.

    This name will be used: - as the name of the entire project folder, @@ -29,7 +29,7 @@ You can then start developing your project. To open an existing project locally from 4D: -1. Select **Open a local application project** in the Welcome Wizard dialog,

    ODER

    Select **Open/Local Project...** from the **File** menu or the **Open** toolbar button.

    The standard Open dialog appears. +1. Select **Open a local application project** in the Welcome Wizard dialog,

    OR

    Select **Open/Local Project...** from the **File** menu or the **Open** toolbar button.

    The standard Open dialog appears. 2. Select the project's `.4dproject` file and click **Open**.

    By default, the project is opened with its current data file. Other file types are suggested: @@ -54,7 +54,7 @@ The first time you connect to a 4D Server project via a remote 4D, you will usua To connect remotely to a 4D Server project: -1. Select **Connect to 4D Server** in the Welcome Wizard dialog,

    ODER

    Select **Open/Remote Project...** from the **File** menu or the **Open** toolbar button. +1. Select **Connect to 4D Server** in the Welcome Wizard dialog,

    OR

    Select **Open/Remote Project...** from the **File** menu or the **Open** toolbar button. The 4D Server connection dialog appears. This dialog has three tabs: **Recent**, **Available**, and **Custom**. From e11843feb1e49656b0678e7534d1ee41e1ff6c15 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:56:39 +0100 Subject: [PATCH 224/311] New translations verify.md (German) --- website/translated_docs/de/MSC/verify.md | 38 ++++++++++++------------ 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/website/translated_docs/de/MSC/verify.md b/website/translated_docs/de/MSC/verify.md index 908a43ea4ae32c..5cd0434a37019e 100644 --- a/website/translated_docs/de/MSC/verify.md +++ b/website/translated_docs/de/MSC/verify.md @@ -1,27 +1,27 @@ --- id: verify -title: Seite Prüfen -sidebar_label: Seite Prüfen +title: Verify Page +sidebar_label: Verify Page --- -Auf dieser Seite können Sie die Datenintegrität überprüfen. Die Überprüfung lässt sich in Datensätzen und/oder Indizes durchführen. Diese Funktionalität prüft nur die Datenintegrität. Bei Fehlern oder notwendigen Reparaturen erhalten Sie eine Meldung, die [Seite Reparieren](repair.md) zu verwenden. +You use this page to verify data integrity. The verification can be carried out on records and/or indexes. This page only checks the data integrity. If errors are found and repairs are needed, you will be advised to use the [Repair page](repair.md). -## Aktionen +## Actions -Die Seite enthält die Schaltflächen für Aktionen, über die Sie direkt auf die Funktionen zum Überprüfen zugreifen können. -> Ist die Datenbank verschlüsselt, wird auch die Gültigkeit der verschlüsselten Datenkonsistenz überprüft. Ist noch kein gültiger Datenschlüssel angegeben, erscheint ein Dialogfenster, dass die Passphrase oder den Datenschlüssel anfordert. +The page contains action buttons that provide direct access to the verification functions. +> When the database is encrypted, verification includes validation of encrypted data consistency. If no valid data key has already been provided, a dialog requesting the passphrase or the data key is displayed. - **Verify the records and the indexes:** Starts the total data verification procedure. - **Verify the records only**: Starts the verification procedure for records only (indexes are not verified). - **Verify the indexes only**: Starts the verification procedure for indexes only (records are not verified). -> Sie können Datensätze und Indizes auch im Detail Tabelle für Tabelle überprüfen. Weitere Informationen dazu finden Sie im unteren Abschnitt. +> Verification of records and indexes can also be carried out in detail mode, table by table (see the Details section below). -## Logbuch öffnen +## Open log file -Regardless of the verification requested, 4D generates a log file in the `Logs` folder of the application. Hier erscheinen alle durchgeführten Überprüfungen und evtl. gefundene Fehler. Gibt es keine Fehler, wird das durch [OK] angezeigt. It is created in XML format and is named: *ApplicationName*_Verify_Log_*yyyy-mm-dd hh-mm-ss*.xml where: +Regardless of the verification requested, 4D generates a log file in the `Logs` folder of the application. This file lists all the verifications carried out and indicates any errors encountered, when applicable ([OK] is displayed when the verification is correct). It is created in XML format and is named: *ApplicationName*_Verify_Log_*yyyy-mm-dd hh-mm-ss*.xml where: - *ApplicationName* is the name of the project file without any extension, for example "Invoices", - *yyyy-mm-dd hh-mm-ss* is the timestamp of the file, based upon the local system time when the maintenance operation was started, for example "2019-02-11 15-20-45". @@ -36,21 +36,21 @@ The **Table list** button displays a detailed page that can be used to view and ![](assets/en/MSC/MSC_Verify.png) -Sie können bestimmte Einträge zum Überprüfen angeben, um so Zeit bei der Überprüfung zu sparen. +Specifying the items to be verified lets you save time during the verification procedure. -Die Hauptliste zeigt alle Tabellen der Datenbank. Sie können für jede Tabelle die Überprüfung auf Datensätze bzw. Indizes eingrenzen. Klicken Sie auf den Pfeil vor der Tabelle, um die Tabelle oder indizierte Datenfelder aufzuklappen und markieren Sie die Ankreuzfelder je nach gewünschter Aktion. Standardmäßig ist alles ausgewählt. You can also use the **Select all**, **Deselect all**, **All records** and **All indexes** shortcut buttons. +The main list displays all the tables of the database. For each table, you can limit the verification to the records and/or indexes. Expand the contents of a table or the indexed fields and select/deselect the checkboxes as desired. By default, everything is selected. You can also use the **Select all**, **Deselect all**, **All records** and **All indexes** shortcut buttons. -Die Spalte “Aktion” gibt für jede Zeile die auszuführenden Operationen an. Bei aufgeklappter Tabelle zeigen die Zeilen “Datensätze” und “Indizierte Felder” die Anzahl der betroffenen Einträge an. +For each row of the table, the "Action" column indicates the operations to be carried out. When the table is expanded, the "Records" and "Indexed fields" rows indicate the number of items concerned. -Die Spalte „Status“ zeigt den Überprüfungsstatus für jeden Eintrag mit dem entsprechenden Symbol an: +The "Status" column displays the verification status of each item using symbols: -| ![](assets/en/MSC/MSC_OK.png) | Überprüfung ausgeführt, keine Probleme | -| ------------------------------ | ----------------------------------------- | -| ![](assets/en/MSC/MSC_KO2.png) | Überprüfung ausgeführt, Probleme gefunden | -| ![](assets/en/MSC/MSC_KO3.png) | Überprüfung zum Teil ausgeführt | -| ![](assets/en/MSC/MSC_KO.png) | Überprüfung nicht ausgeführt | +| ![](assets/en/MSC/MSC_OK.png) | Verification carried out with no problem | +| ------------------------------ | ---------------------------------------------- | +| ![](assets/en/MSC/MSC_KO2.png) | Verification carried out, problems encountered | +| ![](assets/en/MSC/MSC_KO3.png) | Verification partially carried out | +| ![](assets/en/MSC/MSC_KO.png) | Verification not carried out | Click on **Verify** to begin the verification or on **Standard** to go back to the standard page. The **Open log file** button can be used to display the log file in the default browser of the machine (see [Open log file](#open-log-file) above). -> Die Standardseite berücksichtigt keine Änderungen, die auf der Detailseite gemacht wurden: Klicken Sie auf der Standardseite auf eine Schaltfläche zum Überprüfen, werden alle Einträge überprüft. Die auf der Detailseite definierten Einstellungen bleiben jedoch von einer Sitzung zur nächsten erhalten. +> The standard page will not take any modifications made on the detailed page into account: when you click on a verification button on the standard page, all the items are verified. On the other hand, the settings made on the detailed page are kept from one session to another. From 30094eed5b63c97a913adcd01f741f96d27a094c Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:56:44 +0100 Subject: [PATCH 225/311] New translations ordaClasses.md (German) --- website/translated_docs/de/ORDA/ordaClasses.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/website/translated_docs/de/ORDA/ordaClasses.md b/website/translated_docs/de/ORDA/ordaClasses.md index 9bb327b05114b0..63e321b9b974e4 100644 --- a/website/translated_docs/de/ORDA/ordaClasses.md +++ b/website/translated_docs/de/ORDA/ordaClasses.md @@ -80,7 +80,7 @@ A 4D database exposes its own DataStore class in the `cs` class store. You can create functions in the DataStore class that will be available through the `ds` object. -#### Beispiel +#### Example ```4d // cs.DataStore class @@ -110,7 +110,7 @@ Each table exposed with ORDA offers a DataClass class in the `cs` class store. -#### Beispiel +#### Example ```4D // cs.Company class @@ -184,7 +184,7 @@ Each table exposed with ORDA offers an EntitySelection class in the `cs` class s - **Example name**: cs.EmployeeSelection -#### Beispiel +#### Example ```4d // cs.EmployeeSelection class @@ -214,7 +214,7 @@ Each table exposed with ORDA offers an Entity class in the `cs` class store. - **Class name**: *DataClassName*Entity (where *DataClassName* is the table name) - **Example name**: cs.CityEntity -#### Beispiel +#### Example ```4d // cs.CityEntity class @@ -248,7 +248,7 @@ End if When creating or editing data model classes, you must pay attention to the following rules: -- Since they are used to define automatic DataClass class names in the **cs** [class store](Concepts/classes.md#class-stores), 4D tables must be named in order to avoid any conflict in the **cs** namespace. Das bedeutet im einzelnen: +- Since they are used to define automatic DataClass class names in the **cs** [class store](Concepts/classes.md#class-stores), 4D tables must be named in order to avoid any conflict in the **cs** namespace. In particular: - Do not give the same name to a 4D table and to a [user class name](Concepts/classes.md#class-names). If such a case occurs, the constructor of the user class becomes unusable (a warning is returned by the compiler). - Do not use a reserved name for a 4D table (e.g., "DataClass"). @@ -282,7 +282,7 @@ 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. -### Beispiel +### Example You want an exposed function to use a private function in a dataclass class: @@ -349,7 +349,7 @@ local Function getYoungest - **with** the `local` keyword, 4 requests are necessary: one to get the Schools entity students, one for the `query()`, one for the `orderBy()`, and one for the `slice()`. In this example, using the `local` keyword is inappropriate. -### Beispiele +### Examples #### Calculating age @@ -409,7 +409,7 @@ End if ## Support in 4D projects -### Datei Klasse +### Class files An ORDA data model user class is defined by adding, at the [same location as regular class files](Concepts/classes.md#class-files) (*i.e.* in the `/Sources/Classes` folder of the project folder), a .4dm file with the name of the class. For example, an entity class for the `Utilities` dataclass will be defined through a `UtilitiesEntity.4dm` file. From 1705930a4c2177f7942910e23ebe9c708862a2e7 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:56:46 +0100 Subject: [PATCH 226/311] New translations glossary.md (German) --- website/translated_docs/de/ORDA/glossary.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/website/translated_docs/de/ORDA/glossary.md b/website/translated_docs/de/ORDA/glossary.md index a52d5d8d8eec45..7bcc5626295f59 100644 --- a/website/translated_docs/de/ORDA/glossary.md +++ b/website/translated_docs/de/ORDA/glossary.md @@ -87,7 +87,7 @@ An entity can be seen as an instance of the dataclass, like a record of the tabl For more information, see Entities. -## Entity-Selection +## Entity selection An entity selection is an object. When querying the datastore, an entity selection is returned. An entity selection is a set of references to entities related to the same dataclass. @@ -125,16 +125,16 @@ $myClass.query("name = smith") ## Mixed data type -In this documentation, "Mixed" data type is used to designate the various type of values that can be stored within dataclass attributes. Das gilt für: +In this documentation, "Mixed" data type is used to designate the various type of values that can be stored within dataclass attributes. It includes: * number -* Text -* Null +* text +* null * boolean * date * object * collection -* Bild (\*) +* picture(\*) *(\*) picture type is not supported by statistical methods such as* `entitySelection.max( )`. From d02f6260c6c1eb5c6465f54bbd5b6269369a1707 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:56:47 +0100 Subject: [PATCH 227/311] New translations entities.md (German) --- website/translated_docs/de/ORDA/entities.md | 129 +++++++++++++------- 1 file changed, 84 insertions(+), 45 deletions(-) diff --git a/website/translated_docs/de/ORDA/entities.md b/website/translated_docs/de/ORDA/entities.md index 2124616fe23862..392c0c4065b6ef 100644 --- a/website/translated_docs/de/ORDA/entities.md +++ b/website/translated_docs/de/ORDA/entities.md @@ -65,7 +65,7 @@ This is illustrated by the following graphic: Note however that entities refer to the same record. In all cases, if you call the `entity.save( )` method, the record will be updated (except in case of conflict, see [Entity locking](#entity-locking)). -In fact, `$e1` and `$e2` are not the entity itself, but a reference to the entity. It means that you can pass them directly to any function or method, and it will act like a pointer, and faster than a 4D pointer. Beispiel: +In fact, `$e1` and `$e2` are not the entity itself, but a reference to the entity. It means that you can pass them directly to any function or method, and it will act like a pointer, and faster than a 4D pointer. For example: ```4d For each($entity;$selection) @@ -138,7 +138,7 @@ Let's look at the following (simplified) structure: In this example, an entity in the "Employee" dataclass contains an object of type Entity in the "employer" attribute (or a null value). An entity in the "Company" dataclass contains an object of type EntitySelection in the "staff" attribute (or a null value). > In ORDA, the Automatic or Manual property of relations has no effect. -To assign a value directly to the "employer" attribute, you must pass an existing entity from the "Company" dataclass. Beispiel: +To assign a value directly to the "employer" attribute, you must pass an existing entity from the "Company" dataclass. For example: ```4d $emp:=ds.Employee.new() // create an employee @@ -147,7 +147,7 @@ To assign a value directly to the "employer" attribute, you must pass an existin $emp.save() ``` -4D provides an additional facility for entering a relation attribute for an N entity related to a "1" entity: you pass the primary key of the "1" entity directly when assigning a value to the relation attribute. For this to work, you pass data of type Number or Text (the primary key value) to the relation attribute. 4D then automatically takes care of searching for the corresponding entity in the dataclass. Beispiel: +4D provides an additional facility for entering a relation attribute for an N entity related to a "1" entity: you pass the primary key of the "1" entity directly when assigning a value to the relation attribute. For this to work, you pass data of type Number or Text (the primary key value) to the relation attribute. 4D then automatically takes care of searching for the corresponding entity in the dataclass. For example: ```4d $emp:=ds.Employee.new() @@ -184,71 +184,109 @@ You can create an object of type [entity selection](dsMapping.md#entity-selectio You can simultaneously create and use as many different entity selections as you want for a dataclass. Keep in mind that an entity selection only contains references to entities. Different entity selections can contain references to the same entities. -### Shareable or non-shareable entity selections +### Shareable or alterable entity selections -An entity selection can be **shareable** (readable by multiple processes, but not modifiable after creation) or **non-shareable** (only usable by the current process, but modifiable afterwards): +An entity selection can be **shareable** (readable by multiple processes, but not alterable after creation) or **alterable** (supports the [`.add()`](API/entitySelectionClass.md#add) function, but only usable by the current process). -- a **shareable** entity selection has the following characteristics: - - it can be stored in a shared object or shared collection, and can be shared between several processes or workers; - - it can be stored in several shared objects or collections, or in a shared object or collection which already belongs to a group (it does not have a *locking identifier*); - - it does not allow the addition of new entities. Trying to add an entity to a shareable entity selection will trigger an error (1637 - This entity selection cannot be altered). To add an entity to a shareable entity selection, you must first transform it into a non-shareable entity selection using the [`.copy()`](API/entitySelectionClass.md#copy) function, before calling [`.add()`](API/entitySelectionClass.md#add). +#### Properties -- a **non-shareable** entity selection has the following characteristics: - + it cannot be shared between processes, nor be stored in a shared object or collection. Trying to store a non-shareable entity selection in a shared object or collection will trigger an error (-10721 - Not supported value type in a shared object or shared collection); - + it accepts the addition of new entities. +A **shareable** entity selection has the following characteristics: -In most cases, new entity selections are **shareable**, including: +- it can be stored in a shared object or shared collection, and can be passed as parameter between several processes or workers; +- it can be stored in several shared objects or collections, or in a shared object or collection which already belongs to a group (it does not have a *locking identifier*); +- it does not allow the addition of new entities. Trying to add an entity to a shareable entity selection will trigger an error (1637 - This entity selection cannot be altered). To add an entity to a shareable entity selection, you must first transform it into a non-shareable entity selection using the [`.copy()`](API/entitySelectionClass.md#copy) function, before calling [`.add()`](API/entitySelectionClass.md#add). -- entity selections resulting from various ORDA class functions ([`.query()`](API/entitySelectionClass.md#query), [`.query()`](API/dataclassClass.md#query), etc.), -- entity selections based upon relations (e.g. `company.employee`), -- entity selections resulting from projections of values (e.g. `ds.Employee.all().employer`), -- entity selections explicitely copied as shareable with [`.copy()`](API/entitySelectionClass.md#copy) or `OB Copy`. +> Most entity selection functions (such as [`.slice()`](API/entitySelectionClass.md#slice), [`.and()`](API/entitySelectionClass.md#and)...) support shareable entity selections since they do not need to alter the original entity selection (they return a new one). -New entity selections are **non-shareable** in the following cases: +An **alterable** entity selection has the following characteristics: -- blank entity selections created using the [`.newSelection()`](API/dataclassClass.md#newselection) function or `Create entity selection` command, -- entity selections explicitely copied as non-shareable with [`.copy()`](API/entitySelectionClass.md#copy) or `OB Copy`. +- it cannot be shared between processes, nor be stored in a shared object or collection. Trying to store a non-shareable entity selection in a shared object or collection will trigger an error (-10721 - Not supported value type in a shared object or shared collection); +- it accepts the addition of new entities, i.e. it is supports the [`.add()`](API/entitySelectionClass.md#add) function. -#### Beispiel + +#### How are they defined? + +The **shareable** or **alterable** nature of an entity selection is defined when the entity selection is created (it cannot be modified afterwards). You can know the nature of an entity selection using the [.isAlterable()](API/entitySelectionClass.md#isalterable) function or the `OB Is shared` command. + + +A new entity selection is **shareable** in the following cases: + +- the new entity selection results from an ORDA class function applied to a dataClass: [dataClass.all()](API/dataclassClass.md#all), [dataClass.fromCollection()](API/dataclassClass.md#fromcollection), [dataClass.query()](API/dataclassClass.md#query), +- the new entity selection is based upon a relation [entity.*attributeName*](API/entityClass.md#attributename) (e.g. "company.employees") when *attributeName* is a one-to-many related attribute but the entity does not belong to an entity selection. +- the new entity selection is explicitely copied as shareable with [entitySelection.copy()](API/entitySelectionClass.md#copy) or `OB Copy` (i.e. with the `ck shared` option). + +Example: +```4d +$myComp:=ds.Company.get(2) //$myComp does not belong to an entity selection +$employees:=$myComp.employees //$employees is shareable +``` + +A new entity selection is **alterable** in the following cases: + +- the new entity selection created blank using the [dataClass.newSelection()](API/dataclassClass.md#newselection) function or `Create entity selection` command, +- the new entity selection is explicitely copied as alterable with [entitySelection.copy()](API/entitySelectionClass.md#copy) or `OB Copy` (i.e. without the `ck shared` option). + +Example: +```4d +$toModify:=ds.Company.all().copy() //$toModify is alterable +``` + + +A new entity selection **inherits** from the original entity selection nature in the following cases: + +- the new entity selection results from one of the various ORDA class functions applied to an existing entity selection ([.query()](API/entitySelectionClass.md#query), [.slice()](API/entitySelectionClass.md#slice), etc.) . +- the new entity selection is based upon a relation: + - [entity.*attributeName*](API/entityClass.md#attributename) (e.g. "company.employees") when *attributeName* is a one-to-many related attribute and the entity belongs to an entity selection (same nature as [.getSelection()](API/entityClass.md#getselection) entity selection), + - [entitySelection.*attributeName*](API/entitySelectionClass.md#attributename) (e.g. "employees.employer") when *attributeName* is a related attribute (same nature as the entity selection), + - [.extract()](API/entitySelectionClass.md#extract) when the resulting collection contains entity selections (same nature as the entity selection). + +Examples: + +```4d +$highSal:=ds.Employee.query("salary >= :1"; 1000000) + //$highSal is shareable because of the query on dataClass +$comp:=$highSal.employer //$comp is shareable because $highSal is shareable + +$lowSal:=ds.Employee.query("salary <= :1"; 10000).copy() + //$lowSal is alterable because of the copy() +$comp2:=$lowSal.employer //$comp2 is alterable because $lowSal is alterable +``` + + +#### Sharing an entity selection between processes (example) You work with two entity selections that you want to pass to a worker process so that it can send mails to appropriate persons: ```4d - If(Storage.info=Null) - Use(Storage) - Storage.info:=New shared object() - End use - End if - Use(Storage.info) - //Put entity selections in a shared object - Storage.info.paid:=ds.Invoices.query("status=:1";"Paid") - Storage.info.unpaid:=ds.Invoices.query("status=:1";"Unpaid") - End use +var $paid; $unpaid : cs.InvoicesSelection +//We get entity selections for paid and unpaid invoices +$paid:=ds.Invoices.query("status=:1"; "Paid") +$unpaid:=ds.Invoices.query("status=:1"; "Unpaid") + +//We pass entity selection references as parameters to the worker +CALL WORKER("mailing"; "sendMails"; $paid; $unpaid) + +``` - CALL WORKER("mailing";"sendMails";Storage.info) -The sendMails method: +The `sendMails` method: - var $info: ;$1Object - var $paid;$unpaid : cs.InvoicesSelection +```4d + + #DECLARE ($paid : cs.InvoicesSelection; $unpaid : cs.InvoicesSelection) var $invoice : cs.InvoicesEntity - var $server;$transporter;$email;$status : Object + var $server; $transporter; $email; $status : Object //Prepare emails - $server:=New object + $server:=New object() $server.host:="exchange.company.com" $server.user:="myName@company.com" $server.password:="my!!password" $transporter:=SMTP New transporter($server) - $email:=New object + $email:=New object() $email.from:="myName@company.com" - //Get entity selections - $info:=$1 - $paid:=$info.paid - $unpaid:=$info.unpaid - //Loops on entity selections For each($invoice;$paid) $email.to:=$invoice.customer.address // email address of the customer @@ -266,7 +304,7 @@ The sendMails method: ### Entity selections and Storage attributes -All storage attributes (text, number, boolean, date) are available as properties of entity selections as well as entities. When used in conjunction with an entity selection, a scalar attribute returns a collection of scalar values. Beispiel: +All storage attributes (text, number, boolean, date) are available as properties of entity selections as well as entities. When used in conjunction with an entity selection, a scalar attribute returns a collection of scalar values. For example: ```4d $locals:=ds.Person.query("city = :1";"San Jose") //entity selection of people @@ -385,7 +423,8 @@ The following methods automatically associate the optimization context of the so * `entitySelection.drop()` -**Beispiel** + +**Example** Given the following code: From 9c8a38085bef87d45fed24be2723e0c3fab9b1aa Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:56:50 +0100 Subject: [PATCH 228/311] New translations properties.md (German) --- website/translated_docs/de/Menus/properties.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/de/Menus/properties.md b/website/translated_docs/de/Menus/properties.md index 902a48b6ebe133..f80aec70d202f0 100644 --- a/website/translated_docs/de/Menus/properties.md +++ b/website/translated_docs/de/Menus/properties.md @@ -23,7 +23,7 @@ You can set some properties of the menu commands by using control characters (me Control characters do not appear in the menu command labels. You should therefore avoid using them so as not to have any undesirable effects. The control characters are the following: -| Character | Beschreibung | Usage | +| Character | Description | Usage | | ----------- | --------------------------- | ------------------------------------------------------------- | | ( | open parenthese | Disable item | | Date: Wed, 16 Dec 2020 16:56:52 +0100 Subject: [PATCH 229/311] New translations overview.md (German) --- website/translated_docs/de/Menus/overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/Menus/overview.md b/website/translated_docs/de/Menus/overview.md index 71a5084a7944dc..2110e37862bed6 100644 --- a/website/translated_docs/de/Menus/overview.md +++ b/website/translated_docs/de/Menus/overview.md @@ -1,6 +1,6 @@ --- id: overview -title: Überblick +title: Overview --- You can create menu bars and menus for your 4D applications. Because pull-down menus are a standard feature of any desktop application, their addition will make your applications easier to use and will make them feel familiar to users. From 4b902653d5366a2e8b97dddba6d42d855b64ced7 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:56:57 +0100 Subject: [PATCH 230/311] New translations dsMapping.md (German) --- website/translated_docs/de/ORDA/dsMapping.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/website/translated_docs/de/ORDA/dsMapping.md b/website/translated_docs/de/ORDA/dsMapping.md index 3eb16497c0d6cf..5a0cec2eed0b92 100644 --- a/website/translated_docs/de/ORDA/dsMapping.md +++ b/website/translated_docs/de/ORDA/dsMapping.md @@ -104,7 +104,7 @@ For example, consider the following table in the 4D structure: ![](assets/en/ORDA/companyTable.png) -The `Company` table is automatically available as a dataclass in the `ds` datastore. Sie schreiben: +The `Company` table is automatically available as a dataclass in the `ds` datastore. You can write: ```4d var $compClass : cs.Company //declares a $compClass object variable of the Company class @@ -135,7 +135,7 @@ OB GET PROPERTY NAMES(ds.Employee;$prop) ### Attribute -Dataclass properties are attribute objects describing the underlying fields or relations. Beispiel: +Dataclass properties are attribute objects describing the underlying fields or relations. For example: ```4d $nameAttribute:=ds.Company.name //reference to class attribute @@ -196,11 +196,11 @@ The entity properties are however enumerable: ``` -### Entity-Selection +### Entity selection An entity selection is an object containing one or more reference(s) to entities belonging to the same dataclass. It is usually created as a result of a query or returned from a relation attribute. An entity selection can contain 0, 1 or X entities from the dataclass -- where X can represent the total number of entities contained in the dataclass. -Beispiel: +Example: ```4d var $e : cs.EmployeeSelection //declares a $e object variable of the EmployeeSelection class type From cdaa43235d2ec96c4509d11e5e62427266c022e1 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:57:09 +0100 Subject: [PATCH 231/311] New translations listboxBuilderIcon.png (Japanese) --- .../ja/FormEditor/listboxBuilderIcon.png | Bin 10339 -> 12884 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/ja/FormEditor/listboxBuilderIcon.png b/docs/assets/ja/FormEditor/listboxBuilderIcon.png index 4c11a5989f23eb8d20b69ef98098d335893a02af..40daf8fccf2aa0ab9873c4a1a33568983835cc05 100644 GIT binary patch literal 12884 zcmY*=1z3||_qQ0Jq;!MQ-3@|Bw{&+3(j5Z<=^ikoVRTNAP8E@E*yxa!X25_E-_-Yg z|JV0i7qGF1=RR@YzjMy-9Ae(8E8t*KU_N;807pqtR_nooM{TIrj!)51-+_~yE2tl6 zo>~fT9@LIf?V{d1wwG3ue(<0!3G2r43F`ebH$_9w2M=(+|M@~AW>Nm|-~sQhlB~3j zpV`3@h6R!BJjOBeOGVePXtXe9HT)q<>DVW-Ib^0RK6fv=Pwt?r4-DbuQC+j!)@M>Zmo>zifZsWj5D-na|yj z;w9bRi|xg)bA^8|!4F@y%ljTKwpM=S@z_uV#76(UtTvlhf>XcPj}3l&MtBCKLM(bF zNy^!o#c&ZU*4qvZen5LvY}Of|RbwQmt1kQZn#f2=dAWdh%PPEt_>eQ-B44VSRm^P( z-eb@Q$1yZp_a#oν4X92OXb{$~-0`&8TM)bj1=tQyRYxn0%kU{l$vOf{3vwc{j` z!^~Hali{C~h?W+2&fVF@s`!KC>aEP3`5|>LNb44b|J~KLZQmT5BO3nSt98s@AC^X= zKdlAu`EytL&S<`rIq1DaHOce8H>4obx+_a1{B=#q#eFykO)**tmLOf%%FEYQRYtG> zDRQX&doZM5#don7{ka|3iCZ6xT=HERaH730_}^0)Oo9tlTT)|cxy@n@<263*5d2$T z*X|Z;bF)d+3viov!0~Y`A%0 zlyd49hE3P{R-|!;)Moh(x&NSEWY1S4XATUBb#a3IP~l3?rUksIXJh=$c=2iHdOLlm ztM1Ic@dc5md9XUcC@a%IE^?3YuMQhN?2@+zhpp>O71~I;P6ja{*DKwv;Nu8^&P_eR zBhdOM#O$L}gO%FJmIcI*FWmz{qLCb{Gf zoP0jl?UXIaJh|7~ypekn-cZ5O+6;s9-Blo8VF~C09aWGtGH0TH9p;fbM#7m^sPT%e z9gha40xmKt(c(MnW%cmPZgO1a?BnGxN$0raP*cC@kRDM`8HnS~*vQu2_||}TP7sLU zsGsV4*DDLl@Vn)8Q1ocW$t)!>dHljYF^(HtnsCZBrkb)c*<8-|Z>jv27LfxJGY0;_ z(Cr_dl#3oz$>}MqndIca^a_m9bDqJI^3sIyq2WC%sn&}Kf9nuGfzoqtR*4QrFMG~~ zYLd&;`R<}K8bOtxRGjR9AsSt{9n|&{^WTRfuJ*$tPF3#@>-Sd81C+dUAUZ~Ql;`z} zK~ZK!l&kJRw{vBuw}X&#QG0zs7dkbUF1dV9yH|A4^Jv z)KO}QaR_4A!Dw1cW8MtNf)!E^(uWRm_b-p)lBBn7U|zuv@D$5LRU{&CeN1(9m)oNR z+q(Q_c77?#zp$)!lDHth^{M@A+~*s_2oZ#^BeJb#19ye?h%de()97fA8qrP3X29SuzcWHtdWsW5FFJ_OOoD|AKKtWQ8TU zBnx<;5fci7v*@2-=hX92OgI~%hQ^z@+!816+e2onGgjWHsAj)JYcwWNG-&Qaew1>9 ziy7(cF^mPD)HYPwv5qBn&|v(P6dS#$03FEu`a9{;F@wuD8U>#Hre^d{Nssu(@^qD) z)x+YhzU28cRL@((DTp`naF-bP`L%m$>{}x$O9*FDK;f3;>g(?Yq%JMT9VQbm>cXZgHk7vJ$ z{hXo5kOf9#3}fLQ0S+o518HZVBX3VejS0V$X(n#gaB)DO`h`bhgz}SB2iokyWGLb6 zGk2~xXB2!#W6ftChR7p!U)=s21>r|2E2kDKdob~9$1)S8oJnc)pU{UWr+?&_^V^~# zH#m{KXzK#JgqTPvRhD+L*Hr$Ni+lwc;%6O;nFws@-Ep4W6jSwYN)eX>b(!m<2hY6e z>XDRh2Dx7QL;Ko%_Z^uv;?3i5iq#=wo2@>AvU)f`Tz;p47FIkZ;>I8E%YrT)JTqGd z_%m*Uf)k4zA#Hq~H{y<&+x|^Xn|MQ7y5Ls0ZsyVvlc8{1X}q75Z)ViFzd7-){gN5g zGBX@W+8-Rh{Rgd6aO++6Tv52fx!09WEj4>)+}LtF$zFVsj`Qc>Kr87W z!=E@g7nrK9UMHyL7ZzxB-OO^YRq8Zgo4~uU zxkPMKi~~9gKCl_c%Wbl2p3t z@Q*pOj4BNbC)r!(eoYf#WBN3tRAQ#Mkx^b*tCumaj7tjo>Dw&5sjGQPCh5p=JMF*ojE(*XpM{}ytE)^MUy<)U$-ev73hgqT z2S8)`uN@p@g;Y@~8;R8XEJ%O+PYR+Sj3E)+GLaq%)9wyQx%Nu;cGPiol>4&r?bN>H z#|b@9Yb`z~sJc9d%T%3{AF?O@S?|%VKw#AH?L6TU#kX;_ed_~wf>GrLS72+_z1)T6f;_#=p$_1c=l+#R*PK^=!=A(|ftJBfz-=8O%(6R_o8hJ>~IV zU3-Y~;Ia$`;DHgZW!uvGyYa7e)(wjqd6y(7R{Z4$2op3d+tOr zNeFTaLgX#Uw4b;r}CcTK9bc(eth)I+O*uPwwQ`dPyQ#ZYVtbc zpbc}Y1xnQq%4fryN~B6S{>FNc$?Znjlcgurn{7Yy{P%>=#vs>8i%Z^-`>>%e^t*QN z0_GM@4|8%sr{hUI64c%HRW}}n)D@Mb83QoNbCj2>^j}5~x7mN+z$wTDY^qnj2KX!(KN_nbct7M$GzGefwMgti1uX_5 zwSI4^4-`;viL%O@3O=@25ZA%8nrfD<#=a`T#LWQ7;T3~l#m=qvlmMyOsDSCAX-O4( z*l!9H*s6Nn!YSf^-_8V1KMctW7kPK4KoYD0h?((gg%WT>UdZtSNI}^RLUu^l}BsW2zpo}spI#LTwE`y`{ z4Qs$5bb4vBC`AbWmwPp!E(<#wLcDTb$`SON_VgRQnr$0sbR5H~tqBO?-ZXZ^%3P zsi-NIn0?IIjw{$$uvq ztXkvLjQ8KuAHJ6OI)4r^{Q0k( zhbi}Vkt~&^np>HDd_1&qrpJO4-(HA5*1y7{AMn#AJz1)qXX3nmOc!df0x%H{rdCWNP{Mq3jhl zq3OSs+1_HRO>MrTJc}XQ4QQ2==K3Pr*2|f^QC;EDZbqllresp}&ar+k%8+lyz{0po z_orY5XQzJUn}JFFWwF|r={xtg7ZQJ}BhAmVUZP$RmGX#6xHaL1o}!0w470bOgKdqF z(r*yQz&wyG+sJ!LIVg>roU?P!>6r_ZL}^LD>9Eav?~D~Z`)kGO zPRBq}Sh#yM?3jF`4EFVi4SbWNmQj)XMvcSKLn^H{Ag12?%X`N~Gb7k!sZ%59B0+e- zjsc>+DFpIzV$9Y;ZcaZZ{419Z??lO)N|3}!V?}Gdoid8Tz@dhI4Esp zSwl;>5!li)KiPiw!vD?Bfn&7_KKQe-tUp!UaZtBZleFv|aiwHiouhm_ck%1%9hZeB zHAiT5#h9j-!SxQ9_AqQ?zpGKDt#=@7gCmm-cN3&K$D(2OoVilmbzNuf^qeptj7r=g z%zHCk|F`GWRF>%C&~Dg=P3peD=y)~KW z9AT+HvxVZybWio>Ix6a>s}715-&d6hHJdw+t&<#(NmZ{H%Lj^GX_389@``;8QixrG z&&f5sxDp~bcGIAQ%i3_Gvi4hb97-Y8C#9P5cP|HeUGH*4Jv+cE8C;H{WZNtU3(aG= z!+pPkBBB@LVrt`7quh2UOHO|fYLxdyGkW442Z_X(b_aJVw*;R5W=xX0Yq_?Z`)nC* zM3P`V-vwwt+nrJ{3%;`T=1{zGXGDxi-KWh|>8m(8R$^0$ybZp;^##Q7RO%}HhUC!4 z>2@#n^4Z%0DvGW*#nS8-*w$%s=nw4WyDp$NJ%>bf1Op8H=HO4T%_j*b0ViaK@90h= zS1PaI+f`UUE^%C!+8QxcQI*G{+slQKx2ednkUQ=Cp&IFMbVt!y#vfa_ zWlDL*Z?4_9O*fb8Nm@VQj7myM*IG$u zXI_n?C|0Rz*{NE)Gr$}0&f?82cKzL*u{xI#Lm7xWBi?y|K^rL^1CxZ)2|6j)QM#u6 za-LT-i6OY2PuV;Ye0+`EYM>c(H#;6+&M!w$Z41c7k)#6|RR;OTB{s;XfQEml`y{vy_o1F z6-Z;%mOt!7n6;uDFtcriVg5@IsE|m-O3bD+t^(h>Lmp-9PL);dV$k@#Kq@@$J0E0+ zl<)S@1gb6v>~RWGyD)3y=`_wo;nC_r?rYl*Co}wd>ekNb(fR_D^EDh2#+FFocx_X7 z9p7C18`QOWa{K2F#!R-@Q}`j)%L>Iw6ENPnXWMmT@z$rl9EB3TW-C%C%a@M*0AYPk98t20xnTQvEQ5qeCCKZ+RM4HPz7d09uYv-e{KI^XDId-AKd-uKAt z-CTXiqQ?;DZ^S|dihCO<%MY#$?ja;3)J@=aWXlcS8+mhutoi-Nq9 zV3sr%pv2sc84En>WJZybdLy85fw|!z?8uigk^LG{x5ZidD{ehF0q^dt5%a^lyRPJC zPU+An#k|UM0uNiSwE{z_vgcx8<{8~gYLnYH?6X$z3{8hr{MOj2ZJOSm@zTOSS+sSYmADWR9+%cB-s_MGTWx2z! zhH{iam~6-CW0vXJI!+m+`_AZ<&;G3DtLt#~rq5QrnCCkrmxbq~E)m5qW?vv;Hns@{ z0QAy>PT$dI70gm=ZoYFKkpndu%DKBP!4&2%xp^(WKb}$Et{>t`wa*9WnU2enl1z_U zE~0z6enSBoXm^apbn7lJboz%FuWNS3?X0vK7jW?sK9+Gx$gIqG(8(qo-0?%dvKX?4 zvuE9Y^LU^JKT_)MQYL>e6pHC^^;$MUMQ1*cgxg4Lg{eaYL6h1Xa;puVcrY5^^wPvq zcr}(g_&DVQ9*u;7a(b+0-}8}@4718#tKY%{l$Hzc4-S{wOZ-lLp&^XlgjnWaAI#Rt zaJ%EdlOTf8bR*_!E@rYGD`_ExOr(w3Yl^eUU%`90T?_7-q)UcEE{o-kn>@GQvAD~( zz8f%;3~;p#$5RTcA9f*KuJ*r-O-HQw!?!Bz2JS4VtK*zMb6$i3BC4wj9KL4|R&L@F)Zne?x1k^O($Z zPDHaF`oU;Bg~<9tjAD}2+~sX&aCrYS0-3VU#_C;bRRfT(Q5WJ!kmS~_)hfr05SS6qF}cn~ zz$~9QxNN))jWo|4+dTNHgrXc@aFXot0H&=$r1xj8rf*HN3N22ayvJ!1%))E+L(@es z_oi8|ZnK;`BFLM1F0KqW2h(RFo;Qfeu#1}LymodGaPpp5oMo+k8|f**u=7+^yhcU# zTZ|*v={V!~P-L|WS>SxR?wWa%dhsY3KleRiJ3oX3yC}(M@&0C8>bJ6gfm*<$P~`Rb z9!w(uaac2dLCH*97ltO`#s^<;?XJMj_-2IVnA?ZE*PQdC}_Pb#seYsdU{_;qD|#wR!%QJ#JyD zP=gJf>PIhC&{()P%{XGFe4zJ;=K3=j3Qq$SWSSN+I_yNnc-N^ltht^bkGl1{Cm@{{ zSrp6<`$9DVn(Of%H=}es349zqVg{rO1ysnVh$C)!eW9G&69vHFdi;gqhLwpdkEtq; zYd)=Rm7W@7!zEHWAC5}wOcTPWM`TGuy46DmF$KE&TCqwsFIMjF^i7XnTg)3|M4vJ- z#ngUdUAsL36LHR&LLi$o#)-K=cPZ+$?orvh;P+%B_~XL^Egn?rEpm9ZOzVzP>XG9J z*uWD~lL8Gn+$^G*T2td(>@}!#=xc4EmdjspGu8#ef<5ZeYl5Czs(sOd?bdvB(EY@L zr{;8q{O^~Wm)yzmUF3mr+Y0=$@#Bdk)DxbCUU|*hK8X$$W5)ZJCL}WlthwAj;`6%1p zp1g_-DQfAZe>gR9>q5`gVwJT+5&zM5d?{|Tqh64K9$tM@?_1I}ZR$fSMbCZf_ZByI za9oA1N8&3%)^)%W$&nW6Ds!<8K(}6^l88MXXePB>PDG@(vnGuH-As@T<$* z@9HAU?XPDUTgh_z)qH}w6n{5i-?g&Zzq66%R_%2;Y->xbaVkt1+0Iz{fr*=;cDF==zE&piVm%v<0bfn0)T#P zjaMZPr+kX|7Mv+@TQq84dfo?LX?G)D(eS!PLre^ny%CGJWob>=aEs+-(ssmjv;m)^ zSIuJb&M#Mr8W<1Lvxie6cyZG!4>c{fV`UK=ncW*j-l?{i9Z-+e9d%LW!jIEcTgwZ* zR3iR*r8oOQ8f_ilUpcvZQ-q%b!F+ujKUM*XQ&vuYV5NB%x zI$R+^M6PrfA2!Az_b=YvHt9h8 zD!M>O6Rob6#X!wVWCTSs-uDMOs47u+fCgRbHJs_@X(T+B_7EqkDzC-0=G)3M8G&ht zx%sPKcitkR+2X#nS@NfGU8+YN@Wi$dI{B3!NoeZHEMmh0V8MsB4ALozkvRsbLQY`2 z=-#>~Y_rx_Tl~*JOI`H0%a+3rzjph_`|XJhNv4=bdJ&RtwPLE*CUgffv^(GvzSFJL zNdX`)Y?(iougQT!Wht4@9U5(NF&3G9hd`XIF5Vky`&RiVxVyAc>-e4$y@nt=s-VOu zVzX)sm#Je?J7dLz-{2oKPm{%?%!dKLxRd?WIl|7+cDeB7J14n&AsV2Eeq_hm=`q*% z+IKuhcV4bR=KLT!+K`*NEP3)(3B1s_H@=JRQDPVj;Eot2@Lta9C~&#PPANh8u)46y zgiboItE2v`Jg|0}gK)X{`N#kd&yy@!%MUo_%@ngFrFZ-yti8l?IhQSHE`*_yrWxkJ zt;&ZJzGQ-}4p3;7KDS``kDDv_%*-8#)3_3WB`A^BEz3rZi9ut$L+2lqByk#j-F(-B zCsht&S)=J-c9jT!+xYIV$!Lq}(nU^6k3k2qU-_q(R+Z7%ZVSq}>sy&GMMeB<9lsYL_gRCj8K^E+6yfUoq-``UsUpeDhEN zI=MNP?oWpZPrBVj)>`=mWBd8<)ihUr6>vF^?tYYmm9@6Q!M#PenV=7iL>GYeSKWYC zNv41cKY(&2)+3mwZ^GdvR_+?V{F(Swy5?z@kwV~n0-(u_oA{FCQ)aInNGPq01jVgm zPoewz&);Njagi1UnSxocjo!Ok7+QiGBTvyMC3d+UgaVZq9{k zaeUrQ{`Ixfxr2x;#m*$|pZqFU8@z|I%Hr^?C%%aN_g2t}Yq4gLJR46E)X^dH!+G_# z)mDhOPD>`7kG{Vw0jzNd<@ckcaCzNue~&9 z{6~`|aYnG5efi&3Pc<#qa(A-0iOKN8ik0)EBTlu$oIVR_xOkZA!)72HRoWe-J zSm?z!oZ@_9{43IdIJCO1@ehwN8g1~TZa(W&>L_t15Ob#F!VDMZ#YvCwufNI{wenp< z!BEH5uc4KDN@foM0VzD|X1ipccVpRW-;ye%JXnPavh>s&FtnmGytr)sU@gs;Xjj(a zcHqjxRvnJYI*ZYZ_|k%QUa|^XeH^nJ{;+9)w?|4O4~|3JzC7?gKUy&t^i4w9gs=hq zD{tn#{IM&M@50v=384Aek`T}o<~30;`(?{6rFV+Gdv>l)5U$ zNt%Pq0YJHPON&xP4Jg zO=FBg2xsuec>D}he0%fGEZ#Zi`>+@-RyoeMn%;ilvv4^z2Z4fjT-OC)awdYdjvuJW zB%N+O0VNut_n&T#LhiK%3!kbMamw=@lNX>lw=ktqofe1gSOYStxiwTdgDZ-VWe zj^yurq~GoOY5E`Vma%#YtVL0qPjA`rtcB4op`2eqYrWXk_pHlnVwfUaevN_6KqQ8D zW&WYkA!@X0`mTTJEqs+|WBBm)l(^2qmkJtHml?Z{)McBO#_}O9i=AjoU~Gq1dJ`Hr zz9M7*&ympB$7K{o4DID>!d$B_=6avxqS%)ze>zOHoQov&+bWrwmrPPiJFlq3p$`66 z{?{gV0?y(6y1W!UJIGr)Q*M~Oi3^I1I=$Y5R2ez&_AxFhT`AA9g zLTuoNEhFP*7u~6yj4-BXGELDew@uit0%7$KW%tp&-edM7)##$ucZ1u5a% z1=5=0=u>7C`_%#`)&M?jUAo;W9Fj|l=aim?y#VPY&vpY5ApiaG=*VhB{IB{BX+v+REjKS)j%ZY4tVAfrg^6%U zVn8E?%i^pXMLZ6m$hH|$K9}0Ws_~uFxQW6E1vVXrw)id47E-S3B)KZXT=L+jx4ics zB7r;C*2^djqa1Qy@J@JRtb6igkw*nmBo&^XH%Ci4l0{IHE)LTlpg$56B_n$VxTBvK z>2U_1=MjHoV1Mosocm;rA4LMu0M0Z8S+v8^aZnR^BFxf+8?4%;v$ghSxGgy3j-Kw6 zayhVqd|^jL-b1AqMNLR?=vxBQ*Qc?vB-Yro=VS74JBIeYB&WG*^u04`KCMco&3N>$ z|Cl$|Le0{2I3e(P zZE7|i>!2DZMYL|`rJ}flau@xUDEITVdKcp&NjD~zQjJAays^{_K9(6IZ#@8nJO>E&YT!{ zyLv88X|=yB^Y&6MuWV zm>3K>Dbem@ILQR|xC>k|&owPj(`i!o-`eF7@6nyS{`M8=aJDy4v}5<54ne>(V!QH* z#wx#{Ji)eL;+yu}zn!d2de_c#Py?z=%BKgvMNPbLeW{pum72o1GMryM_IE;2lL4Dr zOec|Ay!7zi7}Y$OYjH2aM)hONl_S)O+5;T?vm~ugZw#S3*X!y3h8i{Bujbqwuk~nk z1^El+e)_}`c(Ff`L7-VspUuTT@K^rW&OgH#3OV_-uL5+GK^zr8b2>~Dp9HSIOZJjD zx+9KOxKY>uRgtaKhj6v~9{E&%qTsRkAStIKl0YS@l|P8`(H{f%Gwu_Zw)~1^x9N$* zX&T@nFl{FUfWLp;J<2cQ`m1E?B8tW-G5li3hR;NI|DVar%}4nmcdZSsD|rK4nh*Z_ zOF|S!49a^ISZRa!8u}=J72lBepTP$eP&5K}PZXa1tzWbALTSczy*yKCv0^MMQ|$!l zRlRTMnZ_0CW!;_cnGhe z>OUu)W}0SeEn22|cf&d`SXuLlz)u)nMZ= zjQMU}U%W|kfZ(KTs23Q$88A|(GI;~{UbNiuT{#TO|F14Grfps+c#@Z| z0cL&9fhHu0dj^Qzy_Q$Tmx1>kD_G{kNZbvB_n#7(VemPcvTf0N*wo6l#eW@x;fA;L z@#AB`=joy@ZM#g39jNXmpZ}?i;DMTkZ1UT9{9WYbOn^U2!^YNtfYKZ7^#*}mPWDFG zz7MwSC3O?3ZIJ$){U1!GlU3)?LE4NQ`)(r|n4V*$a1BjK{m~*4Adtn?SFCb}P|vI%8y804q8>g5p*f{m@g-=477LSKF&u=%+O%41IGZ3i@CsBMLiW{R%=Gawe_ z5lDBHzFp~lu@L|WE*Tn}xef@xX%r*L@2e0tl&3s=E&sInzkZZs)2(Dc2Bk?C4IH=F->FVis67ZaKP6MrXf@8h zmCx zV=PRLLh5)FN~ddY)MS35tE%Nk&jK5GUL)=QL3~P_Nzh5J2dW_1XCO@;|2~+`K4V>` zo~!dqMKf}%(I@6nadLciE+v>r4q=r|w7lk@9va?8a9-x~-( z1m&MI>Hi1DHVFPOzml8Iv!5-siWTv%P>t=Gg9udaRmNS|FJo>PANl^wnW_1Iw{L9? z>KXW49$R{Io2nv>GRi-%Tj=~%_KFOB{UzJ*K6;VWKZul-eS(?&FR0*ahJODSfTE)@ ziJ02{{(-Dc!GENt13!%Tw=MDUiCO-G_0i?8E&uO9|2Ho4pCj`BJ@R?VJw~vlFhD3F T*#q^TAPPhL&}ghh&lgoFf=k`#T5goNr2yf?as0{qnr zw-p6mkS*Uzh#=+lkgo#=X!@^ZUn3zE1Y=)*LI;lTn@g%$A|XBab^AnaHACniA<>^o ziN02{)!a(33sF)o-Oi>yPx`v{bxkOc>`AH1k%MX#_0L6tBm1N$JI7TIa!YLn?Q7Vn z72T-V$2H6!p<^0Uv)@Azc{z!=H^79FtILRw!cHxZ_U1 zKuPcI+0{aTPD073=7mmTmSt^+U)aw5r=AZ*?zQt4C*Qt4rNLz&J5OwQ^5=kZ%4$$n z=wiG#oIZfsH1{l22V$|hQ?Z)p@9!TQOWKYHoZ%S~Z?W7FVYXR!aaMyny$ijeImSU0 z=t(qsH+s|_PZ;|=coJJ^%OR$K4?H5+-~x7^X1-oc`1z|FJJXn~37kx!;=Zr7#s2#R z7>khecKVG83?F>>_0={4fnb0YdZjS<0}m#&8kmd93_a7WEkBdFxVRK=3L^gbtUF)m z%b+YbffuO8e7>VY+`9A+f?**F{`pLU1-TpUD!oS_SCudCj&N49q z_jF2DIx@b^!6&ztiYX{PHP}zKEKdG&v~GBL83C=6pDCDq9*Pa`=a0(na$YU^dUM?B zV0J3DB%;n4r98#NN_MWd+_QVWsJ%r2pKO+Xdw2HhY0R(L?+WZ-)9Y11X%fJ1#`xHpcXqK~j!m!PbL{5vQJn`@8|J`jg{y;tBv zVVK6YP5)z3Z+S_ml)h(l-ljBd9HyzT4KI){iU@muuC0sJ>DUIyG1WE zJ2_I1hY~eaG{|lj{woKC$hMg>@cmJGm+~AwG)K+ZV5JvHiRvckq=;;rH-uirAz1Rl@5<;ah+{YJ2IcAE`1b##)eUA2D5^5832T zgEOEg@)-`tv8z5Jt27&EbHbBYu&JZIuT_R8A$R$Pq*6l~gJem&=*Q=jtkFi%g5*Mf zb&oGZ-#`gvT2NPc4|SfNnK;&yG4n?hhoM=6b?UZ17sF5`H&7^fk2j~6ma2MZnb`)S z!l$^U!wL#7-p{DK9kBT+Ly~4B|Du*{|E1}66{iY+7F;S|wRO`}`pv77kStqhk}}^B z{JB&H8N0>%9^vk}NTWAkjf7nLj86kKgE6jZdIGm0$MxL$qBELn5?5BOyg|{$*&>Wb z1o~+xi~9~$1jSijgdfIRb>0FsE>l~mqD;(H^L+7FC5Lcepzb>6W!q!%augT$%4YtPZ678fMeJGgj7orU$Pl_`I;~67;trmM+LM_l z_LlANgjwbGxC<59^kQN@kQ^#uebvTo=dRPvvLU)*GS@fI3D%F`8Q`4;m zii+~S^akno!3YcY{c!FU0ZHTZT@dEKul*2`_qh+*jWMBkLpCP+M{)AP>$F^qm~c5I z6GYB}%B%*k>qI#dlvG1=gkKK|Xt_8dDGjQA=#3Cvyl2aFqZE5fbjqMtSJ}nEe&9Xx zcED89(NeNAY&Pii$4D=~ZxK_23HLwHR%}JvysRVtB~|$<4qUJl>D;;Hm=bo& z6|u>4^CR0loJXlaiSA;PTe#x6_KHBXOJy@ptYr>mm!})#PFuXoe+DkzKPhuL@7s#N zZ8oJvIIex|n4R6*Pi5)$${|ig_;p(^$y8{(xwAaq3}DXMx^v+_c#()o+CH@CzEr+w z_Bft)M3>T-OC3Lnnwqh$4UG}PY1ytgU9k)fpAsT;QzN94Q~3=2LT64u9TQzry_qXF zFwNV{N~=qERQJSrq=fU%h3XNJL26|OyN9$eJFIJy3?br@4Ot*g8bi^&c5916w&5g-ckm9Wp}*xI zfRQY3=`WF2QAKdC&!3*cTgAqnA)P*4ywo_`;hE-H)30qA8FpHmO%p!L{yXC4gR{|* zRhn-lBPC;$X+e_dxi!OtO%SZR{qdO6rfgRZpZ9mzF4>Q>xceY_YFV})x|rqsbY(s% z?bY+ptF?oTwMmLJiOMu5J43%o++{l> zm=gFf^~eYHja|S*kVX-XMT{UTM1+iX<>m ziQ0i8?8bE`BoGTju2JbM8Yf5GCHmAv6DfAAs&-4NH>*XNgS8ihOrQT`gp#TEGGMFr z^!I;c#BZ+E!3|_K*{!4Bn|}?Gi7Q!xa^G~;a9=+Ady+tLTJ#Lr`JSrvohtwlvF6s@ zd}y*pAGi6h9&v&Zd;{f<4cxIfKA=3d86T6qfBP6a=M`={!<`~Ce9MfBaaAXqG2dqZ zxf5xUcv^NZe8J(jGR>2dHxkps0D>K`&m#LgOz>t+VPKJx$)=S2G2^R)t@7FO(jW{# z!%14)om2eNRdGswR4D}{OSu<4A*OY}y;#eYoA%s8^f%1p)!C_y>FGvxzLIDx7k{5Z zXp}@D5-x1!i=WVdnEP@A)kI&TJGeN+HNw+_)A7e~B;RNKFu1`~+RDAejsP@@HAGt{ zwVJCB+fG#z<@&RR{f`gf2A^J&y|*O>4?VHRX>?s^?Y6_>`t;Tk4Z19bf@`I;v>eJ@ z|10W5V}BBPlZmiG@@oM+0s$}}Y0Lu+YGigpx!N9QU}$KFH%N+?E5+m1U7@}c5Ek|9$vZ~M!?{^6hK8_89V zii%3&wG@YQlYG|P9L`oEikDB#)Hqxmu2Y|&Qyi{m zBzf0FcE9$(7#$|>`3VNl-seS07_h~t`raEmiNM`97d?5-m5fawr8g5x+xb0KaNr9M0?D6-N z&-}s#k@GxkVW44X3CBt7?WFFX=?@D@}V-)$*9 zP+|X3=m;)ONl9@y*=`M{RGlw;3c&%V9RdAJ}+A zI3Y&luWz3Q57o@ zlT_%e{4$BhLIm!E)Ew>Z=Thg~wqlwE_n3o`#NX#O8KZ*QX{`@tK(mpFZe1WB$k>p- z>v<^v&&lCGuSY%lGBr=QPpoXMFjw~Gv$tPDAWoNKP8$-*yI!c^na<8kO;Au!TUWxX zFB8Rv?4+)<59T^_NhMZ${c~Pa{Tq6U2Sb53_fY{R{C3U1TAB_{WrVM3VB_Abq*C8p z4XZt;6mI}?p4KE=u5_)B=EES66*KKVdgk7_%#6g2{pl2JLT2Hly6dBSqsiB7PjQ~` z;m0g@MrCg`)=x+U#o#KUqEHB1h&}CBq-jGk&Kn;Lq6kBZwy69uOdsckw(hD9{Xs`N z{~Wy+Rlt0%zPKyKl`;Arw)LDn(nU=7v=SKx@*OOG4`%evHF&7zyaTFOf(Q_rE<+2x z48P6q=#I*JmMO2ejU#mhrbU9XdPwUuumlg*)L$=r`sLlswBUGkGz#&?Q6RfMy$y|Y z3(w%oo}@ViVY1jS0C)F$r;F#%yJJW7aF&pOv>{@>`9g3|n$l0u(Z!ETU?nhzt&&xM zfqst{F-1K39JY^L%3JRzO^1qsL+mP8E}sdXT)@^@DDj z^r5+3XZ_>bSjef+gL3~tLYPXD2_gGyO6ZXJkS&G52QB4rx@g-c<9#OE>Hat<&br4t zvut21pjMxUGx#@qV^o{t|3vh?Q@bB!cR26EmZxTU)D_dhR>yxn=aG&)?7zXQaJS@g ziO>coRk8>AJ@M;P6-5)ft!9|!%j`ka4^lpdYoZ0C;73pYFaG<%N(OH^NN2o7dL8Yw zYO<+>8^A-NLgTI+_i)z63bdDO|G@6)(d+of%CQgF-=tTC#)f<5wdUbl#E9&N6uxWwA(r?K#%cC zq&aYgbM;Ve^JZzS&46R-SYa{1rRgpjBS2%q+03x=maF5|#05EMj2Lp9})>JZ? zST_zjE2&w?$WdiD%nFq=ZB4Pp$5yF6G)Q{!tjUKWVsFJ^mDL_tYO0h=R+vuZA@32k#KU?7dKD*|)t=GG(S9#3=A6?w zW?Y}H;!cOvI+B0@kr3b=Hu`$D)``{}SJ%~%Al#a@h*U*c`6-9Oh>wGxDpLsAayi_Y){MFxm%GB|7Og671Ce&90WKJtfS|3(Wxl$}_=^ySHgo zX3^IJL7s+vMZjqn~97WOde~0}9r^W{Hj&mq+M|IW@aI zS1Cvf0T%5~VxuasT@d_7+0Qr8qf$g(j}lHD}nWHjZ>iK>#X8MMxG(OKqs zPw$svhFnBsxjOn-Bylw0I+|4BJ76nYrGc2xfS*OjOx@5m#L z8VqBEb)6zh<L#x^d_Xb)5D722E1c? zy^rIj7v{b&&Y0C}cP1qON?|7d7{g>|}>M1jy{QUf=j5jc+BjpIJrdwwnoyNT-m_HX)Ms;U1 zTh{^zZaElb>pR!zp}Hx*4^5`RoAmwfgnE>QWPwaUsgW|43f$X0?l8^Vjk>&5H=D^E zUdt6KlHae9jZ#XJO$W!9!1xCA=L2upDuPm1n{Fk{m3iO~`pBMciSWas9Aj740)nYr2bC^KrumF)FfX7r#q*!xCX)vMweSxoE-WA zmzhA817f^!NW%7rhN|46oK_RQ42j>nl(T!PR&D!|&lOOLbNZyKB@+`9ATsbrN5CpGEr6(e3~(O6E43b0a^Hx`S4my!2bvjTRGD zWAs#M&_GQ_;_2{ObrqGZMlWj6n;idzxlxk#QJ9Os7(p_f78zevLN&_}6%iPpS*;Ka zeV2UuAbPb4(7zRzzG2R0h>5S%QUX5~U+jRC9}Km6p!}2GE6nHJFN7w4EqYW>>^AwRNmV;Rt-Up{!H%*1tyn#7T;8WWY)n^7=lk|<9weByh=eQ$v830FwekQJ4} z17pe_crq$K%7ZF#Q7v%|qhYiGx{eC;YWAt=6+N%;o=gmYgM7Y}>cK8h{ZhXV8e^gH#zn<(1 zNeai^{a$Yt<=)G`tU3#{?IH)rce^v*?8X^o1Qy_g^kT8NO988 zo#SY&KXq7~3BU+4`70Y72SGsos^q>8BIkW;Vx^%mjY;YF!eXHbkeHv2aD^^kbh#Lr zJa*hCI4m%KqwKkfrwqDRTWyDex+IP(6@onSp(ull#0YB$C0SuGr6u38<+=Tx^wW9R z;-|$aO}1gLj(~id?E8p|#ZQlM*|D@qEq(3)8MYzcdL>IRcLIz=PIu>3e(f!`UOXXc z_;>3IlPu&C`7>wFxn_|YfSQwt`JL;VxFxTa7I7Kwe?-22r?+!uS_A%eT_8p(+~6Cj z{L?hh)k$+nurgR?%EtL9)Yt`qAR0W_Z{bjh$>4{t0k;8)?d>x-X}N*2ii*wF1c5%` z$vPcBK+N}@jbo88WAetmDw>j}3mtflE(9XtkeyFPyNn0dBmXx@nk-;odr5bk5J5U; zJ1U55(0k^GfN1)pcQ(A{Soy|*!a&F+Jz?!|eNdT+1V_vOQlnvjH`$k!#k7RV&#)U$ zy!+f^d4K;AE!9oH+W`lNYR-%43>D;SHtF&NF5?j(3(->7>j3qQD%^Iy47L1oOv@w8 zMWjjuq`ee0YLoIot&<|uO}*X^NI4nCJWzW58tT|j70G?X>ll*af*J0Q_TMm?J&S<~T@_bX ze_#j7P#>-jHTKrKomzh--rl`{o#J{_(^@>GnG9@c5WPR?-yIh-gOq`zu?!(FwNu~n zUOKMtBGP0=M#I1egiV318#-Y#Lu%bQ=#BAkxG4E!lkX$O+3Grz@xqrqC-Yv&t6T>G zX%nSzbq$T&mJ}obWgyl^(+64p#(LLsH_9FPx!()DCN#?NQwTs$kxu;w($KiH%80M*;H71q4Gp@xCg?8)zbb1t2AyDHZm~_o%a! zB#!tIe>ECHr_^j#&}vPdpEQBbnu&$Qi&l*PV?9#l-alF4K?-|fJKz&#K_a%Ij{*g( z)jQa1)qQDih%8co`u(Brc%KfvI9Y70_uz#->!y&lTHUQH-h=T;3%A2h6IJW@j6oF< zc_4y9M>B-0r94n6%s&|}#l9p6sDoLsC``J2zg4;BwRk`)gmS-_f}&XYzxN%70<+a= z9FSrs(AyYjAHz4MxPd|EYd46bE7tDap zudqRPnezW^XFRhLLio+Hwv%9#(do^Q5666?hc4hd0rg;!eyHF>FIV3NNdRJZiH{`I-3Qd!hD%=-Eu4h%1p3>PEq1{{4c?Qqi69pK5mEMcbUJ_zcp<*`u@& z(F+IC`_5JPjw=?y8!|wLXZiUum(%&7LMYK+L^pdcjOYM$$N7!S02n`74*$aAIlBLy z?#6)|3?!IgfH_%owIS4>jy8sQumhjGvgwWmX3JbeY?@75`^%jc+tC6JrGj66h)(u> zee%k5wpK%z8om1#!DTra|75F)&dDRwhjA|xG0(3~W|Llg5_wMuy6wOG{4$C?J|$ZM z4juP|ut4oyh0p(C=xhm)91+aZ)8+P53`iM@>ujTG-9N!6ng?J!a3u$QaDcJeA zj)S_TzPjxcDt!PKe>V1DoN^&yA&)Hsp#z;5pig3ZJg#qHWH4C@52g?h52mQmZhgQ- z{uLGT!5q1&ib~}E^hXlv3>K)8m;u>_PnK^UhNy#GDhTAkFJ0cvUJtkB$2|m^m-EFK z56Fof+!@Gkdmu_Id6+3RadsA-c50l&bs8JvMXN1AWW(a*Iw2AtgEsi11)VA#IVn~z zYaC9T_uJ`tRy#xJ|0xtXBlfH;t}o93$#vrM>! zZM=%=Z%iJalppwkKersjiT-a3I%$^mDXu;vg`7v=ka{W~?#9N3{mC|Hb37U1Q&?CC zg#J~WS#9W3=v|SuMVgF6hV{aJq3J#`?6MtM$X~sw?YmuuT!Ie$E9>o)1cumeN^-Fz|K1Fy`1|pPxlF~3DJazbE(Q#7v6>U7dVB{427nB0NY8Xf^@Fbd z{$1WGlw4jHY^h$TaE5k_%5TryF!`AF_azDE<~uJ~&u;rc6CQe*z*-wz{qZ7j{@hu? zV!W?6E7+*tJ8T7WS}L?2^$CHU9S!#G?y^(VpEXbyMcJej`T-SnG=`E=H5mWSJIHbc zQev^(R`mb3dG2NaN6=36P2DZ)Zg7D0XrfQg`_{L*5TSfQBdimc`0e=MtwBAbUcMVD zCWVmml(fI(*Owp!qRnKjG&SA)M)z*0(EXU$^}!Q91Sm{(u1Zjr5Po;TSe6$^b2AP* z%9AuM_*Ec{$}I#VKRMg&6ynDj3aa@^7s*tqK|hL|u&$IKz>P~cDmCRMcc=Pe5xW9C z2}$$CAYfP=G9`Q>1&l86+02uUj*cGRoVE&G_Xj&$U7lKu)BMOx2GIf&3xA?PZ}&LU z%Ju{F0XI(_pK~c`@4J}?qb4&Mmh;sntSSMK6huXX^XC^U1s0R?<|or%)aAm#;X1%} z+)htS_~8r&!&wpQqJ|JDaG&>Mz}TjiUT=3nr}K}+$xn}I7mAZ<$o>pgwD3Mc8h|N) z!cT`2Qx~#IXOT@bypil2OdlZzV~yj6PomM!-2C*}AFA8DD-zSrQuQgc#5ojl;Pa~XrXb?TeI4B z513mR{YuWt!iqRp>BcThzBhdEE#0ZV;8h5{{Bqh6?o|8fU_!z9eY}vtUgu}2@|KSk ztwJ3lJyZ|I79PlziCShfG4hzu2}#0yx)3moIwzKaL#q27|%RcG>}_DTg+izqpT`TJx2}0mJC4wnY>FXI~#QnAD^nzL&< z8zDRTuvI?f>!ZnDv;uLagzAvdjka-FuD_e?R>TQka{{*c__rF`$*hYDFjYCUOiG?5 z%aWDikMY$&-ms2{3FMvNd8w*xGf3P%7Vde`;94}#^<2#IiH}r=e}@pAd8FhLii#C3 z?d&7Wd;uxefE|BTU6h2EanWMij8u$%L1Q8_*{?!NGyd68?Fsp_k#nGrN1d0Q4T(<# z$@1WHWNNFre%8>XgLB;8NXkrm>FypGGFeX0N=%Fb>!xq$IcpSH4B*8jcAW%Jeg_)g zH_q@eXfR{FOpEG~=Ct1*z&xg~?FNL~v(w>xXD{2c{pIqAWHPhrJz%U8$MCC+~Us5ZP+#jHO3NVPn3P%W@(M~c@z0>fHYZMU#<$>G~haa=lDh^EArE1 zoEYuLzzl{3>f6owp k;s4JstvcRZ-C(}`R3SLsgiHwhFc3*fOinaU Date: Wed, 16 Dec 2020 16:58:18 +0100 Subject: [PATCH 232/311] New translations dt_string.md (Japanese) --- .../translated_docs/ja/Concepts/dt_string.md | 203 +++++++++--------- 1 file changed, 101 insertions(+), 102 deletions(-) diff --git a/website/translated_docs/ja/Concepts/dt_string.md b/website/translated_docs/ja/Concepts/dt_string.md index c9a6bc3b5aa36c..3c9e5d4f18fe96 100644 --- a/website/translated_docs/ja/Concepts/dt_string.md +++ b/website/translated_docs/ja/Concepts/dt_string.md @@ -3,95 +3,94 @@ id: string title: String --- -文字列とは、以下を示す総称です: +String is a generic term that stands for: -- テキストフィールドまたは変数: テキストフィールド、変数、または式には 0~2 GB のテキストを格納することができます。 -- 文字フィールド: 文字フィールドには 0~255 文字までの文字を格納することができます (上限はフィールドが定義されたときに設定されます)。 +- Text fields or variables: a Text field, variable, or expression may contain from 0 to 2 GB of text. +- Alphanumeric fields: an Alphanumeric field may contain from 0 to 255 characters (limit set when field is defined). -## 文字列リテラル +## String literals -文字列リテラル定数は、次のように二重引用符 ("...") で囲んで表します。 文字列定数の例を次に示します: +A string literal is enclosed in double, straight quotation marks ("..."). Here are some examples of string literals: ```4d -"レコード追加" -"レコードが見つかりません" -"送り状" -``` - -空の文字列は、2つの引用符の間に何も入れない状態 ("") で表します。 - -### エスケープシーケンス -以下のエスケープシーケンスを文字列内で使用できます: - -| エスケープシーケンス | 意味する文字 | -| ---------- | ------------- | -| \n | LF (行送り) | -| \t | HT (タブ) | -| \r | CR (改行) | -| \\\ | \ (バックスラッシュ) | -| \\" | " (引用符) | - -**注:** \ (バックスラッシュ) は Windows でパス名の区切り文字として使用されています。 通常 4D はメソッドエディターに入力されたバックスラッシュを自動で "\\\" に置き換えることで、これを正しく解釈します。例えば "C:\Folder" と入力すると "C:\\\Folder" に変換されます。しかし “C:\MyDocuments\New” と入力した場合、4Dは二番目のバックスラッシュは "\N" (行送り) と解釈してしまい、“C:\\\MyDocuments\New”を表示します。このようなケースでは開発者がバックスラッシュを2つ入力するようにしなければなりません。
    さらに正規表現のパターン定義でもバックスラッシュがエスケープシーケンスとして使用されます。正規表現パターン "\\\" を4Dのメソッドエディターに記述する場合は "\\\\\" となる点に注意してください。 - -## 文字列演算子 - -| 演算子 | シンタックス | 戻り値 | 式 | 結果 | -| -------- | ----------- | ------ | ----------------------- | -------- | -| 連結 (結合) | 文字列 + 文字列 | String | "abc" + "def" | "abcdef" | -| 繰り返し | 文字列 * 数値 | String | "ab" * 3 | "ababab" | -| 等しい | 文字列 = 文字列 | ブール | "abc" = "abc" | True | -| | | | "abc" = "abd" | False | -| 異なる | 文字列 # 文字列 | ブール | "abc" # "abd" | True | -| | | | "abc" # "abc" | False | -| 大きい | 文字列 > 文字列 | ブール | "abd" > "abc" | True | -| | | | "abc" > "abc" | False | -| 小さい | 文字列 < 文字列 | ブール | "abc" < "abd" | True | -| | | | "abc" < "abc" | False | -| 以上 | 文字列 >= 文字列 | ブール | "abd" >= "abc" | True | -| | | | "abc" >= "abd" | False | -| 以下 | 文字列 <= 文字列 | ブール | "abc" <= "abd" | True | -| | | | "abd" <= "abc" | False | -| キーワードを含む | 文字列 % 文字列 | ブール | "Alpha Bravo" % "Bravo" | True | -| | | | "Alpha Bravo" % "ravo" | False | -| | ピクチャー % 文字列 | ブール | Picture_expr % "Mer" | True (*) | - -(*) キーワード "Mer" がピクチャー式 (フィールドまたは変数) に格納されたピクチャーの IPTC/Keywords メタデータに含まれている場合。 - -## 文字列比較の詳細 - -- 文字列は文字ごとに比較されます (後述の [キーワード](dt_string.md#キーワード) による検索の場合を除きます)。 -- 文字列が比較されるとき文字の大小文字は無視されます。したがって、"a"="A"は `true` を返します。 大文字と小文字を区別して比較するには、文字コードで比較してください。 例えば次の式は `FALSE` です: +"Add Records" +"No records found." +"Invoice" +``` + +An empty string is specified by two quotation marks with nothing between them (""). + +### Escape sequences +The following escape sequences can be used within strings: + +| Escape sequence | Character replaced | +| --------------- | -------------------- | +| \n | LF (Line feed) | +| \t | HT (Tab) | +| \r | CR (Carriage return) | +| \\\ | \ (Backslash) | +| \\" | " (Quotation marks) | + +**Note:** The \ (backslash) character is used as a separator in pathnames under Windows. You must therefore use a double backslash \\\ in paths when you want to have a backslash in front of a character used in one of the escape sequences recognized by 4D (e.g. "C:\\\MyDocuments\\\New.txt"). + +## String operators + +| Operation | Syntax | Returns | Expression | Value | +| ------------------------ | ---------------- | ------- | ----------------------- | -------- | +| Concatenation | String + String | String | "abc" + "def" | "abcdef" | +| Repetition | String * Number | String | "ab" * 3 | "ababab" | +| Equality | String = String | Boolean | "abc" = "abc" | True | +| | | | "abc" = "abd" | False | +| Inequality | String # String | Boolean | "abc" # "abd" | True | +| | | | "abc" # "abc" | False | +| Greater than | String > String | Boolean | "abd" > "abc" | True | +| | | | "abc" > "abc" | False | +| Less than | String < String | Boolean | "abc" < "abd" | True | +| | | | "abc" < "abc" | False | +| Greater than or equal to | String >= String | Boolean | "abd" >= "abc" | True | +| | | | "abc" >= "abd" | False | +| Less than or equal to | String <= String | Boolean | "abc" <= "abd" | True | +| | | | "abd" <= "abc" | False | +| Contains keyword | String % String | Boolean | "Alpha Bravo" % "Bravo" | True | +| | | | "Alpha Bravo" % "ravo" | False | +| | Picture % String | Boolean | Picture_expr % "Mer" | True (*) | + +(*) If the keyword "Mer" is associated with the picture stored in the picture expression (field or variable). + +## String comparisons + +- Strings are compared on a character-by-character basis (except in the case of searching by [keywords](dt_string.md#keywords), see below). +- When strings are compared, the case of the characters is ignored; thus, "a"="A" returns `TRUE`. To test if the case of two characters is different, compare their character codes. For example, the following expression returns `FALSE`: ```4d -Character code("A")=Character code("a") -// Character code("A") は 65 -// Character code("a") は 97 +Character code("A")=Character code("a") // because 65 is not equal to 97 ``` -- 文字列が比較される場合、アクセント等の発音区別符号は無視されます。 たとえば、日本語においては以下の式は `true` を返します: +- When strings are compared, diacritical characters are taken into account. For example, the following expressions return `TRUE`: ```4d - "あ"="ア" - "ア"="ア" - "1"="1" + "n"="ñ" + "n"="Ñ" + "A"="å" + // and so on ``` -**注:** 文字列比較にあたっては、**4D のデータファイルに定義された** 言語の特性が考慮されます。これは、システムの使用言語とは異なる場合がありえます。 +**Note:** String comparison takes into account specificities of the language **defined for the 4D data file** (which is not always the same as the language defined for the system). -### ワイルドカード記号 (@) +### Wilcard character (@) -4D ランゲージでは **@** をワイルドカード記号として使用します。 ワイルドカードは、すべての文字列の比較に使用することができ、ワイルドカードによって置き換わる文字の数は指定されません。 たとえば、次の式は `true` になります: +The 4D language supports **@** as a wildcard character. This character can be used in any string comparison to match any number of characters. For example, the following expression is `TRUE`: ```4d "abcdefghij"="abc@" ``` -ただし、複数の文字を比較する目的のワイルドカード記号は、比較演算子の右側の式で使用しなければなりません。 比較演算子の左側の式においては、"@" は単なる文字であると解釈されます。たとえば、次の式は `FALSE` です: +The wildcard character must be used within the second operand (the string on the right side) in order to match any number of characters. The following expression is `FALSE`, because the @ is considered only as a one character in the first operand: ```4d "abc@"="abcdefghij" ``` -ワイルドカードは “0文字以上” を意味します。 以下の式はすべて `true` です: +The wildcard means "one or more characters or nothing". The following expressions are `TRUE`: ```4d "abcdefghij"="abcdefghij@" @@ -101,51 +100,51 @@ Character code("A")=Character code("a") "abcdefghij"="@abcde@fghij@" ``` -一方、どのような場合でも、ワイルドカードを 2つ連続して使用した文字列比較は常に `FALSE` を返します。 次の式は `FALSE` になります: +On the other hand, whatever the case, a string comparison with two consecutive wildcards will always return `FALSE`. The following expression is `FALSE`: ```4d "abcdefghij"="abc@@fg" ``` -比較演算子が < あるいは > 記号である、あるいはこれらを含む場合、演算子の右側の式の終りに置かれた1つのワイルドカードのみサポートされています: +When the comparison operator is or contains a < or > symbol, only comparison with a single wildcard located at the end of the operand is supported: ```4d - "abcd"<="abc@" // 有効な比較です - "abcd"<="abc@ef" // 有効な比較ではありません + "abcd"<="abc@" // Valid comparison + "abcd"<="abc@ef" //Not a valid comparison ``` -文字列の比較または検索において、@ をワイルドカードではなく一般の文字として扱いたい場合、`Character code (At sign)` 指示を使用します。 たとえば、文字列が @ 文字で終わっているかどうかを知りたいとします。 以下の式は ($vsValue が空でなければ) 常に `true` です: +If you want to execute comparisons or queries using @ as a character (and not as a wildcard), you need to use the `Character code(At sign)` instruction. Imagine, for example, that you want to know if a string ends with the @ character. The following expression (if $vsValue is not empty) is always `TRUE`: ```4d ($vsValue[[Length($vsValue)]]="@") ``` -以下のようにすると、式は意図したように評価されます: +The following expression will be evaluated correctly: ```4d -(Character code($vsValue[[Length($vsValue)]])=64) +(Character code($vsValue[[Length($vsValue)]])#64) ``` -**注:** ストラクチャー設定のデータベースページには、文字列に @ 記号が含まれているとき、それをどう解釈するかを指定するオプションが提供されています。 +**Note:** A 4D option in the Design environment allows you to define how the @ character is interpreted when it is included in a character string. -### キーワード +### Keywords -他の文字列比較と異なり、"%" 記号を使ったキーワードによる検索はテキスト中の単語を検索します: 単語は一つのまとまりとして個々に扱われます。 複数の単語や、音節など単語の一部を検索するような場合、**%** 演算子は常に `false` を返します。 区切り文字 (スペースや句読点など) に囲まれた文字列が単語として認識されます。 “Today's” のようにアポストロフィを含む単語は、通常それを含めた 1つの単語として扱われますが、特定の場合には無視されます (以下の注記を参照ください)。 数字も検索できます。小数点は区切り文字ではなく、数字の一部として扱われます。 ただし、通貨や温度などを表す記号は無視されます。 +Unlike other string comparisons, searching by keywords looks for "words" in "texts": words are considered both individually and as a whole. The **%** operator always returns `False` if the query concerns several words or only part of a word (for example, a syllable). The “words” are character strings surrounded by “separators,” which are spaces and punctuation characters and dashes. An apostrophe, like in “Today's”, is usually considered as part of the word, but will be ignored in certain cases (see the rules below). Numbers can be searched for because they are evaluated as a whole (including decimal symbols). Other symbols (currency, temperature, and so on) will be ignored. ```4d - "Alpha Bravo Charlie"%"Bravo" // true - "Alpha Bravo Charlie"%"vo" // false - "Alpha Bravo Charlie"%"Alpha Bravo" // false - "Alpha,Bravo,Charlie"%"Alpha" // true - "Software and Computers"%"comput@" // true + "Alpha Bravo Charlie"%"Bravo" // Returns True + "Alpha Bravo Charlie"%"vo" // Returns False + "Alpha Bravo Charlie"%"Alpha Bravo" // Returns False + "Alpha,Bravo,Charlie"%"Alpha" // Returns True + "Software and Computers"%"comput@" // Returns True ``` -> **注:**
    - 4Dは、<>=# 演算子を使った文字列比較や、キーワードの検出にICUライブラリを使用しています。 実装されているルールの詳細に関しては、以下のアドレスを参照して下さい: [http://www.unicode.org/unicode/reports/tr29/#Word_Boundaries](http://www.unicode.org/unicode/reports/tr29/#Word_Boundaries)
    - 日本語版の 4Dでは、ICU の代わりにデフォルトで Mecab が使用されています。詳細な情報に関しては、 [Mecab のサポート(日本語版)](https://doc.4d.com/4Dv18/4D/18/DatabaseData-storage-page.300-4575463.ja.html#1334024) を参照してください。 +> **Notes:** - 4D uses the ICU library for comparing strings (using <>=# operators) and detecting keywords. For more information about the rules implemented, please refer to the following address: http://www.unicode.org/unicode/reports/tr29/#Word_Boundaries. - In the Japanese version, instead of ICU, 4D uses Mecab by default for detecting keywords. -## 文字参照記号 -文字参照記号: [[...]] +## Character Reference Symbols +The character reference symbols: [[...]] -文字参照記号は、文字列から一文字のみを参照するのに使用します。 この構文は、テキストおよび文字列型の変数やフィールドの任意の位置の文字を指し示します。 +These symbols are used to refer to a single character within a string. This syntax allows you to individually address the characters of a text variable, string variable, or field. -文字参照記号が代入演算子 (:=) の左側にある場合、文字列の指定した位置に一文字を代入します。 以下の例は、vsName が空の文字列ではない場合に、vsName の最初の文字を大文字にします。 +If the character reference symbols appear on the left side of the assignment operator (:=), a character is assigned to the referenced position in the string. For example, if vsName is not an empty string, the following line sets the first character of vsName to uppercase: ```4d If(vsName#"") @@ -153,17 +152,17 @@ If(vsName#"") End if ``` -それ以外の場合には、式内で使用される文字列参照記号は、参照する文字を1文字の独立した文字列として返します。 たとえば: +Otherwise, if the character reference symbols appear within an expression, they return the character (to which they refer) as a 1-character string. For example: ```4d -// 以下の例は vtText の最後の文字が "@" であるかをテストします。 +//The following example tests if the last character of vtText is an At sign "@" If(vtText#"") If(Character code(Substring(vtText;Length(vtText);1))=At sign) //... End if End if - // 文字参照記号を使用し、よりシンプルに記述できます: + //Using the character reference syntax, you would write in a simpler manner: If(vtText#"") If(Character code(vtText[[Length(vtText)]])=At sign) // ... @@ -171,33 +170,33 @@ End if End if ``` -### 無効な文字列参照に関する注意 +### Advanced note about invalid character reference -文字列参照記号を使用する際、配列に存在する要素を指定するのと同じ要領で、文字列内に存在する文字を指定しなければなりません。 たとえば、文字列変数の20番目の文字を参照する場合、この変数は必ず、少なくとも20文字以上の長さがなくてはなりません。長さが足りない場合: +When you use the character reference symbols, you must address existing characters in the string in the same way you address existing elements of an array. For example if you address the 20th character of a string variable, this variable MUST contain at least 20 characters. -- インタープリターモードでは構文エラーは発生しません。 -- コンパイルモードで範囲チェックオプションを無効にしている場合には、メモリ領域を破壊するおそれがあります。 -- コンパイルモードで範囲チェックオプションを有効にしている場合には、エラーが発生します。 たとえば、次のように文字列やテキストの終点を超えた位置に文字を書き込むコードを実行すると: +- Failing to do so, in interpreted mode, does not cause a syntax error. +- Failing to do so, in compiled mode (with no options), may lead to memory corruption, if, for instance, you write a character beyond the end of a string or a text. +- Failing to do so, in compiled mode, causes an error with the option Range Checking On. For example, executing the following code: ``` -// 真似をしないでください +//Very bad and nasty thing to do, boo! vsAnyText:="" vsAnyText[[1]]:="A" ``` -ランタイムにおいてエラーがトリガーされます: +will trigger the Runtime Error shown here: ![alt-text](assets/en/Concepts/Syntax_Error.en.png) -### 例題 +### Example -以下のプロジェクトメソッドは、文字列内の各単語の先頭文字を大文字に変換し、結果の文字列を返します。 +The following project method capitalizes the first character of each word of the text received as parameter and returns the resulting capitalized text: ```4d - // Capitalize_text プロジェクトメソッド - // Capitalize_text ( Text ) -> Text - // Capitalize_text ( Source text ) -> Capitalized Text + //Capitalize_text project method + //Capitalize_text ( Text ) -> Text + //Capitalize_text ( Source text ) -> Capitalized text $0:=$1 $vlLen:=Length($0) @@ -211,12 +210,12 @@ End if End if ``` -使用例: +For example, the line: ```4d ALERT(Capitalize_text("hello, my name is jane doe and i'm running for president!")) ``` -以下のように表示されます: +displays the alert shown here: ![alt-text](assets/en/Concepts/Jane_doe.en.png) From a5c8836e94a408f4436b0eab699da43e6d8abae0 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:58:20 +0100 Subject: [PATCH 233/311] New translations dt_time.md (Japanese) --- .../translated_docs/ja/Concepts/dt_time.md | 116 +++++++++--------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/website/translated_docs/ja/Concepts/dt_time.md b/website/translated_docs/ja/Concepts/dt_time.md index 211043b44f5b84..2652487fc8a9ba 100644 --- a/website/translated_docs/ja/Concepts/dt_time.md +++ b/website/translated_docs/ja/Concepts/dt_time.md @@ -1,89 +1,89 @@ --- id: time -title: 時間 +title: Time --- -時間のフィールド・変数・式の範囲は 00:00:00 から 596,000:00:00 までです。 +A Time field, variable or expression can be in the range of 00:00:00 to 596,000:00:00. -時間は 24時間制です。 +Times are in 24-hour format. -時間の値は数値として扱うことができます。 時間から返される数値は、その時間が表す総秒数です。 +A time value can be treated as a number. The number returned from a time is the number of seconds since midnight (00:00:00) that time represents. -**注:** *4Dランゲージリファレンス* マニュアルでは、コマンド説明における時間引数は特に明記されていない限り、「時間」と表記されています。 +**Note:** In the *4D Language Reference* manual, Time parameters in command descriptions are denoted as Time, except when marked otherwise. -## 時間リテラル +## Time literals -時間リテラル定数は、疑問符 (? ... ?) で囲んで表します。 +A time literal constant is enclosed by question marks (?...?). -時間は、“時:分:秒” の順で表し、それぞれをコロン (:) で区切ります。 時間は24時間制で指定します。 +A time literal constant is ordered hour:minute:second, with a colon (:) setting off each part. Times are specified in 24-hour format. -時間定数の例を次に示します: +Here are some examples of time literals: ```4d -?00:00:00? // 午前0時 -?09:30:00? // 午前9時30分 -?13:01:59? // 午後1時1分59秒 +?00:00:00? ` midnight +?09:30:00? ` 9:30 am +?13:01:59? ` 1 pm, 1 minute, and 59 seconds ``` -空の時間は、?00.00.00? のように指定します。 - -**Tip:** メソッドエディターでは空の時間を入力するためのショートカットが提供されています。 空の時間を入力するには、疑問符 (?) の入力後に Enter キーを押します。 - -## 時間演算子 - -| 演算子 | シンタックス | 戻り値 | 式 | 結果 | -| --------- | -------- | --- | ----------------------- | ---------- | -| 加算 (足し算) | 時間 + 時間 | 時間 | ?02:03:04? + ?01:02:03? | ?03:05:07? | -| 減算 (引き算) | 時間 - 時間 | 時間 | ?02:03:04? – ?01:02:03? | ?01:01:01? | -| 加算 (足し算) | 時間 + 数値 | 数値 | ?02:03:04? + 65 | 7449 | -| 減算 (引き算) | 時間 - 数値 | 数値 | ?02:03:04? – 65 | 7319 | -| 乗算 (かけ算) | 時間 * 数値 | 数値 | ?02:03:04? * 2 | 14768 | -| 除算 (割り算) | 時間 / 数値 | 数値 | ?02:03:04? / 2 | 3692 | -| 倍長整数を返す除算 | 時間 \ 数値 | 数値 | ?02:03:04? \ 2 | 3692 | -| モジューロ | 時間 % 時間 | 時間 | ?20:10:00? % ?04:20:00? | ?02:50:00? | -| モジューロ | 時間 % 数値 | 数値 | ?02:03:04? % 2 | 0 | -| 等しい | 時間 = 時間 | ブール | ?01:02:03? = ?01:02:03? | True | -| | | | ?01:02:03? = ?01:02:04? | False | -| 異なる | 時間 # 時間 | ブール | ?01:02:03? # ?01:02:04? | True | -| | | | ?01:02:03? # ?01:02:03? | False | -| 大きい | 時間 > 時間 | ブール | ?01:02:04? > ?01:02:03? | True | -| | | | ?01:02:03? > ?01:02:03? | False | -| 小さい | 時間 < 時間 | ブール | ?01:02:03? < ?01:02:04? | True | -| | | | ?01:02:03? < ?01:02:03? | False | -| 以上 | 時間 >= 時間 | ブール | ?01:02:03? >=?01:02:03? | True | -| | | | ?01:02:03? >=?01:02:04? | False | -| 以下 | 時間 <= 時間 | ブール | ?01:02:03? <=?01:02:03? | True | -| | | | ?01:02:04? <=?01:02:03? | False | - -### 例題 1 - -時間式を数値と組み合わせた式から時間式を取得するには、`Time` コマンドと `Time string` コマンドを使用します。 - -`Time` または `Current time` コマンドを使用する際に、時間型と数値型の式を組み合わせることができます: +A null time is specified by ?00:00:00? + +**Tip:** The Method Editor includes a shortcut for entering a null time. To type a null time, enter the question mark (?) character and press Enter. + +## Time operators + +| Operation | Syntax | Returns | Expression | Value | +| ------------------------ | -------------- | ------- | ----------------------- | ---------- | +| Addition | Time + Time | Time | ?02:03:04? + ?01:02:03? | ?03:05:07? | +| Subtraction | Time – Time | Time | ?02:03:04? – ?01:02:03? | ?01:01:01? | +| Addition | Time + Number | Number | ?02:03:04? + 65 | 7449 | +| Subtraction | Time – Number | Number | ?02:03:04? – 65 | 7319 | +| Multiplication | Time * Number | Number | ?02:03:04? * 2 | 14768 | +| Division | Time / Number | Number | ?02:03:04? / 2 | 3692 | +| Longint division | Time \ Number | Number | ?02:03:04? \ 2 | 3692 | +| Modulo | Time % Time | Time | ?20:10:00? % ?04:20:00? | ?02:50:00? | +| Modulo | Time % Number | Number | ?02:03:04? % 2 | 0 | +| Equality | Time = Time | Boolean | ?01:02:03? = ?01:02:03? | True | +| | | | ?01:02:03? = ?01:02:04? | False | +| Inequality | Time # Time | Boolean | ?01:02:03? # ?01:02:04? | True | +| | | | ?01:02:03? # ?01:02:03? | False | +| Greater than | Time > Time | Boolean | ?01:02:04? > ?01:02:03? | True | +| | | | ?01:02:03? > ?01:02:03? | False | +| Less than | Time < Time | Boolean | ?01:02:03? < ?01:02:04? | True | +| | | | ?01:02:03? < ?01:02:03? | False | +| Greater than or equal to | Time >= Time | Boolean | ?01:02:03? >=?01:02:03? | True | +| | | | ?01:02:03? >=?01:02:04? | False | +| Less than or equal to | Time <= Time | Boolean | ?01:02:03? <=?01:02:03? | True | +| | | | ?01:02:04? <=?01:02:03? | False | + +### Example 1 + +To obtain a time expression from an expression that combines a time expression with a number, use the commands `Time` and `Time string`. + +You can combine expressions of the time and number types using the `Time` or `Current time` functions: ```4d - // 以下の行は $vlSeconds に、深夜0時から現在の - // 1時間後までに経過した秒数を代入します。 + //The following line assigns to $vlSeconds the number of seconds + //that will be elapsed between midnight and one hour from now $vlSeconds:=Current time+3600 - // 以下の行は $vHSoon に 1時間後の時刻を代入します。 + //The following line assigns to $vHSoon the time it will be in one hour $vhSoon:=Time(Current time+3600) ``` -2番目の行はより簡単に記述することができます: +The second line could be written in a simpler way: ```4d - // 以下の行は $vHSoon に1時間後の時刻を代入します。 + // The following line assigns to $vHSoon the time it will be in one hour $vhSoon:=Current time+?01:00:00? ``` -### 例題 2 +### Example 2 -モジューロ演算子を使用できます。とくに24時間フォーマットを考慮した時間の追加に便利です: +The Modulo operator can be used, more specifically, to add times that take the 24-hour format into account: ```4d -$t1:=?23:00:00? // これは午後11:00です - // 2時間30分を追加します -$t2:=$t1 +?02:30:00? // 単純な追加を行うと $t2 は ?25:30:00? になります。 -$t2:=($t1 +?02:30:00?)%?24:00:00? // $t2 は ?01:30:00? と なります。 (翌朝) +$t1:=?23:00:00? // It is 23:00 p.m. + // We want to add 2 and a half hours +$t2:=$t1 +?02:30:00? // With a simple addition, $t2 is ?25:30:00? +$t2:=($t1 +?02:30:00?)%?24:00:00? // $t2 is ?01:30:00? and it is 1:30 a.m. the next morning ``` From 2f7e96b1e210484d513779b4bb27358bb596b2ec Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:58:23 +0100 Subject: [PATCH 234/311] New translations dt_variant.md (Japanese) --- .../translated_docs/ja/Concepts/dt_variant.md | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/website/translated_docs/ja/Concepts/dt_variant.md b/website/translated_docs/ja/Concepts/dt_variant.md index ba54da7420ad5a..4f26667396cb4e 100644 --- a/website/translated_docs/ja/Concepts/dt_variant.md +++ b/website/translated_docs/ja/Concepts/dt_variant.md @@ -1,29 +1,29 @@ --- id: variant -title: バリアント +title: Variant --- -バリアント型は、サポートしている型の任意のデータを受け取ることができる変数型です。 一般的には、返したり受け取ったりする値の型が未定である汎用的なコードを書くためにこの変数型が使用されます。 これは、たとえばオブジェクトの属性を扱うようなコードがそれに該当します。 +Variant is a variable type which allows encapsulating data of any valid regular type in a variable. Typically, this variable type can be used to write generic code returning or receiving values for which the type is not known. This is the case for example for code handling object attributes. -バリアント型の変数は以下のデータタイプの値を格納することができます: +A variant type variable can contain a value of the following data types: - BLOB - boolean - collection - date -- 倍長整数 +- longint - object -- ピクチャー +- picture - pointer -- 実数 +- real - text - time - null -- 未定義 +- undefined -> バリアント型変数に配列を格納することはできません。 +> Arrays cannot be stored in variant variables. -インタープリターモード、コンパイルモードのどちらにおいても、一つのバリアント型変数に異なる型のコンテンツを代入することができます。 固定されている型の変数とは異なり、バリアント型変数の中身は変数自身の型 (つまり、バリアント型) と同一ではありません。 たとえば: +In both interpreted and in compiled modes, a same variant variable can be assigned contents of different types. Unlike regular variable types, the variant variable content type is different from the variant variable type itself. For example: ```4d C_VARIANT($variant) @@ -37,18 +37,18 @@ $vtype:=Type($variant) // 12 (Is variant) $vtypeVal:=Value type($variant) // 1 (Is real) ``` -変数が期待されるところであれば、どこでもバリアント型変数を使用することができます。ただし、変数の中身のデータ型は予期される型でなくてはなりません。 また、バリアント型変数を使う場合、その時点で変数に格納されている値のみが実質的に使われます。 たとえば: +You can use variant variables wherever variables are expected, you only need to make sure than the variable content data type is of the expected type. When accessing variant variables, only their current value is taken into account. For example: ```4d C_VARIANT($v) $v:="hello world" -$v2:=$v // バリアント型変数を、型未指定の変数に代入します +$v2:=$v //assign variable to another variable -$t:=Type($v) // 12 (Is variant) 代入元の変数はバリアント型ですが -$t2:=Type($v2) // 2 (Is text) 代入先の変数はテキスト型です +$t:=Type($v) // 12 (Is variant) +$t2:=Type($v2) // 2 (Is text) ``` -バリアント型は、様々なタイプになりうるメソッドの引数 ($0, $1,...) を宣言するのに使用できます。 この場合、引数の値の型の確認作業が必要になります: +Variant can be used to declare method parameters ($0, $1,...) that can be of various types. In this case, you can build your code by testing the parameter value type, for example: ```4d C_VARIANT($1) @@ -60,4 +60,4 @@ Case of End case ``` -> バリアント型変数が必要ではない場合 (つまりデータタイプが分かっている場合)、型が固定された変数を使用することが推奨されます。 固定型変数の方がパフォーマンスやコードの可読性も良く、予期せぬデータタイプを見過ごしてしまうようなバグを防げるため、コンパイラーにも優しいといえます。 \ No newline at end of file +> When variant variables are not necessary (i.e. when the data type is known), it is recommended to use regular typed variables. Regular typed variables provide better performance, make code more clear and are helpful for the compiler to prevent bugs related to passing unexpected data types. \ No newline at end of file From d675c09f935da3fe6228fb28c4f34923fc0e917d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:58:25 +0100 Subject: [PATCH 235/311] New translations error-handling.md (Japanese) --- .../ja/Concepts/error-handling.md | 86 +++++++++---------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/website/translated_docs/ja/Concepts/error-handling.md b/website/translated_docs/ja/Concepts/error-handling.md index e30142850e19a2..f2dd669ff2d8ef 100644 --- a/website/translated_docs/ja/Concepts/error-handling.md +++ b/website/translated_docs/ja/Concepts/error-handling.md @@ -1,102 +1,102 @@ --- id: error-handling -title: エラー処理 +title: Error handling --- -エラー処理とは、アプリケーション内で発生する可能性のあるエラーに備え、対処することです。 ランタイムにおけるエラーのキャッチや報告、またそれらの条件を検証するため、4Dは包括的なサポートを提供しています。 +Error handling is the process of anticipating and responding to errors that might occur in your application. 4D provides a comprehensive support for catching and reporting errors at runtime, as well as for investigating their conditions. -エラー処理は次の2つの要望に応えます: +Error handling meets two main needs: -- 開発フェーズにおいて、問題となりうるコードのエラーやバグを発見して修正したい。 -- 運用フェーズにおいて、予期しないエラーを検知して回復したい。とくに、システムエラーダイアログ (ディスクが一杯、ファイルがない、など) を独自のインターフェースに置換できます。 -> 4D Server 上で実行されるコードのため、4D Server にはエラー処理メソッドを実装しておくことが強く推奨されます。 このメソッドによって、サーバーマシンにおいて予期せぬダイアログが表示されることを防ぎ、エラーの調査に必要なログを専用ファイルにとることができます。 +- finding out and fixing potential errors and bugs in your code during the development phase, +- catching and recovering from unexpected errors in deployed applications; in particular, you can replace system error dialogs (disk full, missing file, etc.) with you own interface. +> It is highly recommended to install an error-handling method on 4D Server, for all code running on the server. This method would avoid unexpected dialog boxes to be displayed on the server machine, and could log errors in a dedicated file for further analyses. -## エラー/ステータス +## Error or status -`entity.save()` や `transporter.send()` など、おおくの 4D クラス関数は *status* オブジェクトを返します。 ランタイムにおいて "想定される"、プログラムの実行を停止させないエラー (無効なパスワード、ロックされたエンティティなど) がこのオブジェクトに格納されます。 これらのエラーへの対応は、通常のコードによっておこなうことができます。 +Many 4D class functions, such as `entity.save()` or `transporter.send()`, return a *status* object. This object is used to store "predictable" errors in the runtime context, e.g. invalid password, locked entity, etc., that do not stop program execution. This category of errors can be handled by regular code. -ディスク書き込みエラーやネットワークの問題などのイレギュラーな中断は "想定されない" エラーです。 これらのエラーは例外を発生させ、エラー処理メソッドを介して対応する必要があります。 +Other "unpredictable" errors include disk write error, network failure, or in general any unexpected interruption. This category of errors generates exceptions and needs to be handled through an error-handling method. -## エラー処理メソッドの実装 +## Installing an error-handling method -4D においては、エラー専用のプロジェクトメソッドである **エラー処理** (または **エラーキャッチ**) メソッド内ですべてのエラーをキャッチし、処理することができます。 +In 4D, all errors can be catched and handled in a specific project method, the **error-handling** (or **error-catching**) method. -このプロジェクトメソッドはカレントプロセスに対して実装 (インストール) され、インタープリターモードかコンパイルモードかにかかわらず、プロセス内で発生するすべてのエラーの際に自動で呼び出されます。 このプロジェクトメソッドを *実装* するには、`ON ERR CALL` コマンドをコールし、コマンドに当該プロジェクトメソッド名を引数として渡します。 たとえば: +This project method is installed for the current process and will be automatically called for any error that occurs in the process, in interpreted or compiled mode. To *install* this project method, you just need to call the `ON ERR CALL` command with the project method name as parameter. For example: ```4d -ON ERR CALL("IO_ERRORS") // エラー処理メソッドを実装します +ON ERR CALL("IO_ERRORS") //Installs the error-handling method ``` -エラーの検知を中止するには、空の文字列を指定して再度 `ON ERR CALL` コマンドをコールします: +To stop catching errors and give back hand to 4D, call `ON ERR CALL` with an empty string: ```4d -ON ERR CALL("") // エラーの検知を中止します +ON ERR CALL("") //gives back control to 4D ``` -`Method called on error` コマンドは、`ON ERR CALL` によってカレントプロセスにインストールされているエラー処理メソッド名を返します。 このコマンドは汎用的なコードでとくに有用です。エラー処理メソッドを一時的に変更し、後で復元することができます: +The `Method called on error` command allows to know the name of the method installed by `ON ERR CALL` for the current process. It is particularly useful in the context of generic code because it enables you to temporarily change and then restore the error-catching method: ```4d $methCurrent:=Method called on error ON ERR CALL("NewMethod") - // ドキュメントを開くことができなければエラーが生成されます + //If the document cannot be opened, an error is generated $ref:=Open document("MyDocument") - // 前のエラー処理メソッドに戻します + //Reinstallation of previous method ON ERR CALL($methCurrent) ``` -### スコープとコンポーネント +### Scope and components -アプリケーションにおいて一つのエラーキャッチメソッドを使うやり方もあれば、アプリケーションのモジュールごとに違うメソッドを定義する方法もあります。 ただし、一つのプロセスにつき実装できるのは一つのメソッドのみです。 +You can define a single error-catching method for the whole application or different methods per application module. However, only one method can be installed per process. -`ON ERR CALL` コマンドによって実装されたエラー処理メソッドは実行中のアプリケーションにしか適用されません。 つまり、**コンポーネント** によってエラーが生成されても、ホストアプリケーションにおいて `ON ERR CALL` で実装されたエラー処理メソッドは反応しませんし、逆もまた然りです。 +An error-handling method installed by the `ON ERR CALL` command only applies to the running application. In the case of an error generated by a **component**, the `ON ERR CALL` error-handling method of the host application is not called, and vice versa. -### メソッド内でのエラー処理 +### Handling errors within the method -独自に作成してエラー処理メソッド内では、エラーを調査するための情報がいくつか提供されています: +Within the custom error method, you have access to several information that will help you identifying the error: -- 専用のシステム変数 (*): +- dedicated system variables(*): - - `Error` (倍長整数): エラーコード - - `Error method` (テキスト): エラーを生成したメソッドの名称 - - `Error line` (倍長整数): エラーを生成したメソッドの行番号 - - `Error formula` (テキスト): エラーの元となった 4D コードのフォーミュラ (テキスト) + - `Error` (longint): error code + - `Error method` (text): name of the method that triggered the error + - `Error line` (longint): line number in the method that triggered the error + - `Error formula` (text): formula of the 4D code (raw text) which is at the origin of the error. -(*) 4D は、いくつかの **システム変数** と呼ばれる専用の変数を自動的に管理しています。 詳細については [4D ランゲージマニュアル](https://doc.4d.com/4Dv18/4D/18/System-Variables.300-4505547.ja.html) を参照ください。 +(*) 4D automatically maintains a number of variables called **system variables**, meeting different needs. See the *4D Language Reference manual*. -- `GET LAST ERROR STACK` コマンドは、4Dアプリケーションの現在のエラースタックに関する情報を返します。 -- `Get call chain` コマンドは、カレントプロセス内における、メソッド呼び出しチェーンの各ステップを詳細に説明するオブジェクトのコレクションを返します。 +- the `GET LAST ERROR STACK` command that returns information about the current stack of errors of the 4D application. +- the `Get call chain` command that returns a collection of objects describing each step of the method call chain within the current process. -#### 例題 +#### Example -簡単なエラー処理システムの例です: +Here is a simple error-handling system: ```4d -// エラー処理メソッドをインストールします +//installing the error handling method ON ERR CALL("errorMethod") - //... コードの実行 - ON ERR CALL("") // エラーの検知を中止します + //... executing code + ON ERR CALL("") //giving control back to 4D ``` ```4d -// errorMethod プロジェクトメソッド - If(Error#1006) // これはユーザーによる割り込みではありません - ALERT("エラー "+String(Error)+" が発生しました。 問題となったコードはこちらです: \""+Error formula+"\"") +// errorMethod project method + If(Error#1006) //this is not a user interruption + ALERT("The error "+String(Error)+" occurred". The code in question is: \""+Error formula+"\"") End if ``` -### 空のエラー処理メソッド +### Using an empty error-handling method -標準のエラーダイアログを表示させないようにするには、空のエラー処理メソッドを実装するだけで実現できます。 `Error` システム変数はエラー処理メソッド以外のメソッドでも確認することができます: +If you mainly want the standard error dialog box to be hidden, you can install an empty error-handling method. The `Error` system variable can be tested in any method, i.e. outside of the error-handling method: ```4d -ON ERR CALL("emptyMethod") // emptyMethod は空のエラー処理メソッドです +ON ERR CALL("emptyMethod") //emptyMethod exists but is empty $doc:=Open document( "myFile.txt") If (Error=-43) - ALERT("ファイルが見つかりません。") + ALERT("File not found.") End if ON ERR CALL("") ``` From da4f7edbf03ed51da8d7bf9abe7622cf5a0cf16c Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:58:26 +0100 Subject: [PATCH 236/311] New translations flow-control.md (Japanese) --- .../translated_docs/ja/Concepts/flow-control.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/website/translated_docs/ja/Concepts/flow-control.md b/website/translated_docs/ja/Concepts/flow-control.md index 608d810afd7f15..d91514dc381e4d 100644 --- a/website/translated_docs/ja/Concepts/flow-control.md +++ b/website/translated_docs/ja/Concepts/flow-control.md @@ -1,16 +1,16 @@ --- id: control-flow -title: 制御フロー +title: Control flow overview --- -メソッドが単純か複雑かに関係なく、開発者は3つのプログラミング構造のうち、1つ以上を常に使用します。 プログラミング構造は、メソッド内でステートメントが実行される順序を決定する実行フローをコントロールします。 3つのタイプの構造があります: +Regardless of the simplicity or complexity of a method, you will always use one or more of three types of programming structures. Programming structures control the flow of execution, whether and in what order statements are executed within a method. There are three types of structures: -- **シーケンシャル**: シーケンシャル構造は単純な線形構造です。 シーケンスとは、4Dが最初から最後まで次々に実行する一連のステートメントです。 オブジェクトメソッドで頻繁に使用される1行から成るルーチンはもっとも簡単なシーケンシャル構造の例です。 例: `[People]lastName:=Uppercase([People]lastName)` -- **[分岐](Concepts/cf_branching.md)**: 分岐構造は、条件をテストし、その結果に基づいて異なる流れにメソッドを導きます。 条件は true または false に評価されるブール式です。 `If...Else...End if` 構文は分岐構造の一例で、処理フローを二つに分岐します。 `Case of...Else...End case` 構文も分岐構造の一つで、処理フローをもっとたくさん分岐することができます。 -- **[ループ](Concepts/cf_looping.md)**: メソッドの作成にあたって、何度も同じ処理を繰り返すことがあります。 これに実現するために、4Dは以下のループ構造を備えています: +- **Sequential**: a sequential structure is a simple, linear structure. A sequence is a series of statements that 4D executes one after the other, from first to last. A one-line routine, frequently used for object methods, is the simplest case of a sequential structure. For example: `[People]lastName:=Uppercase([People]lastName)` +- **[Branching](Concepts/cf_branching.md)**: A branching structure allows methods to test a condition and take alternative paths, depending on the result. The condition is a Boolean expression, an expression that evaluates TRUE or FALSE. One branching structure is the `If...Else...End if` structure, which directs program flow along one of two paths. The other branching structure is the `Case of...Else...End case` structure, which directs program flow to one of many paths. +- **[Looping](Concepts/cf_looping.md)**: When writing methods, it is very common to find that you need a sequence of statements to repeat a number of times. To deal with this need, the 4D language provides the following looping structures: - `While...End while` - `Repeat...Until` - `For...End for` - - `For each...End for each`
    ルー プを制御する方法には、条件が満たされるまでループする方法と、指定した回数だけループする方法の2通りがあります。 各ループ構造はいずれの方法にも用いることができますが、`While` ループと `Repeat` ループは条件が満たされるまで繰り返す場合に、`For` ループは指定した回数だけループする場合の利用に適切です。 `For each...End for each` ループは両方を組み合わせることが可能で、オブジェクトやコレクション内でループするために設計されています。 + - `For each...End for each`
    The loops are controlled in two ways: either they loop until a condition is met, or they loop a specified number of times. Each looping structure can be used in either way, but `While` loops and `Repeat` loops are more appropriate for repeating until a condition is met, and `For` loops are more appropriate for looping a specified number of times. `For each...End for each` allows mixing both ways and is designed to loop within objects and collections. -**注:** 4Dはプログラム構造 (If/While/For/Caes of/Repeat/For each) を512レベルまで入れ子で記述できます。 +**Note:** 4D allows you to embed programming structures up to a "depth" of 512 levels. From 07a6437a9e184437de4d7030fde9f8c42656ea5f Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:58:29 +0100 Subject: [PATCH 237/311] New translations quick-tour.md (Japanese) --- .../translated_docs/ja/Concepts/quick-tour.md | 308 +++++++++--------- 1 file changed, 154 insertions(+), 154 deletions(-) diff --git a/website/translated_docs/ja/Concepts/quick-tour.md b/website/translated_docs/ja/Concepts/quick-tour.md index a34b94c661264c..93058fb83a68c5 100644 --- a/website/translated_docs/ja/Concepts/quick-tour.md +++ b/website/translated_docs/ja/Concepts/quick-tour.md @@ -1,72 +1,72 @@ --- id: quick-tour -title: 概要 -sidebar_label: 概要 +title: A Quick Tour +sidebar_label: A Quick Tour --- -4D ランゲージを使用して "Hello, world!" メッセージを表示するには複数の方法があります。 一番簡単な方法はおそらく、プロジェクトメソッドにコードを1行、次のように書くやり方です: +Using the 4D language, printing the traditional "Hello, world!" message on screen can be done in several ways. The most simple is probably to write the following single line in a project method: ```4d ALERT("Hello, World!") ``` -このコードは、 "Hello, World!" メッセージが表示された、OK ボタンの付いたプラットフォームの標準的なアラートダイアログボックスを開きます。 コードを実行するには、メソッドエディターの左上にある実行ボタンをクリックします: +This code will display a platform-standard alert dialog box with the "Hello, World!" message, containing an OK button. To execute the code, you just need to click on the execution button in the Method editor: ![alt-text](assets/en/Concepts/helloworld.png) -あるいは、フォーム内のボタンにこのコードを付けた場合、フォームを実行した状態でボタンをクリックすると、その都度アラートメッセージが表示されます。 いずれの方法でも、前述の1行のコードを実行するだけで目的達成です! +Or, you could attach this code to a button in a form and execute the form, in which case clicking on the button would display the alert dialog box. In any cases, you have just executed your first line of 4D code! -## 値の代入 +## Assigning Values -変数、フィールド、配列要素などを対象に、データを格納したり、格納したデータを別の対象にコピーしたりすることができます。 変数にデータを格納することを、変数にデータを代入すると言い、代入演算子 (:=) を使っておこないます。 代入演算子はフィールドや配列要素に対してデータを代入する場合にも使います。 +Data can be put into and copied out of variables, fields, array elements... Putting data into a variable is called assigning the data to the variable and is done with the assignment operator (:=). The assignment operator is also used to assign data to fields or array elements. ```4d -$MyNumber:=3 // MyNumber 変数に数値の3を代入します -[Products]Size:=$MyNumber // [Products]Size フィールドに MyNumber 変数の値を代入します -arrDays{2}:="Tuesday" // arrDays 配列の第二要素に文字列 "Tuesday" を代入します -MyVar:=Length("Acme") // MyVar 変数に関数の結果 (数値の4) を代入します -$myDate:=!2018/01/21! // 日付リテラルを代入します -$myHour:=?08:12:55? // 時間リテラルを代入します +$MyNumber:=3 //assigns 3 to MyNumber variable +[Products]Size:=$MyNumber //assigns MyNumber variable to [Products]Size field +arrDays{2}:="Tuesday" //assigns "Tuesday" string to the 2nd arrDays element +MyVar:=Length("Acme") //assigns the result of the function (4) to MyVar +$myDate:=!2018/01/21! //assigns a date literal +$myHour:=?08:12:55? //assigns a time literal ``` -代入演算 (:=) は必ず他の演算と区別しなければなりません。 代入演算子は、被演算子を組み合わせて新しい一つのものにするのではなく、演算子の右側の式の値を左側の変数やフィールドにコピーします。 +You MUST distinguish the assignment operator := from the other operators. Rather than combining expressions into a new one, the assignment operator copies the value of the expression to the right of the assignment operator into the variable or field to the left of the operator. -**重要:** 代入演算子 (:=) と比較演算子 (=) とを混同しないように注意してください。 (=) とは異なる代入演算子が採用されたのは意図的なことで、他のプログラミング言語で (==) や (===) の使用によって度々起こる間違いを避けるためです。 このような間違いはコンパイラーにとっても発見しにくく、時間を消耗するトラブルシューティングのもとです。 +**Important:** Do NOT confuse the assignment operator := with the equality comparison operator =. A different assignment operator (and not =) was deliberately chosen to avoid issues and confusion which often occur with == or === in other programming languages. Such errors are often difficult to recognize by the compiler and lead to time-consuming troubleshooting. -## 変数 +## Variables -4D ランゲージは強い型付けの言語ですが、多くの場合に柔軟性も発揮します。 型指定の変数を作成するには `var` キーワードを使います。 たとえば、日付型の変数を作成するには、次のように書くことができます: +The 4D language is strongly typed, although some flexibility is allowed in many cases. You create a typed variable using the `var` keyword. For example, to create a variable of the date type, you can write: ```4d var MyDate : Date ``` -`var` キーワードを使って、定義されているクラス型のオブジェクト変数を宣言することができます。例: +The `var` keyword allows declaring object variables of a defined class type, for example: ```4d var myPerson : cs.Person -// Person ユーザークラスの変数 +//variable of the Person user class ``` -推奨はされませんが、変数を使用することで宣言することもでき、必ずしも正式に宣言する必要はありません。 たとえば、今日の日付に30日足した値を格納した変数が欲しい場合、次のように書くことができます: +Even if it is usually not recommended, you can declare variables simply by using them; you do not necessarily need to formally define them. For example, if you want a variable that will hold the current date plus 30 days, you can write: ```4d MyOtherDate:=Current date+30 ``` -上のコードは "MyOtherDate に、現在の日付に30日を加算した値を代入します" という意味です。 この1行で変数が宣言され、変数に (仮の) データ型とデータが割り当てられます。 このように代入によって宣言された変数はデータ型が規定されていないと解釈され、コードの違う行では別のデータ型の値を代入することもでき、その際にはデータ型を動的に変化させます。 `var` によって宣言された変数はデータ型を変化させることはできません。 [コンパイルモード](interpreted.md) においては、その宣言方法にかかわらず、変数のデータ型は変更できません。 +The line of code reads “MyOtherDate gets the current date plus 30 days.” This line declares the variable, assigns it with both the (temporary) date type and a content. A variable declared by assignment is interpreted as typeless, that is, it can be assigned with other types in other lines and then changes the type dynamically. A variable typed with `var` cannot change the type. In [compiled mode](interpreted.md) however, the type can never be changed, regardless of how the variable was declared. -## コマンド +## Commands -4D コマンドとは、処理を実行するために 4D に組み込まれている命令文のことです。 すべての 4D コマンド、たとえば `CREATE RECORD` や `ALERT` などのコマンドはテーマ別に _4D ランゲージリファレンス_ に記載されています。 コマンドに引数を渡す場合は、コマンド名の後の括弧 () に引数を入れ、セミコロン (;) で区切ります。 例: +4D commands are built-in methods to perform an action. All 4D commands, such as `CREATE RECORD`, or `ALERT`, are described in the _4D Language Reference_ manual, grouped by theme. Commands are often used with parameters, which are passed in brackets () and separated by semicolons (;). Example: ```4d COPY DOCUMENT("folder1\\name1";"folder2\\" ; "new") ``` -コレクションやオブジェクトにコマンドが属している場合、それらは名前付きメソッドであり、ドット記法を用いて使用します。 たとえば: +Some commands are attached to collections or objects, in which case they are named methods and are used using the dot notation. For example: ```4d $c:=New collection(1;2;3;4;5) @@ -75,143 +75,143 @@ $nc:=$c.slice(0;3) //$nc=[1,2,3] $lastEmployee:=$employee.last() ``` -4D プラグインや 4D コンポーネントを利用して、4D 開発環境に新しくコマンドを追加することもできます。 +You can use 4D plug-ins or 4D components that add new commands to your 4D development environment. -4D のユーザーコミュニティーや、サードパーティーデベロッパーによるプラグインが多数存在します。 たとえば, [4d-plugin-pdf-pages](https://github.com/miyako/4d-plugin-pdf-pages) プラグインを macOS で使用した場合は次のコードが書けます: +There are many plug-ins proposed by the 4D user community or 3rd-party developers on the market. For example, using the [4d-plugin-pdf-pages](https://github.com/miyako/4d-plugin-pdf-pages) on macOS: ```4d PDF REMOVE PAGE(path;page) ``` -4D SVG はアプリケーションの機能を拡張するユーティリティコンポーネントの一例です: +4D SVG is an example of a utility component extending the capabilities of your application: ```4d -// 図の描画 +//drawing a picture svgRef:=SVG_New objectRef:=SVG_New_arc(svgRef;100;100;90;90;180) ``` -4D SVG は 4D に含まれています。 +4D SVG is included in 4D. -## 定数 +## Constants -4D では多くの定義済定数が用意されており、それらの値は名前によってアクセスすることができます。 たとえば、`Read Mode` は定数で、その値は 2 です。 メソッドエディターにおいて、定義済定数はデフォルトで下線付きで表示されます。 定義済みの定数によって、より可読性の高いコードを書くことができます。 +4D proposes an extensed set of predefined constants, whose values are accessible by name. For example, `Read Mode` is a constant (value 2). Predefined constants appear underlined by default in the 4D Method editor. They allow writing more readable code. ```4d -vRef:=Open document("PassFile";"TEXT";Read Mode) // ドキュメントを読み取り専用モードで開きます +vRef:=Open document("PassFile";"TEXT";Read Mode) // open doc in read only mode ``` ## Methods -4D が提供するたくさんのビルトインコマンドを使って、独自の **プロジェクトメソッド** を組み立てることができます。 プロジェクトメソッドとはユーザー定義のメソッドで、コマンドや演算子などの要素から成り立ちます。 プロジェクトメソッドは汎用性のあるメソッドですが、そうではない他の種類のメソッドも存在します: オブジェクトメソッド、フォームメソッド、テーブルメソッド (トリガー)、データベースメソッド。 +4D provides a large number of built-in methods (or commands) but also lets you can create your own **project methods**. Project methods are user-defined methods that contain commands, operators, and other parts of the language. Project methods are generic methods, but there are other kinds of methods: Object methods, Form methods, Table methods (Triggers), and Database methods. -メソッドは、一つ以上のステートメントで構成されます。ステートメントとは、メソッドの1行のことで1つの命令を実行します。 ステートメントは単純な場合もあれば、複雑な場合もあります。 +A method is composed of statements; each statement consists of one line in the method. A statement performs an action, and may be simple or complex. -たとえば、次のステートメントは確認ダイアログボックスを表示します: +For example, the following line is a statement that will display a confirmation dialog box: ```4d -CONFIRM("このアカウントを本当に閉じますか?";"はい";"いいえ") +CONFIRM("Do you really want to close this account?";"Yes";"No") ``` -メソッドは、テストとループの制御フローの実行を含みます。 `If...Else...End if` および `Case of...Else...End case` の分岐構造が使用できるほか、ループ構造としては `While...End while`、`Repeat...Until`、`For...End for`、そして `For each...End for each` が使用可能です: +A method also contains tests and loops that control the flow of the execution. 4D methods support `If...Else...End if` and `Case of...Else...End case` branching structures as well as looping structures: `While...End while`, `Repeat...Until`, `For...End for`, and `For each...End for each`: -テキスト変数 vtSomeText の文字を一つ一つループ処理します: +The following example goes through all the characters of the text vtSomeText: ```4d For($vlChar;1;Length(vtSomeText)) - // 文字がタブであれば + //Do something with the character if it is a TAB If(Character code(vtSomeText[[$vlChar]])=Tab) - // なんらかの処理をします + //... End if End for ``` -プロジェクトメソッドは他のプロジェクトメソッドを呼び出すことができ、その際に引数を渡すことも可能です。 メソッドに引数を渡す場合は、メソッド名の後の括弧 () に引数を入れ、 セミコロン (;) で区切ります。 引数は受け取り側のメソッドにて、受け取り順に番号が付けられたローカル変数 ($1, $2, ...$n) に格納されます。 メソッドの一つの値を戻り値とすることができ、$0 パラメーターを使います。 メソッドを呼び出すには、メソッド名を書きます: +A project method can call another project method with or without parameters (arguments). The parameters are passed to the method in parentheses, following the name of the method. Each parameter is separated from the next by a semicolon (;). The parameters are available within the called method as consecutively numbered local variables: $1, $2,…, $n. A method can return a single value in the $0 parameter. When you call a method, you just type its name: ```4d $myText:="hello" -$myText:=Do_Something($myText) // Do_Something メソッドを呼び出します +$myText:=Do_Something($myText) //Call the Do_Something method ALERT($myText) //"HELLO" - // Do_Something メソッドのコードです + //Here the code of the method Do_Something $0:=Uppercase($1) ``` -## データタイプ +## Data Types -4D ランゲージで扱うデータにはいくつかの種別があり、これらのデータ種別を "データタイプ" と呼びます。 基本のデータタイプ (文字、数値、日付、時間、ブール、ピクチャー、ポインター、配列) と混合型のデータタイプ (BLOB、オブジェクト、コレクション) があります。 +In the language, the various types of data that can be handled are referred to as data types. There are basic data types (string, numeric, date, time, Boolean, picture, pointers, arrays), and also composite data types (BLOBs, objects, collections). -データタイプのうち、文字タイプと数値タイプは、複数の類似するフィールドタイプに対応する点に注意してください。 これらのフィールドにデータが格納されるとき、4D ランゲージはフィールドタイプに合致するデータタイプへとデータを自動的に変換します。 反対に、たとえば整数フィールドのデータを呼び出すと、そのデータは自動的に数値タイプとして扱われます。 つまり、4D ランゲージを使用する際に、類似するフィールドタイプを厳密に区別する必要はありません。 +Note that string and numeric data types can be associated with more than one type of field. When data is put into a field, the language automatically converts the data to the correct type for the field. For example, if an integer field is used, its data is automatically treated as numeric. In other words, you need not worry about mixing similar field types when using the language; it will manage them for you. -しかし、プログラミングにおいて異なるデータタイプを混同しないようにすることは重要です。 "ABC" を日付フィールドに格納しても意味がないように、日付型の変数に "ABC" を格納することも意味がありません。 4D は、コードに書かれたことをできるだけ有効にしようとします。 たとえば、日付に数値を加算した場合は、日付に日数を加算したいものと認識します。しかし、日付に文字列を加算した場合には、4D はその操作が意味を持たないことを警告します。 +However, when using the language it is important that you do not mix different data types. In the same way that it makes no sense to store “ABC” in a Date field, it makes no sense to put “ABC” in a variable used for dates. In most cases, 4D is very tolerant and will try to make sense of what you are doing. For example, if you add a number to a date, 4D will assume that you want to add that number of days to the date, but if you try to add a string to a date, 4D will tell you that the operation cannot work. -あるタイプとして格納したデータを、別のタイプとして使用する場合があります。 4D ランゲージには、データタイプを変換するためのコマンドが用意されています。 たとえば、数値で始まり、"abc" 等の文字で終了する部品番号を作成する場合、 以下のように記述することができます: +There are cases in which you need to store data as one type and use it as another type. The language contains a full complement of commands that let you convert from one data type to another. For example, you may need to create a part number that starts with a number and ends with characters such as “abc”. In this case, you might write: ```4d -[Products]Part_Number:=String(Number)+"abc" +[Products]Part Number:=String(Number)+"abc" ``` -数値変数 _Number_ の値が17であれば、_[Products]Part_Number_ に "17abc" という文字列が代入されます。 +If _Number_ is 17, then _[Products]Part Number_ will get the string “17abc”. -データタイプについては [データタイプ](Concepts/data-types.md) の節で詳しく説明しています。 +The data types are fully defined in the section [Data Types](Concepts/data-types.md). -## オブジェクトとコレクション +## Objects and collections -4D ランゲージのオブジェクトとコレクションは、オブジェクト記法を使用して値を代入・取得することができます。 たとえば: +You can handle 4D language objects and collections using the object notation to get or to set their values. For example: ```4d employee.name:="Smith" ``` -大カッコ内と文字列の組み合わせを用いることもできます: +You can also use a string within square brackets, for example: ```4d $vName:=employee["name"] ``` -オブジェクトプロパティ値には、オブジェクトやコレクションも設定することが可能です。これらのサブプロパティにアクセスするため、オブジェクト記法では連続した字句を受け入れることができます: +Since an object property value can be an object or a collection, object notation accepts a sequence of symbols to access sub-properties, for example: ```4d $vAge:=employee.children[2].age ``` -オブジェクトのプロパティ値が、メソッド (フォーミュラ) をカプセル化したオブジェクトである場合には、プロパティ名の後に括弧 ( ) をつけることで実行できます: +Note that if the object property value is an object that encapsulates a method (a formula), you need to add parenthesis () to the property name to execute the method: ``` $f:=New object $f.message:=New formula(ALERT("Hello world!")) -$f.message() // "Hello world!" を表示します +$f.message() //displays "Hello world!" ``` -コレクションの要素にアクセスするためには、大カッコでくくった要素番号を渡します: +To access a collection element, you have to pass the element number embedded in square brackets: ```4d C_COLLECTION(myColl) myColl:=New collection("A";"B";1;2;Current time) -myColl[3] // コレクションの4番目の要素にアクセスします (0起点) +myColl[3] //access to 4th element of the collection ``` ## Classes -4D ランゲージではオブジェクトクラスがサポートされています。 "myClass" という名称のクラスを作成するには、プロジェクトの Project/Sources/Classes フォルダーに `myClass.4dm` ファイルを追加します。 +The 4D language supports object classes. Add a `myClass.4dm` file in the Project/Sources/Classes folder of a project to create a class named "myClass". -あるメソッドにおいて、クラスのオブジェクトをインスタンス化するには、*クラスストア* (`cs`) よりユーザークラスを呼び出して、`new()` メンバー関数を使います。 引数を渡すこともできます。 +To instantiate an object of the class in a method, call the user class from the *class store* (`cs`) and use the `new()` member function. You can pass parameters. ```4d -// 4D メソッド内 +// in a 4D method $o:=cs.myClass.new() ``` -`myClass` クラスメソッド内では、*methodName* クラスメンバーメソッドを宣言するのに `Function ` ステートメントを使います。 ほかのメソッドのように、クラスメンバーメソッドは引数を受け取ったり、値を返すことができ、オブジェクトインスタンスとして `This` を使えます。 +In the `myClass` class method, use the `Function ` statement to define the *methodName* class member method. A class member method can receive and return parameters like any method, and use `This` as the object instance. ```4d -// myClass.4dm ファイル内 +//in the myClass.4dm file Function hello C_TEXT($0) $0:="Hello "+This.who ``` -クラスメンバーメソッドを実行するには、オブジェクトインスタンスのメンバーメソッドに `()` 演算子を使います。 +To execute a class member method, just use the `()` operator on the member method of the object instance. ```4d $o:=cs.myClass.new() @@ -220,10 +220,10 @@ $message:=$o.myClass.hello() //$message: "Hello World" ``` -`Class constructor` キーワードを使用してオブジェクトのプロパティを宣言することもできます (任意)。 +Optionally, use the `Class constructor` keyword to declare properties of the object. ```4d -// Rectangle.4dm ファイル内 +//in the Rectangle.4dm file Class constructor C_LONGINT($1;$2) This.height:=$1 @@ -231,107 +231,107 @@ This.width:=$2 This.name:="Rectangle" ``` -クラスはほかのクラスから継承することもできます: `Class extends `。 また、`Super` コマンドを使って、スーパークラスを呼び出すことができます。 たとえば: +A class can extend another class by using `Class extends `. Superclasses can be called using the `Super` command. For example: ```4d -// Square.4dm ファイル内 -Class extends Rectangle +//in the Square.4dm file +Class extends rectangle Class constructor C_LONGINT($1) - // 親クラスのコンストラクターを呼び出します - // 長方形の高さ・幅パラメーターに正方形の一辺の長さを引数として渡します + // It calls the parent class's constructor with lengths + // provided for the Rectangle's width and height Super($1;$1) This.name:="Square" ``` -## 演算子 -プログラミング言語を使用する際に、データのみを必要とする場合は非常に稀です。 データを加工、または何らかの目的のために使用することがほとんどです。 そういった計算は演算子を使っておこないます。 一般的に演算子とは、2つのデータをもとに処理をおこない、1つの新しいデータを生成します。 日常的に使用されている演算子も多くあります。 例えば、1 + 2 という式は加算演算子(プラス記号)を使用し、2つの数値を足し合わせて、3という結果を返します。 以下に、よく知られている 4つの演算子を示します。 +## Operators +When you use the language, it is rare that you will simply want a piece of data. It is more likely that you will want to do something to or with that data. You perform such calculations with operators. Operators, in general, take two pieces of data and perform an operation on them that results in a new piece of data. You are already familiar with many operators. For example, 1 + 2 uses the addition (or plus sign) operator to add two numbers together, and the result is 3. This table shows some familiar numeric operators: -| 演算子 | 演算子 | 例題 | -| --- | -------- | ------------ | -| + | 加算 (足し算) | 1 + 2 の結果は 3 | -| – | 減算 (引き算) | 3 - 2 の結果は 1 | -| * | 乗算 (かけ算) | 2 * 3 の結果は 6 | -| / | 除算 (割り算) | 6 / 2 の結果は 3 | +| Operator | Operation | Example | +| -------- | -------------- | ------------------ | +| + | Addition | 1 + 2 results in 3 | +| – | Subtraction | 3 – 2 results in 1 | +| * | Multiplication | 2 * 3 results in 6 | +| / | Division | 6 / 2 results in 3 | -数値演算子は、使用可能な演算子のうちの 1種にすぎません。 4Dは、数値・テキスト・日付・ピクチャー等、異なるタイプのデータを扱うために、各データタイプで演算を実行するための演算子を備えています。 +Numeric operators are just one type of operator available to you. 4D supports many different types of data, such as numbers, text, dates, and pictures, so there are operators that perform operations on these different data types. -対象のデータタイプによって、同じ記号が異なる処理に使用される場合があります。 例えば、データタイプによってプラス記号 (+) は下記のように異なる演算を実行します: +The same symbols are often used for different operations, depending on the data type. For example, the plus sign (+) performs different operations with different data: -| データタイプ | 演算子 | 例題 | -| ------ | -------- | ---------------------------------------------------------- | -| 数値 | 加算 (足し算) | 1 + 2 は数値を加算し、結果は 3 です。 | -| String | 連結 (結合) | "みなさん" + "こんにちは" は文字を連結 (結合) し、結果は "みなさんこんにちは" です。 | -| 日付と数値 | 日付の加算 | !2006/12/4! + 20 は、2006年12月4日に 20日を加算し、結果は 2006年12月24日です。 | +| Data Type | Operation | Example | +| --------------- | ------------- | ---------------------------------------------------------------------------------------------------- | +| Number | Addition | 1 + 2 adds the numbers and results in 3 | +| String | Concatenation | “Hello ” + “there” concatenates (joins together) the strings and results in “Hello there” | +| Date and Number | Date addition | !1989-01-01! + 20 adds 20 days to the date January 1, 1989, and results in the date January 21, 1989 | -## 式 +## Expressions -式は、値を返します。 4D ランゲージでコードを書く際には、意識していなくても常に式を使用しています。 式は、"フォーミュラ" と呼ぶこともあります。 +Simply put, expressions return a value. In fact, when using the 4D language, you use expressions all the time and tend to think of them only in terms of the value they represent. Expressions are also sometimes referred to as formulas. -コマンド・演算子・変数・フィールド・オブジェクトプロパティ・コレクション要素等、複数のランゲージの要素を組み合わせて式は構成されます。 式により、ステートメント (メソッドの 1文や 1行) を構成します。 データが必要なとき、式が必要になります。 +Expressions are made up of almost all the other parts of the language: commands, operators, variables, fields, object properties, and collection elements. You use expressions to build statements (lines of code), which in turn are used to build methods. The language uses expressions wherever it needs a piece of data. -式が単独で使われることはほとんどありませんが、 単独で使用できる場合がいくつかあります : +Expressions rarely “stand alone.” There are several places in 4D where an expression can be used by itself. It includes: -- フォーミュラエディター (フォーミュラによるクエリや並べ替えなど) -- `EXECUTE FORMULA` コマンド -- フォームオブジェクトやウィジェットのデータソースとして -- デバッガー内で式の値を確認することができます -- クイックレポートエディターでカラムにフォーミュラを使用することができます +- Formula editor (apply formula, query with formula, order by formula) +- The `EXECUTE FORMULA` command +- The Property list, where an expression can be used as a data source for most of widgets +- Debugger where the value of expressions can be checked +- Quick Report editor as a formula for a column -### 式のタイプ -生成する値のタイプによって、式のタイプを定義することができます。 式のタイプは複数あります。 様々なタイプの式の例を以下に示します。 +### Expression types +You refer to an expression by the data type it returns. There are several expression types. The following table gives examples of each type of expression. -| 式 | タイプ | 説明 | -| --------------------------- | ----------- | ------------------------------------------------------------------------------ | -| "こんにちは" | String | これは文字列定数 "こんにちは" です。 文字列定数であることを表すために二重引用符が必要です。 | -| "みなさん" + "こんにちは" | String | 2つの文字列 "みなさん" と "こんにちは" が + 演算子により結合され、 "みなさんこんにちは" を返します。 | -| [People]Name + "様" | String | 2つの文字列の結合です。[People]Name フィールドと文字列 "様" が結合されます。 フィールドの値が "小林" の場合、"小林様" を返します。 | -| Uppercase ("smith") | String | この式は `Uppercase` コマンドを使用して、文字列 "smith" を英大文字に変換します。 そして "SMITH" を返します。 | -| 4 | 数値 | これは数値定数 4です。 | -| 4 * 2 | 数値 | 2つの数値、4 と 2 の乗算です。乗算演算子の (*) を使用しています。 数値の 8を返します。 | -| myButton | 数値 | これはボタンに紐づけられた変数です。 ボタンの現在の値を返します: クリックされた場合に 1、それ以外は 0 を返します。 | -| !06/12/24! または !2006/12/24! | 日付 | この式は日付定数で 2006年12月24日を表します。 | -| Current date + 30 | 日付 | これは日付の計算です。`Current date` コマンドは現在の日付を返します。 現在の日付に 30日を加えた日付を返します。 | -| ?8:05:30? | 時間 | これは時間定数で、8時5分30秒を表します。 | -| ?2:03:04? + ?1:02:03? | 時間 | 2つの時間の足し算をおこない、3時5分7秒を返します。 | -| True | ブール | このコマンドはブール値の true (真) を返します。 | -| 10 # 20 | ブール | これは 2つの数値の論理比較です。 #記号は、"等しくない" を表します。 10と20は "等しくない" ため、この式は true (真) を返します。 | -| "ABC" = "XYZ" | ブール | これは文字列の論理比較です。 文字列は等しくないため、式は FALSE (偽) を返します。 | -| My Picture + 50 | ピクチャー | この式は My Picture 変数に入っているピクチャーを右に 50ピクセル移動したピクチャーを返します。 | -| ->[People]Name | ポインター | この式は [People]Name フィールドへのポインターを返します。 | -| Table (1) | ポインター | このコマンドは一番目に定義されたテーブルへのポインターを返します。 | -| JSON Parse (MyString) | オブジェクト | このコマンドは MyString が適切なフォーマットであれば、オブジェクトとして返します。 | -| JSON Parse (MyJSONArray) | コレクション | このコマンドは MyJSONArray が適切なフォーマットであれば、コレクションとして返します。 | -| Form.pageNumber | オブジェクトプロパティ | オブジェクトプロパティは式として、サポートされているいずれのタイプでもありえます。 | -| Col[5] | コレクション要素 | コレクション要素は式として、サポートされているいずれのタイプでもありえます。 | -| $entitySel[0] | エンティティ | ORDA のエンティティセレクションの要素である、エンティティを返します。 これは **代入不可の式** です。 | +| Expression | Type | Description | +| ------------------------ | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| “Hello” | String | The word Hello is a string constant, indicated by the double quotation marks. | +| “Hello ” + “there” | String | Two strings, “Hello ” and “there”, are added together (concatenated) with the string concatenation operator (+). The string “Hello there” is returned. | +| “Mr. ” + [People]Name | String | Two strings are concatenated: the string “Mr. ” and the current value of the Name field in the People table. If the field contains “Smith”, the expression returns “Mr. Smith”. | +| Uppercase("smith") | String | This expression uses `Uppercase`, a command from the language, to convert the string “smith” to uppercase. It returns “SMITH”. | +| 4 | Number | This is a number constant, 4. | +| 4 * 2 | Number | Two numbers, 4 and 2, are multiplied using the multiplication operator (*). The result is the number 8. | +| myButton | Number | This is a variable associated to a button. It returns the current value of the button: 1 if it was clicked, 0 if not. | +| !1997-01-25! | Date | This is a date constant for the date 1/25/97 (January 25, 1997). | +| Current date+ 30 | Date | This is a date expression that uses the `Current date` command to get today’s date. It adds 30 days to today’s date and returns the new date. | +| ?8:05:30? | Time | This is a time constant that represents 8 hours, 5 minutes, and 30 seconds. | +| ?2:03:04? + ?1:02:03? | Time | This expression adds two times together and returns the time 3:05:07. | +| True | Boolean | This command returns the Boolean value TRUE. | +| 10 # 20 | Boolean | This is a logical comparison between two numbers. The number sign (#) means “is not equal to”. Since 10 “is not equal to” 20, the expression returns TRUE. | +| “ABC” = “XYZ” | Boolean | This is a logical comparison between two strings. They are not equal, so the expression returns FALSE. | +| My Picture + 50 | Picture | This expression takes the picture in My Picture, moves it 50 pixels to the right, and returns the resulting picture. | +| ->[People]Name | Pointer | This expression returns a pointer to the field called [People]Name. | +| Table (1) | Pointer | This is a command that returns a pointer to the first table. | +| JSON Parse (MyString) | Object | This is a command that returns MyString as an object (if proper format) | +| JSON Parse (MyJSONArray) | Collection | This is a command that returns MyJSONArray as a collection (if proper format) | +| Form.pageNumber | Object property | An object property is an expression that can be of any supported type | +| 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** | -### 代入可 vs 代入不可の式 +### Assignable vs non-assignable expressions -式は、数値の4や"Hello" の文字列のようなリテラル定数であったり、`$myButton` のような変数であったりします。 式には演算子も含められます。 たとえば、4 + 2 という式は加算演算子を使って二つの数値を加算し、結果の 6 を返します。 リテラル定数や演算子を使った式は **代入不可の式**で、式に値を代入することはできません。 **代入可能な式** も存在します。 代入演算子の左側に使えるものが、代入可能な式です。 たとえば: +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 right side of an assignation. For example: ```4d -// 変数 $myVar は代入可能です: -$myVar:="Hello" // $myVar に "Hello" を代入します -//Form.pageNumber は代入可能です: -Form.pageNumber:=10 // Form.pageNumber に 10 を代入します -//Form.pageTotal-Form.pageNumber は代入不可です: -Form.pageTotal- Form.pageNumber:=10 // 代入不可のため、エラー +//$myVar variable is assignable, you can write: +$myVar:="Hello" //assign "Hello" to myVar +//Form.pageNumber is assignable, you can write: +Form.pageNumber:=10 //assign 10 to Form.pageNumber +//Form.pageTotal-Form.pageNumber is not assignable: +Form.pageTotal- Form.pageNumber:=10 //error, non-assignable ``` -このように、リテラル定数ではなくても、演算子を使っている式は代入不可です。 たとえば、`[Person]FirstName+" "+[Person]LastName` は代入不可です。 +In general, expressions that use an operator are non-assignable. For example, `[Person]FirstName+" "+[Person]LastName` is not assignable. -## ポインター +## Pointers -ポインターは、プログラミングにおいてデータを参照するための高度な方法です。 4D ではテーブル、フィールド、変数、配列、配列要素を参照するためにポインターを使用することができます。 +The 4D language provides an advanced implementation of pointers, that allow writing powerful and modular code. You can use pointers to reference tables, fields, variables, arrays, and array elements. -対象へのポインターは、その対象の前にポインター記号 (->) を付けることで取得することができます。反対にポインターから対象を取得するには、ポインター名の後にポインター記号をつけます: +A pointer to an element is created by adding a "->" symbol before the element name, and can be dereferenced by adding the "->" symbol after the pointer name. ```4d MyVar:="Hello" @@ -339,50 +339,50 @@ MyPointer:=->MyVar ALERT(MyPointer->) ``` -## コメント +## Comments -コメントとは、コード内の実行されないテキストのことです。 これらのテキストは、コード実行時にインタープリターによって無視されます。 +Comments are inactive lines of code. These lines are not interpreted by the 4D language and are not executed when the code is called. -コメントの書き方は2通りあります: +There are two ways to create comments: -- `//` 記号の後はすべてコメントとして扱われるため、これを使って1行のコメントが書けます -- `/*コメント*/` の表記方法でインラインコメント、または複数行にまたがるコメントが書けます +- `//` for single line comments +- `/*...*/` for inline or multiline commnents. -これらの書き方は同時に使用できます。 +Both styles of comments can be used simultaneously. -#### シングルラインコメント (//) +#### Single line comments (//) -コードの後や行の最初に `//` を使うと、その後のテキストはすべてコメントとなります。 例: +Insert `//` at the beginning of a line or after a statement to add a single line comment. Example: ```4d -// これはコメントです -For($vCounter;1;100) // ループを開始します - // コメント - // コメント - // コメント +//This is a comment +For($vCounter;1;100) //Starting loop + //comment + //comment + //comment End for ``` -#### インライン、およびマルチラインコメント (/* */) +#### Inline or multiline comments (/* */) -コメントを `/*` と `*/` で囲むと、そのあいだのテキストはコメントとなります。 この方法でインラインおよびマルチラインコメントが書けます: +Surround contents with `/*` ... `*/` characters to create inline comments or multiline comment blocks. Both inline and multiline comment blocks begin with `/*` and end with `*/`. -- **インラインコメント** の 例: +- **Inline comments** can be inserted anywhere in the code. Example: ```4d -For /* インラインコメント */ ($vCounter;1;100) +For /* inline comment */ ($vCounter;1;100) ... End for ``` -- **マルチラインコメント** は複数行にわたるコメントのことです。 この形式のコメントは入れ子にすることができ、4D コードエディターではこれを展開したり折りたたんだりすることができます。 例: +- **Multiline comment blocks** allows commenting an unlimited number of lines. Comment blocks can be nested (useful since the 4D code editor supports block collapsing). Example: ```4d For ($vCounter;1;100) /* -コメント +comments /* - 詳細なコメント + other comments */ */ ... From aab53e23496eab16e9aeacf9d39e395a51d285ca Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:58:31 +0100 Subject: [PATCH 238/311] New translations parameters.md (Japanese) --- .../translated_docs/ja/Concepts/parameters.md | 303 +++++++++--------- 1 file changed, 151 insertions(+), 152 deletions(-) diff --git a/website/translated_docs/ja/Concepts/parameters.md b/website/translated_docs/ja/Concepts/parameters.md index 43a2f5c69e4aff..fc92eb85aad037 100644 --- a/website/translated_docs/ja/Concepts/parameters.md +++ b/website/translated_docs/ja/Concepts/parameters.md @@ -1,56 +1,56 @@ --- id: parameters -title: 引数 +title: Parameters --- -メソッドや関数にデータを渡す必要がしばしば発生します。 これは引数によって容易にできます。 +You'll often find that you need to pass data to your methods and functions. This is easily done with parameters. -## 概要 +## Overview -**引数** (または **パラメーター**) とは、メソッドや関数が処理に必要とするデータのことです。 *引数* と *パラメーター* は厳密には違うものですが、このマニュアルでは同義語として使用されています。 引数は、ビルトインの 4Dコマンドにも渡されます。 以下の例は、“Hello” という文字列を引数としてビルトインの `ALERT` コマンドへ渡します: +**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: ```4d ALERT("Hello") ``` -メソッドやクラス関数に引数を渡す場合も同様におこないます。 たとえば、`getArea()` クラス関数が 2つの引数を受け取る場合、このクラス関数を呼び出すには以下のように書きます: +Parameters are passed to methods or class functions in the same way. For example, if a class function named `getArea()` accepts two parameters, a call to the class function might look like this: ``` $area:=$o.getArea(50;100) ``` -また、プロジェクトメソッド `DO SOMETHING` が3つの引数を受け取る場合、このメソッドを呼び出すには以下のように書きます: +Or, if a project method named `DO_SOMETHING` accepts three parameters, a call to the method might look like this: ```4d DO_SOMETHING($WithThis;$AndThat;$ThisWay) ``` -入力引数は、セミコロン (;) で区切ります。 +The input parameters are separated by semicolons (;). -メソッドを実行する専用コマンドを利用するときも、同じ原則で引数を渡します。 +The same principles are used when methods are executed through dedicated commands, for example: ```4d EXECUTE METHOD IN SUBFORM("Cal2";"SetCalendarDate";*;!05/05/20!) -// サブフォーム "Cal2" のコンテキストにおいて SetCalendarDate を実行し -// その際に引数として日付リテラル !05/05/20! を渡します +//pass the !05/05/20! date as parameter to the SetCalendarDate +//in the context of a subform ``` -メソッドやクラス関数からデータを **返す** こともできます。 以下は、文字列のデータ長を返すビルトインの `Length` コマンドを用いたステートメントです。 このステートメントでは、`Length` 関数が *MyLength* という変数に値を返します。 +Data can also be **returned** from methods and class functions. For example, the following line is a statement that uses the built-in command, `Length`, to return the length of a string. The statement puts the value returned by `Length` in a variable called *MyLength*. Here is the statement: ```4d MyLength:=Length("How did I get here?") ``` -どのようなサブルーチンでも値を返すことができます。 各メソッドやクラス関数につき、定義できる戻り値は一つだけです。 +Any subroutine can return a value. Only one single output parameter can be declared per method or class function. -入力および出力値は呼び出し時に [評価](#引数の渡し方-値か参照か) され、その値はそれぞれ自動的にサブルーチン (呼び出されたメソッドまたはクラス関数) 内のローカル変数に格納されます。 呼び出されるメソッドにおいて、これらのローカル変数を宣言するには次の 2つのシンタックスが利用できます: +Input and output values are [evaluated](#values-or-references) at the moment of the call and copied into local variables within the called class function or method. Two syntaxes are proposed to declare variable parameters in the called code: -- [名前付き変数](#名前付き引数) (ほとんどの場合に推奨) -- [受け渡し順に番号が付けられた変数](#位置引数) (位置引数) +- [named variables](#named-parameters) (recommended in most cases) or +- [sequentially numbered variables](#sequential-parameters). -> 引数の宣言にあたって、[名前付き引数](#名前付き引数) と [位置引数](#位置引数) のシンタックスは制限なく併用することができます。 たとえば: +> Both [named](#named-parameters) and [sequential](#sequential-parameters) variables syntaxes can be mixed with no restriction to declare parameters. For example: > > ```4d Function add($x : Integer) @@ -61,68 +61,68 @@ Function add($x : Integer) -## 名前付き引数 +## Named parameters -呼び出されたメソッドやクラス関数において、引数の値はローカル変数に代入されます。 引数は **パラメーター名** とその **データ型** をコロン (:) で区切って宣言することができます。 +Inside called methods or class functions, parameter values are assigned to local variables. You can declare parameters using a **parameter name** along with a **parameter type**, separated by colon. -- クラス関数の場合、引数は `Function` キーワードとともに宣言されます。 -- メソッドの場合 (プロジェクトメソッド、フォームオブジェクトメソッド、データベースメソッド、トリガー)、引数はメソッドコード先頭の `#DECLARE` キーワードを使って宣言されます。 +- For class functions, parameters are declared along with the `Function` keyword. +- 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. -例: +Examples: ```4d Function getArea($width : Integer; $height : Integer) -> $area : Integer ``` ```4d - // myProjectMethod + //myProjectMethod #DECLARE ($i : Integer) -> $myResult : Object ``` The following rules apply: -- 宣言文はメソッドや関数のコードの先頭に位置していなければなりません。宣言文より前に置けるのはコメントと改行のみであり、それ以外の場合にはエラーが表示されます。 +- The declaration line must be the first line of the method or function code, otherwise an error is displayed (only comments or line breaks can precede the declaration). - Parameter names must start with a `$` character and be compliant with [property naming rules](dt_object.md#object-property-identifiers). -- 複数のパラメーター (およびその型) を宣言する場合は、それらをセミコロン (;) で区切ります。 -- 複数行シンタックスがサポートされています ("\\" 文字を使用)。 +- Multiple parameters (and types) are separated by semicolons (;). +- Multiline syntaxes are supported (using "\\" character). -たとえば、`getArea()` 関数に 2つの引数を渡して呼び出す場合: +For example, when you call a `getArea()` function with two parameters: ``` $area:=$o.getArea(50;100) ``` -クラス関数において、引数の値はそれぞれ対応するパラメーターに代入されます: +In the class function code, the value of each parameter is copied into the corresponding declared parameter: ```4d -// クラス: Polygon +// Class: Polygon Function getArea($width : Integer; $height : Integer)-> $area : Integer $area:=$width*$height ``` -> パラメーターの型が宣言されていない場合には、`バリアント` 型として定義されます。 +> If the type is not defined, the parameter will be defined as `Variant`. -データベースメソッドを含むすべての 4Dメソッドにおいて `#DECLARE` キーワードの使用がサポートされています。 たとえば、`On Web Authentication` データベースメソッドにおいて、次のように名前付き引数を宣言できます: +All 4D method kinds support the `#DECLARE` keyword, including database methods. For example, in the `On Web Authentication` database method, you can declare named parameters: ```4d - // On Web Authentication データベースメソッド + // On Web Authentication database method #DECLARE ($url : Text; $header : Text; \ $BrowserIP : Text; $ServerIP : Text; \ $user : Text; $password : Text) \ -> $RequestAccepted : Boolean $entitySelection:=ds.User.query("login=:1"; $user) -// ハッシュパスワードを確認... +// Check hash password... ``` -### 戻り値 +### 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: ```4d Function add($x : Variant; $y : Integer) -> $result : Integer ``` -矢印と出力変数名を省略して、コロン (:) 記号の後に戻り値のデータ型だけを指定した場合は、自動的に `$0` が使用されます。([受け渡し順シンタックス](#戻り値-1) 参照)。 たとえば: +You can also declare the return parameter only by adding `: type`, in which case it will automatically be available through `$0` ([see sequential syntax below](#returned-value-1)). For example: ```4d Function add($x : Variant; $y : Integer): Integer @@ -130,9 +130,9 @@ Function add($x : Variant; $y : Integer): Integer ``` -### サポートされているデータ型 +### Supported data types -名前付き引数の場合、[`var` キーワードでサポートされている](variables.md#var-キーワードによる宣言) データ型 (クラスオブジェクト含む) を使用できます。 たとえば: +With named parameters, you can use the same data types as those which are [supported by the `var` keyword](variables.md#using-the-var-keyword), including class objects. For example: ```4d Function saveToFile($entity : cs.ShapesEntity; $file : 4D.File) @@ -142,82 +142,81 @@ Function saveToFile($entity : cs.ShapesEntity; $file : 4D.File) -## 位置引数 +## Sequential parameters -[名前付き引数](#名前付き引数) シンタックスを使用するほかにも、引数は受け渡し順に番号が付けられた変数を使って宣言することができます: **$1**, **$2**, **$3**, ...。 ローカル変数の番号は、引数の順序を表わします。 +As an alternative to [named parameters](#named-parameters) syntax, you can declare parameters using sequentially numbered variables: **$1**, **$2**, **$3**, and so on. The numbering of the local variables represents the order of the parameters. -> このシンタックスはクラス関数の場合もサポートされていますが、[名前付き引数](#名前付き引数) を使ったシンタックスの方が推奨されます。 +> Although this syntax is supported by class functions, it is recommended to use [named parameters](#named-parameters) syntax in this case. -たとえば、プロジェクトメソッド `DO SOMETHING` が3つの引数を受け取る場合、このメソッドを呼び出すには以下のように書きます: +For example, when you call a `DO_SOMETHING` project method with three parameters: ```4d DO_SOMETHING($WithThis;$AndThat;$ThisWay) ``` -呼び出されるメソッドにおいて、それぞれの引数の値は自動的に、順に番号が付けられたローカル変数 ($1, $2, $3...) に格納されます: +In the method code, the value of each parameter is automatically copied into $1, $2, $3 variables: ```4d - // DO_SOMETHING メソッド - // すべての引数はテキスト型です + //Code of the method DO_SOMETHING + //Assuming all parameters are of the text type C_TEXT($1;$2;$3) - ALERT($1+" と "+$2+" と "+$3+" を受け取りました。") - //$1 には $WithThis の値が代入されます - //$2 には $AndThat の値が代入されます - //$3 には $ThisWay の値が代入されます + ALERT("I received "+$1+" and "+$2+" and also "+$3) + //$1 contains the $WithThis parameter + //$2 contains the $AndThat parameter + //$3 contains the $ThisWay parameter ``` -### 戻り値 +### Returned value -戻り値は自動的に、ローカル変数 `$0` に格納します。 +The value to be returned is automatically put into the local variable `$0`. -たとえば、`Uppercase4` という以下のメソッドは、始めの 4文字を大文字に変換した文字列を返します: +For example, the following method, called `Uppercase4`, returns a string with the first four characters of the string passed to it in uppercase: ```4d -// Uppercase4 メソッド $0:=Uppercase(Substring($1;1;4))+Substring($1;5) ``` -以下は、Uppercase4 をメソッドとして使用する例です: +The following is an example that uses the Uppercase4 method: ```4d $NewPhrase:=Uppercase4("This is good.") ``` -変数 *$NewPhrase* には“THIS is good.” が格納されます。 +In this example, the variable *$NewPhrase* gets “THIS is good.” -戻り値 `$0` はサブルーチン内のローカル変数です。 したがって、サブルーチン内で通常のローカル変数のように使用できます。 たとえば: +The returned value, `$0`, is a local variable within the subroutine. It can be used as such within the subroutine. For example, you can write: ```4d -// Do_something メソッド +// Do_something $0:=Uppercase($1) ALERT($0) ``` -この例において、`$0` は大文字に変換した引数 `$1` の値を割り当てられ、その後 `ALERT` コマンドに引数として渡されました。 このように、サブルーチン内の他のローカル変数と同じように `$0` を使うことができます。 サブルーチン終了時に、その時点での `$0` の値を呼び出し元のメソッドに戻すのは 4Dがおこないます。 +In this example, `$0` is first assigned the value of `$1`, then used as parameter to the `ALERT` command. Within the subroutine, you can use `$0` in the same way you would use any other local variable. It is 4D that returns the value of `$0` (as it is when the subroutine ends) to the called method. -### サポートされているデータ型 +### Supported data types You can use any [expression](quick-tour.md#expression-types) as sequential parameter, except: -- テーブル +- tables - arrays Tables or array expressions can only be passed [as reference using a pointer](dt_pointer.md#pointers-as-parameters-to-methods). -### 引数の間接参照 +### Parameter indirection -プロジェクトメソッドが受け取る引数は直接的に $1, $2, ... などと指定する以外にも、間接的に ${ 数値変数 } という形で指定することができます。 これを **引数の間接参照** といいます。 同じ型の不定数の引数を受け取るメソッドの場合、`Count parameters` コマンドと組み合わせることで、これらの引数を `For...End for` ループと引数関節参照シンタックスで操作することができます。 +4D project methods accept a variable number of parameters of the same type, starting from the right. This principle is called **parameter indirection**. Using the `Count parameters` command you can then address those parameters with a `For...End for` loop and the parameter indirection syntax. -> 引数の間接参照は [受け渡し順](#位置引数) シンタックスでのみ使用できます。 +> Parameter indirection can only be used with the [sequential](#sequential-parameters) syntax. -次の例では `SEND PACKETS` プロジェクトメソッドは第1パラメーターに時間を受け取り、第2パラメーター以降は1以上のテキストを受け取ります: +In the following example, the project method `SEND PACKETS` accepts a time parameter followed by a variable number of text parameters: ```4d - //SEND PACKETS プロジェクトメソッド - //SEND PACKETS ( 時間 ; テキスト { ; テキスト2... ; テキストN } ) + //SEND PACKETS Project Method + //SEND PACKETS ( Time ; Text { ; Text2... ; TextN } ) //SEND PACKETS ( docRef ; Data { ; Data2... ; DataN } ) C_TIME($1) @@ -229,20 +228,20 @@ Tables or array expressions can only be passed [as reference using a pointer](dt End for ``` -引数の間接参照は以下の条件を守ることにより、正しく動作します: 引数の一部のみを間接参照する場合、直接参照する引数の後に間接参照引数を配置するようにします。 メソッド内で、間接参照は${$i}のように表示します。$iは数値変数です。 ${$i}を **ジェネリックパラメータ** (generic parameter) と呼びます。 +Parameter indirection is best managed if you respect the following convention: if only some of the parameters are addressed by indirection, they should be passed after the others. Within the method, an indirection address is formatted: ${$i}, where $i is a numeric variable. ${$i} is called a **generic parameter**. -以下は間接参照の例です。引数の数値を合計した結果を、引数として渡された表示形式で返すような関数を考えてみましょう。 合計される数値の数は、メソッドが呼ばれるたびに変わります。 このメソッドでは数値と表示形式を引数としてメソッドに渡さなければなりません。 +For example, consider a function that adds values and returns the sum formatted according to a format that is passed as a parameter. Each time this method is called, the number of values to be added may vary. We must pass the values as parameters to the method and the format in the form of a character string. The number of values can vary from call to call. -この関数は、以下のようにして呼び出します: +This function is called in the following manner: ```4d Result:=MySum("##0.00";125,2;33,5;24) ``` -この場合、数値を合計し、指定した形式に編集された文字列 "182.70" が返されます。 関数の引数は正しい順序で渡す必要があります。最初に表示形式、次に数値です。 +In this case, the calling method will get the string “182.70”, which is the sum of the numbers, formatted as specified. The function's parameters must be passed in the correct order: first the format and then the values. -以下は `MySum` 関数です: +Here is the function, named `MySum`: ```4d $Sum:=0 For($i;2;Count parameters) @@ -251,7 +250,7 @@ Tables or array expressions can only be passed [as reference using a pointer](dt $0:=String($Sum;$1) ``` -この関数は様々な呼び出し方ができます: +This function can now be called in various ways: ```4d Result:=MySum("##0.00";125,2;33,5;24) @@ -259,41 +258,41 @@ Tables or array expressions can only be passed [as reference using a pointer](dt ``` -他のローカル変数と同様、ジェネリックパラメーターはコンパイラーに指示する必要はありません。 ただし、曖昧になりそうな場合や最適化のために必要な場合は コンパイラ支持子に ${N} を渡す、以下のシンタックスを使用することができます (N は最初のジェネリックパラメーターの番号です): +As with other local variables, it is not mandatory to declare generic parameters by compiler directive. However, it is recommended to avoid any ambiguity. To declare these parameters, you use a compiler directive to which you pass ${N} as a parameter, where N specifies the first generic parameter. ```4d C_LONGINT(${4}) ``` -このコマンドは、4番目以降に間接参照されるすべての引数のデータ型が倍長整数であることを意味します。 $1、$2、$3には、いかなるデータ型も使用できますが、 $2を間接参照した場合には、間接参照の型宣言の影響を受けます。 このため、たとえば $2 が実数であっても、間接参照されれば倍長整数と見なされます。 +This command means that starting with the fourth parameter (included), the method can receive a variable number of parameters of longint type. $1, $2 and $3 can be of any data type. However, if you use $2 by indirection, the data type used will be the generic type. Thus, it will be of the data type Longint, even if for you it was, for instance, of the data type Real. -> 宣言に使用する数値は変数ではなく、定数でなくてはなりません。 +> The number in the declaration has to be a constant and not a variable. -### コンパイルモード用のパラメーター宣言 +### Declaring parameters for compiled mode Even if it is not mandatory in [interpreted mode](interpreted.md), you must declare each parameter in the called methods or functions to prevent any trouble. -[名前付き引数シンタックス](#名前付き引数) を利用している場合には、それらの引数は `#DECLARE` キーワードまたは `Function` プロトタイプによって自動的に宣言されます。 たとえば: +When using the [named variable syntax](#named-parameters), parameters are automatically declared through the `#DECLARE` keyword or `Function` prototype. For example: ```4d Function add($x : Variant; $y : Integer)-> $result : Integer - // すべての引数はデータ型とともに宣言されます + // all parameters are declared with their type ``` -受け渡し順シンタックスを利用している場合には、引数がそれぞれ適切に宣言されていることを確認する必要があります。 次の例では `Capitalize` プロジェクトメソッドは第1パラメーターにテキスト型の引数を受け取り、戻り値としてテキスト型の値を返します: +When using the sequential variable syntax, you need to make sure all parameters are properly declared. In the following example, the `Capitalize` project method accepts a text parameter and returns a text result: ```4d - // Capitalize プロジェクトメソッド - // Capitalize ( Text ) -> テキスト - // Capitalize ( Source string ) -> 大文字の文字列 + // Capitalize Project Method + // Capitalize ( Text ) -> Text + // Capitalize ( Source string ) -> Capitalized string C_TEXT($0;$1) $0:=Uppercase(Substring($1;1;1))+Lowercase(Substring($1;2)) ``` -`New process` コマンドなどでプロセスメソッドを呼び出す場合にも、そのメソッドが引数を受け取るのであれば、それらは明示的に宣言されていなくてはなりません。 たとえば: +Using commands such as `New process` with process methods that accept parameters also require that parameters are explicitely declared in the called method. For example: ```4d C_TEXT($string) @@ -303,7 +302,7 @@ C_OBJECT($obj) $idProc:=New process("foo_method";0;"foo_process";$string;$int;$obj) ``` -"foo_method" において各パラメーターが適切に宣言されている場合のみ、コンパイルモードで上のコードを実行することができます: +This code can be executed in compiled mode only if "foo_method" declares its parameters: ```4d //foo_method @@ -313,27 +312,27 @@ C_OBJECT($3) ... ``` -> プロジェクトメソッドのパラメーター宣言は、コンパイルモード用にまとめて、"Compiler" で始まる名称の専用メソッドにておこなうことができます。 専用メソッド内で各メソッドのパラメーターをあらかじめ宣言する場合は、次のように書きます: +> For compiled mode, you can group all local variable parameters for project methods in a specific method with a name starting with "Compiler". Within this method, you can predeclare the parameters for each method, for example: ```4d // Compiler_method C_REAL(OneMethodAmongOthers;$1) ``` See [Interpreted and compiled modes](interpreted.md) page for more information. -パラメーターの宣言は次のコンテキストにおいても必須となります (これらのコンテキストは "Compiler" メソッドによる一括宣言をサポートしません)。 +Parameter declaration is also mandatory in the following contexts (these contexts do not support declaration in a "Compiler" method): -- データベースメソッド - たとえば、`On Web Connection データベースメソッド` は 6つのテキスト型の引数 $1 〜 $6 を受け取ります。 たとえすべての引数を使用しない場合でも、データベースメソッドの先頭で次のように宣言しなくてはなりません: +- Database methods - For example, the `On Web Connection Database Method` receives six parameters, $1 to $6, of the data type Text. At the beginning of the database method, you must write (even if all parameters are not used): ```4d // On Web Connection C_TEXT($1;$2;$3;$4;$5;$6) ``` -> `#DECLARE` キーワードを使用して、[名前付き引数](#名前付き引数) を使うこともできます。 +> You can also use [named parameters](#named-parameters) with the `#DECLARE` keyword. -- トリガー - トリガーの結果である $0 パラメーター (倍長整数) は、明確に定義されていなければコンパイラーによって型指定されます。 定義する場合は、トリガーの中でおこなう必要があります。 +- Triggers - The $0 parameter (Longint), which is the result of a trigger, will be typed by the compiler if the parameter has not been explicitly declared. Nevertheless, if you want to declare it, you must do so in the trigger itself. -- `On Drag Over` フォームイベントを受け入れるフォームオブジェクト - `On Drag Over` フォームイベントの結果である $0 パラメーター (倍長整数) は、明確に定義されていなければコンパイラーが型を決定します。 定義する場合は、オブジェクトメソッドの中でおこなう必要があります。 **注:** コンパイラーは $0 を初期化しません。 したがって、`On Drag Over` フォームイベントを使用したら、直ちに $0 を初期化しなければなりません。 たとえば: +- Form objects that accept the `On Drag Over` form event - The $0 parameter (Longint), which is the result of the `On Drag Over` form event, is typed by the compiler if the parameter has not been explicitly declared. Nevertheless, if you want to declare it, you must do so in the object method. **Note:** The compiler does not initialize the $0 parameter. So, as soon as you use the `On Drag Over` form event, you must initialize $0. For example: ```4d C_LONGINT($0) @@ -350,97 +349,97 @@ C_TEXT($1;$2;$3;$4;$5;$6) -## オブジェクトプロパティを名前付き引数として使用する +## Using object properties as named parameters -引数としてオブジェクトを渡すことによって **名前付き引数** を扱うことができます。 このプログラミング方法はシンプルかつ柔軟なだけでなく、コードの可読性も向上させます。 +Using objects as parameters allow you to handle **named parameters**. This programming style is simple, flexible, and easy to read. -たとえば、`CreatePerson` メソッドを例にとると: +For example, using the `CreatePerson` method: ```4d - // CreatePerson メソッド + //CreatePerson var $person : Object $person:=New object("Name";"Smith";"Age";40) ChangeAge($person) ALERT(String($person.Age)) ``` -`ChangeAge` メソッドを次のように書けます: +In the `ChangeAge` method you can write: ```4d - // ChangeAge メソッド + //ChangeAge var $1; $para : Object $para:=$1 $para.Age:=$para.Age+10 - ALERT($para.Name+" は "+String($para.Age)+" 歳です。") + ALERT($para.Name+" is "+String($para.Age)+" years old.") ``` -これは [任意パラメーター](#任意パラメーター) を指定するにあたって非常に便利な方法です (後述参照)。 この場合、引数の不足は次のように対処できます: -- `Null` 値と比較することで、必要な引数がすべて提供されているかをチェックします -- 引数の値をプリセットします -- 渡されていない引数は空値として扱います +This provides a powerful way to define [optional parameters](#optional-parameters) (see also below). To handle missing parameters, you can either: +- check if all expected parameters are provided by comparing them to the `Null` value, or +- preset parameter values, or +- use them as empty values. -上述の `ChangeAge` メソッドの例では、Age およびName プロパティはどちらも必須であるため、引数オブジェクトに含まれていなければエラーが発生します。 これを避けるには、次のように記述することができます: +In the `ChangeAge` method above, both Age and Name properties are mandatory and would produce errors if they were missing. To avoid this case, you can just write: ```4d - // ChangeAge メソッド + //ChangeAge var $1; $para : Object $para:=$1 $para.Age:=Num($para.Age)+10 - ALERT(String($para.Name)+" は "+String($para.Age)+"歳です。") + ALERT(String($para.Name)+" is "+String($para.Age)+" years old.") ``` -すると、引数が不足してもエラーは生成されず、両方が欠落した場合の結果は " is 10 years old" となってしまうにせよ、いずれの引数も任意となります。 +Then both parameters are optional; if they are not filled, the result will be " is 10 years old", but no error will be generated. -名前付き引数を利用すると、アプリケーションの保守やリファクタリングが簡単かつ安全におこなえます。 さきほどの例で、加算する年数を場合に応じて変えたほうが適切であると、あとから気づいたとします。 メソッドのパラメーターとして、加算年数を追加しなくてはなりません。 この場合、次のように書けます: +Finally, with named parameters, maintaining or refactoring applications is very simple and safe. Imagine you later realize that adding 10 years is not always appropriate. You need another parameter to set how many years to add. You write: ```4d $person:=New object("Name";"Smith";"Age";40;"toAdd";10) ChangeAge($person) -// ChangeAge メソッド +//ChangeAge var $1;$para : Object $para:=$1 If ($para.toAdd=Null) $para.toAdd:=10 End if $para.Age:=Num($para.Age)+$para.toAdd -ALERT(String($para.Name)+" は "+String($para.Age)+" 歳です。") +ALERT(String($para.Name)+" is "+String($para.Age)+" years old.") ``` -このように、既存のコードを変える必要はありません。 変更後のコードは変更前と同じように動作しますが、引数によって加算年数に数値を指定することもできるようになりました。 +The power here is that you will not need to change your existing code. It will always work as in the previous version, but if necessary, you can use another value than 10 years. -名前付き引数を使うと、すべてのパラメーターを任意にすることができます。 上の例ではすべてのパラメーターが任意で、いずれを指定しても順序はありません。 +With named variables, any parameter can be optional. In the above example, all parameters are optional and anyone can be given, in any order. -## 入力 / 出力変数 +## Input/Output variables -これらの引数 ($1, $2...) はサブルーチン内で他のローカル変数と同様に使用できます。 しかしながら、引数として渡した変数の値を変更するコマンドをサブルーチン内で使用する場合 (例: `Find in field`)、$1, $2などを直接渡すことはできません。 まず標準のローカル変数等にコピーする必要があります (例: $myvar:=$1)。 +Within the subroutine, you can use the parameters $1, $2... in the same way you would use any other local variable. However, in the case where you use commands that modify the value of the variable passed as parameter (for example `Find in field`), the parameters $1, $2, and so on cannot be used directly. You must first copy them into standard local variables (for example: `$myvar:=$1`). -## 任意パラメーター +## Optional parameters -*4D ランゲージリファレンス* において、コマンドシンタックス中の { } 文字 (中括弧) はその引数が省略可能であることを示します。 たとえば、`ALERT (message{; okButtonTitle})` は *okButtonTitle* が省略できることを意味します。 この場合、次のような呼び出し方が可能です: +In the *4D Language Reference* manual, the { } characters (braces) indicate optional parameters. For example, `ALERT (message{; okButtonTitle})` means that the *okButtonTitle* parameter may be omitted when calling the command. You can call it in the following ways: ```4d -ALERT("Are you sure?";"Yes I am") // 2つの引数 -ALERT("Time is over") // 1つの引数 +ALERT("Are you sure?";"Yes I am") //2 parameters +ALERT("Time is over") //1 parameter ``` -プロジェクトメソッドも同様に、同じ型の引数であれば、右側に不定数の引数を受け取ることができます。 任意パラメーターの問題は、それらが指定されない場合への対処が必要だということです。欠落がエラーに繋がってはいけません。 使用されなかったパラメーターにデフォルト値を代入するやり方が効果的です。 +4D project methods also accept such optional parameters, starting from the right. The issue with optional parameters is how to handle the case where some of them are missing in the called method - it should never produce an error. A good practice is to assign default values to unused parameters. -> 任意パラメーターが必要な場合、[オブジェクトプロパティを名前付き引数として使用する](#オブジェクトプロパティを名前付き引数として使用する) と型の制限がなく、柔軟で便利です。 +> When optional parameters are needed in your methods, you might also consider using [object properties as named parameters](#using-objects-properties-as-named-parameters) which provide a flexible way to handle variable numbers of parameters. -`Count parameters` コマンドを使用すると、メソッドに渡された引数の数を確認することができるため、数に応じて異なる処理をおこなえます。 +Using the `Count parameters` command from within the called method, you can detect the actual number of parameters and perform different operations depending on what you have received. -次の例はテキストメッセージを表示し、2つの引数が渡されていればディスク上のドキュメントに、3つ以上の場合は 4D Write Pro エリアにそのテキストを書き出します。 +The following example displays a text message and can insert the text into a document on disk or in a 4D Write Pro area: ```4d -// APPEND TEXT プロジェクトメソッド -// APPEND TEXT ( テキスト { ; テキスト { ; オブジェクト } } ) -// APPEND TEXT ( メッセージ { ; パス { ; 4DWPエリア } } ) +// APPEND TEXT Project Method +// APPEND TEXT ( Text { ; Text { ; Object } } ) +// APPEND TEXT ( Message { ; Path { ; 4DWPArea } } ) Method($message : Text; $path : Text; $wpArea : Object) @@ -453,91 +452,91 @@ ALERT("Time is over") // 1つの引数 End if End if ``` -このプロジェクトメソッドをアプリケーションに追加したあとは、次のように呼び出すことができます: +After this project method has been added to your application, you can write: ```4d -APPEND TEXT(vtSomeText) // メッセージを表示します -APPEND TEXT(vtSomeText;$path) // メッセージを表示して、 $path のドキュメントに書き出します -APPEND TEXT(vtSomeText;"";$wpArea) // メッセージを表示して、 $wpArea の4D Write Pro ドキュメントに追記します +APPEND TEXT(vtSomeText) //Will only display the message +APPEND TEXT(vtSomeText;$path) //Displays text message and appends it to document at $path +APPEND TEXT(vtSomeText;"";$wpArea) //Displays text message and writes it to $wpArea ``` -## 引数の渡し方: 値か参照か +## Values or references -引数を渡すとき、4D は呼び出し元メソッドのコンテキストにおいてその式を評価し、**結果の値** をクラス関数またはサブルーチンのローカル変数に格納します。 これらのローカル変数に格納されているのは、呼び出し元で使用されているフィールドや変数、式ではなく、渡された値のみです。 スコープがローカルに限られているため、クラス関数 / サブルーチン内でローカル変数の値を変えても、呼び出し元メソッドには影響ありません。 たとえば: +When you pass a parameter, 4D always evaluates the parameter expression in the context of the calling method and sets the **resulting value** to the local variables in the class function or subroutine. The local variables/parameters are not the actual fields, variables, or expressions passed by the calling method; they only contain the values that have been passed. Since its scope is local, if the value of a parameter is modified in the class function/subroutine, it does not change the value in the calling method. For example: ```4d - // MY_METHOD メソッド -DO_SOMETHING([People]Name) // [People]Name の値が "williams" だとします + //Here is some code from the method MY_METHOD +DO_SOMETHING([People]Name) //Let's say [People]Name value is "williams" ALERT([People]Name) - // DO_SOMETHING メソッド + //Here is the code of the method DO_SOMETHING $1:=Uppercase($1) ALERT($1) ``` -`DO_SOMETHING` メソッドによって表示されたアラートボックスでは "WILLIAMS" と表示され、`MY_METHOD` メソッドによって表示されるアラートボックスでは "williams" と表示されます。 `DO_SOMETHING` メソッドは $1 の値をローカルな範囲で変更しましたが、これは `MY_METHOD` メソッドがサブルーチンに渡す引数として指定した [People]Last Name フィールドの値には影響しません。 +The alert box displayed by `DO_SOMETHING` will read "WILLIAMS" and the alert box displayed by `MY_METHOD` will read "williams". The method locally changed the value of the parameter $1, but this does not affect the value of the field `[People]Name` passed as parameter by the method `MY_METHOD`. -もし `DO_SOMETHING` メソッド内でフィールドの値を変更したいのであれば、2通りのやり方があります: +There are two ways to make the method `DO_SOMETHING` change the value of the field: -1. サブルーチンに渡す式としてフィールドではなく、フィールドへのポインターを指定することができます。この場合、以下のようにコードを書きます: +1. Rather than passing the field to the method, you pass a pointer to it, so you would write: ```4d - // MY_METHOD メソッド - DO_SOMETHING(->[People]Name) // [People]Name の値が "williams" だとします + //Here is some code from the method MY_METHOD + DO_SOMETHING(->[People]Name) //Let's say [People]Name value is "williams" ALERT([People]Last Name) - // DO_SOMETHING メソッド + //Here the code of the method DO_SOMETHING $1->:=Uppercase($1->) ALERT($1->) ``` -この例では、引数として指定された式はフィールドではなく、フィールドへのポインターです。 そのため、`DO_SOMETHING` メソッド内において、$1 はフィールドの値ではなく、フィールドへのポインターになっています。 $1 引数によって **参照** される対象 (上記コード内での $1->) はフィールドそのものです。 その結果、参照されている対象を変更すると、その影響はサブルーチンのスコープを超え、実際のフィールドも変更されます。 さきほどの例題においては、両方のアラートボックスに "WILLIAMS" と表示されます。 +Here the parameter is not the field, but a pointer to it. Therefore, within the `DO SOMETHING` method, $1 is no longer the value of the field but a pointer to the field. The object **referenced** by $1 ($1-> in the code above) is the actual field. Consequently, changing the referenced object goes beyond the scope of the subroutine, and the actual field is affected. In this example, both alert boxes will read "WILLIAMS". -2. `DO_SOMETHING` メソッドに "何かさせる" 代わりに、値を返すようにメソッドを書き直すこともできます。 たとえば、以下のようにコードです: +2. Rather than having the method `DO_SOMETHING` "doing something," you can rewrite the method so it returns a value. Thus you would write: ```4d - // MY_METHOD メソッド - [People]Name:=DO_SOMETHING([People]Name) // もとの [People]Name の値が "williams" だとします + //Here is some code from the method MY METHOD + [People]Name:=DO_SOMETHING([People]Name) //Let's say [People]Name value is "williams" ALERT([People]Name) - // DO_SOMETHING メソッド + //Here the code of the method DO SOMETHING $0:=Uppercase($1) ALERT($0) ``` -このようにサブルーチンの戻り値を使うことを "関数を使う" と言います。 詳細については [戻り値](#戻り値) の章を参照ください。 +This second technique of returning a value by a subroutine is called “using a function.” This is described in the [Returning values](#returning-values) paragraph. -### 特殊ケース: オブジェクトやコレクションの場合 +### Particular cases: objects and collections -オブジェクトやコレクションのデータタイプは参照 (つまり、内部的な *ポインター*) を介した形でのみ扱われることに注意が必要です。 +You need to pay attention to the fact that Object and Collection data types can only be handled through a reference (i.e. an internal *pointer*). -したがって、`$1、$2...` には *値* ではなく *参照* が格納されます。 `$1、$2...` の値をサブルーチン内で変更した場合、その変更は元となるオブジェクトやコレクションが使用されているところへと伝播します。 This is the same principle as for [pointers](dt_pointer.md#pointers-as-parameters-to-methods), except that `$1, $2...` parameters do not need to be dereferenced in the subroutine. +Consequently, when using such data types as parameters, `$1, $2...` do not contain *values* but *references*. Modifying the value of the `$1, $2...` parameters within the subroutine will be propagated wherever the source object or collection is used. This is the same principle as for [pointers](dt_pointer.md#pointers-as-parameters-to-methods), except that `$1, $2...` parameters do not need to be dereferenced in the subroutine. -次の例では、`CreatePerson` メソッドはオブジェクトを作成したのち、それを引数として `ChangeAge` に渡します: +For example, consider the `CreatePerson` method that creates an object and sends it as a parameter: ```4d - // CreatePerson メソッド + //CreatePerson var $person : Object $person:=New object("Name";"Smith";"Age";40) ChangeAge($person) ALERT(String($person.Age)) ``` -`ChangeAge` メソッドは受け取ったオブジェクトの Age 属性に 10を加えます: +The `ChangeAge` method adds 10 to the Age attribute of the received object ```4d - // ChangeAge メソッド + //ChangeAge #DECLARE ($person : Object) $person.Age:=$person.Age+10 ALERT(String($person.Age)) ``` -`CreatePerson` メソッドを実行すると、サブルーチンにおいても同じオブジェクト参照が扱われているため、両方のアラートボックスにおいて ”50” と表示されます。 +When you execute the `CreatePerson` method, both alert boxes will read "50" since the same object reference is handled by both methods. -**4D Server:** "サーバー上で実行" オプションが使用された場合など、同じマシン上で実行されないメソッド間で引数が渡される場合、参照渡しは利用できません。 このような場合には、参照の代わりにオブジェクトとコレクションのコピーが引数として渡されます。 +**4D Server:** When parameters are passed between methods that are not executed on the same machine (using for example the "Execute on Server" option), references are not usable. In these cases, copies of object and collection parameters are sent instead of references. From ab02abef2f1c944c20df52e94c7441a9cc0de284 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:58:33 +0100 Subject: [PATCH 239/311] New translations identifiers.md (Japanese) --- .../ja/Concepts/identifiers.md | 304 +++++++++--------- 1 file changed, 152 insertions(+), 152 deletions(-) diff --git a/website/translated_docs/ja/Concepts/identifiers.md b/website/translated_docs/ja/Concepts/identifiers.md index f55de16b7ad9c7..d588b84521df38 100644 --- a/website/translated_docs/ja/Concepts/identifiers.md +++ b/website/translated_docs/ja/Concepts/identifiers.md @@ -1,72 +1,72 @@ --- id: identifiers -title: 識別子の命名規則 +title: Identifiers --- -この章では、4D ランゲージにおけるさまざまな要素 (変数、テーブル、オブジェクト、フォームなど) の命名規則について説明します。 +This section describes the conventions and rules for naming various elements in the 4D language (variables, tables, objects, forms, etc.). -## 基本ルール +## Basic Rules -以下の命名規則は 4D フレームワークにおいて全般的に適用されます: +The following rules apply for all 4D frameworks. -- 識別子の 1文字目は、半角アルファベット、アンダースコア ("_")、あるいはドル記号 ("$") で始めます。 -- その後の文字には、半角アルファベット文字・数字・スペース・アンダースコアを使用ができます。 -- ピリオド (".") および大カッコ ("[ ]") は、テーブル・フィールド・メソッド・変数の名称に使用できません。 -- カンマ (,)・スラッシュ(/)・引用符(")・コロン(:) の使用は禁止されています。 -- 演算子として用いられる記号 ("*" や "+" など) の使用は禁止されています。 -- 予約語を使用しないでください。予約語にはコマンド名 (`Date`, `Time` 等)、キーワード (If, For 等)、そして定数が含まれます。 -- 名前の最後につけたスペースは無視されます。 +- A name must begin with an alphabetic character, an underscore, or a dollar ("$") (note that a dollar sign can denote a local element, see below). +- Thereafter, the name can include alphabetic characters, numeric characters, the space character, and the underscore character ("_"). +- Periods (".") and brackets ("[ ]") are not allowed in table, field, method, or variable names. +- Commas, slashes, quotation marks, and colons are not allowed. +- Characters reserved for use as operators, such as * and +, are not allowed. +- Do not use reserved names, i.e. 4D command names (`Date`, `Time`, etc), keywords (If, For, etc.), and constants. +- Any trailing spaces are ignored. -### ORDA やオブジェクトプロパティに適用される追加ルール +### Additional rules for object property and ORDA names -- スペースは使えません。 -- ピリオド (".") および大カッコ ("[ ]") は使用できません。 -- 大文字・小文字は区別されます。 +- Space characters are not allowed. +- Periods (".") and brackets ("[ ]") are not allowed. +- Names are case sensitive. -### SQL で処理する場合の追加ルール +### Additional rules for SQL -- 文字 _0123456789abcdefghijklmnopqrstuvwxyz のみを使用できます。 -- 名前に SQLキーワード (コマンド、属性 等) が含まれていてはなりません。 +- Only the characters _0123456789abcdefghijklmnopqrstuvwxyz are accepted +- Names must not include any SQL keywords (command, attribute, etc.). -**注:** ストラクチャーエディターのインスペクター下部にある ”SQL” エリアには、テーブル名やフィールド名として許可されない文字があると警告が表示されます。 +**Note:** The "SQL" area of the Inspector in the Structure editor automatically indicates any unauthorized characters in the name of a table or field. -## 配列 +## Arrays -配列は、配列作成時に配列宣言コマンド (ARRAY LONGINT 等) に渡す名前でもって表されます。 配列は変数であり、配列名はスコープ記号を除いて31文字まで指定することができます。スコープに基づいて次の3種類があります: +You designate an array by using its name, which is the name you pass to an array declaration (such as ARRAY LONGINT) when you create the array. Arrays are variables, and like variables, the name of an array can be up to 31 characters, not including the scope symbols, and there are three different types of arrays: -- 配列名がドル記号 ($) で始まるものは、**ローカル** 配列です。 -- (<>記号や$記号から始まらない) 名前を使用して、**プロセス** 配列を表します。 -- **インタープロセス** 配列の名前は、先頭にインタープロセス記号 (<>) が付きます。 +- The name of a **local** array is preceded by the dollar sign ($). +- The name of a **process** array cannot start with the <> symbols nor the dollar sign $). +- The name of an **interprocess** array is preceded by the symbols (<>) — a “less than” sign followed by a “greater than” sign. -例: +Examples: ```4d -ARRAY TEXT($atSubjects;Records in table([Topics])) // ローカル配列 -SORT ARRAY(asKeywords;>) // プロセス配列 -ARRAY BOOLEAN(<>settings;Records in table([MySettings])) // インタープロセス配列 +ARRAY TEXT($atSubjects;Records in table([Topics])) //local array +SORT ARRAY(asKeywords;>) //process array +ARRAY BOOLEAN(<>settings;Records in table([MySettings])) //interprocess array ``` -### 配列の要素 -中カッコ ("{ }") を使用して、インタープロセス配列、プロセス配列、ローカル配列の要素を参照します。 参照される配列要素は数式で表されます。 +### Elements of arrays +You reference an element of an interprocess, process or local array by using the curly braces("{ }"). The element referenced is denoted by a numeric expression. -例: +Examples: ```4d - // ローカル配列の特定要素にアクセスする例 + //Addressing an element of a local array If($asKeywords{1}="Stop") $atSubjects{$vlElem}:=[Topics]Subject $viNextValue:=$aiBigArray{Size of array($aiBigArray)} ``` -### 二次元配列の要素 -中カッコ ("{ }") を2回使用して、2次元配列の要素を参照します 。 参照される要素は2組の中カッコ内の2つの数式で表されます。 +### Elements of two-dimensional arrays +You reference an element of a two-dimensional array by using the curly braces ({…}) twice. The element referenced is denoted by two numeric expressions in two sets of curly braces. -例: +Examples: ```4d - // 二次元配列の特定要素にアクセスする例 + //Addressing an element of a two-dimensional process array If(asKeywords{$vlNextRow}{1}="Stop") atSubjects{10}{$vlElem}:=[Topics]Subject $viNextValue:=aiBigArray{$vlSet}{Size of array(aiBigArray{$vlSet})} @@ -74,81 +74,81 @@ $viNextValue:=aiBigArray{$vlSet}{Size of array(aiBigArray{$vlSet})} ## Classes -クラス名は標準的な [プロパティ名の命名規則](Concepts/dt_object.md#ORDA-やオブジェクトプロパティに適用される追加ルール) に準拠している必要があります。 大文字・小文字は区別されます。 競合防止のため、[データベーステーブル](#tables) と同じ名前のクラスを作成するのは推奨されないこと +A class name must be compliant with standard [property naming rules](#additional-rules-for-object-property-and-orda-names). They are case sensitive. Giving the same name to a class and a [database table](#tables) is not recommended, in order to prevent any conflict. -## フィールド +## Fields -フィールドが属するテーブルを最初に指定することで、フィールドを表します。 フィールド名はテーブル名のすぐ後に続けます。 フィールド名は31文字以内で指定します。 +You designate a field by first specifying the table to which it belongs. The field name immediately follows the table name. A field name can contain up to 31 characters. -例: +Examples: ```4d [Orders]Total:=Sum([Line]Amount) QUERY([Clients];[Clients]Name="Smith") [Letters]Text:=Capitalize text([Letters]Text) ``` -## フォームオブジェクト +## Form objects -フォームオブジェクトを引数としてコマンドに渡すには、文字列の名称の前に、任意パラメーターである * 記号を使います。 オブジェクト名には最大で255バイトまで含めることができます。 +You designate a form object by passing its name as a string, preceded by the * parameter. A form object name can contain up to 255 characters. -例: +Example: ```4d OBJECT SET FONT(*;"Binfo";"Times") ``` -**注:** フォームオブジェクト (ボタン、リストボックス、入力可能な変数など) と 4Dランゲージのオブジェクト型を混同しないようにしてください。 4Dランゲージのオブジェクト型はオブジェクト記法と専用のコマンドを使用して作成し、管理されます。 +**Note:** Do not confuse form objects (buttons, list boxes, variables that can be entered, etc.) and objects in the 4D language. 4D language objects are created and manipulated via object notation or dedicated commands. ## Forms -フォームの名前は文字列を使用して表します。 フォーム名は31文字以内で指定します。 +You designate a form by using a string expression that represents its name. A form name can contain up to 31 characters. -例: +Examples: ```4d FORM SET INPUT([People];"Input") FORM SET OUTPUT([People];"Output") DIALOG([Storage];"Note box"+String($vlStage)) ``` -## 関数 +## Functions -関数名は標準的な [プロパティ名の命名規則](Concepts/dt_object.md#ORDA-やオブジェクトプロパティに適用される追加ルール) に準拠している必要があります。 +Function names must be compliant with standard [property naming rules](#additional-rules-for-object-property-and-orda-names). -> Tip: アンダースコア ("_") 文字で関数名を開始すると、その関数は 4Dコードエディターの自動補完機能から除外されます。 +> Tip: Starting the function name with an underscore character ("_") will exclude the function from the autocompletion features in the 4D code editor. -## 命名セレクション +## Named Selections -命名セレクション名は、スコープ記号を除いて255文字以内で指定します。 +A named selection name can contain up to 255 characters, not including scope character(s). -- **プロセス** 命名セレクションの名前を表す文字列式を使用してプロセスセットを表します (<>記号も$記号も名前の先頭につきません) 。 -- **インタープロセス** 命名セレクションの名前は、先頭にインタープロセス記号 (<>) が付きます。 +- You denote a **process** named selection by using a string expression that represents its name (which cannot start with the <> symbols nor the dollar sign $). +- You denote an **interprocess** named selection if its name is preceded by the symbols (<>) — a “less than” sign followed by a “greater than” sign. -例: +Examples: ```4d -USE NAMED SELECTION([Customers];"Closed")// プロセス命名セレクション -USE NAMED SELECTION([Customers];"<>ByZipcode") // インタープロセス命名セレクション +USE NAMED SELECTION([Customers];"Closed")//Process Named Selection +USE NAMED SELECTION([Customers];"<>ByZipcode") //Interprocess Named Selection ``` -## オブジェクト属性 +## Object attributes -ドット (".") をオブジェクト名と属性名の間に置くことでオブジェクト属性 (オブジェクトプロパティとも呼びます) を指定します。 属性名は255文字以内の文字列で指定し、また大文字と小文字を区別することに注意してください。 +You designate an object attribute (also called object property) by placing a point (".") between the name of the object and the name of the attribute. An attribute name can contain up to 255 characters and is case sensitive. -例: +Examples: ```4d myObject.myAttribute:="10" $value:=$clientObj.data.address.city ``` -**注:** オブジェクト属性名にはさらにルールが適用されます (オブジェクト属性は ECMAScript の仕様に沿う必要があります)。 詳細については、[上述の追加ルール](#ORDA-やオブジェクトプロパティに適用される追加ルール) および [オブジェクトプロパティ識別子](Concepts/dt_object.md#オブジェクトプロパティ識別子) を参照ください。 +**Note:** Additional rules apply to object attribute names (they must comply with the ECMAScript specification). For more information, see [additional rules above](#additional-rules-for-object-property-and-orda-names) and [Object property identifiers](Concepts/dt_object.md#object-property-identifiers). -## 引数 +## Parameters -引数名は必ず `$` 文字で始まり、[プロパティ名の命名規則](Concepts/dt_object.md#ORDA-やオブジェクトプロパティに適用される追加ルール) に準拠している必要があります。 +Parameter names must start with a `$` character and be compliant with [property naming rules](#additional-rules-for-object-property-and-orda-names). -例: +Examples: ```4d Function getArea($width : Integer; $height : Integer)-> $area : Integer @@ -156,172 +156,172 @@ Function getArea($width : Integer; $height : Integer)-> $area : Integer #DECLARE ($i : Integer ; $param : Date) -> $myResult : Object ``` -## プラグインコマンド +## Plug-In Commands -プラグインにより定義された名前を使用して、プラグインコマンドを表します。 プラグインコマンド名は 31文字以内で指定します。 +You designate a plug-in command by using its name as defined by the plug-in. A plug-in command name can contain up to 31 characters. -例: +Example: ```4d $error:=SMTP_From($smtp_id;"henry@gmail.com") ``` -## プロセス +## Processes -ローカルプロセス名は、スコープ記号を除いて255文字以内で指定します。 +A process name can contain up to 255 characters, not including scope character. -シングルユーザー版およびクライアント/サーバー版のクライアント側において、**グローバル** と **ローカル** という2種類のプロセススコープがあります。 +In the single-user version, or in Client/Server on the Client side, there are two process scopes: **global** or **local**. -- $記号以外から始まる文字列を使用して **グローバル** プロセスの名前を表します。 -- 名前の前にドル記号 ($) をつけて **ローカル** プロセスを表します。 +- You denote a **global** process by using a string expression that represents its name (which cannot start with the dollar sign $). +- You denote a **local** process if the name of the process is preceded by a dollar ($) sign. -例: +Examples: ```4d - // グローバルプロセス "Add Customers" を開始します + //Starting the global process "Add Customers" $vlProcessID:=New process("P_ADD_CUSTOMERS";48*1024;"Add Customers") - // ローカルプロセス "$Follow Mouse Moves" を開始します + //Starting the local process "$Follow Mouse Moves" $vlProcessID:=New process("P_MOUSE_SNIFFER";16*1024;"$Follow Mouse Moves") ``` -## プロジェクトメソッド +## Project methods -プロジェクトメソッド (プロシージャーおよび関数) は名前によって表されます。 メソッド名は31文字以内で指定します。 +You designate a project method (procedure or function) by using its name. A method name can contain up to 31 characters. -**注:** 結果を返さないプロジェクトメソッドはプロシージャーとも呼ばれます。 結果を返すプロジェクトメソッドを関数と呼びます。 +**Note:** A project method that does not return a result is also called a procedure. A project method that returns a result is also called a function. -例: +Examples: ```4d If(New client) DELETE DUPLICATED VALUES APPLY TO SELECTION([Employees];INCREASE SALARIES) ``` -**Tip:** 4Dのビルトインコマンドと同じ命名規約を利用することは良いプログラミングテクニックです。 メソッド名には大文字を使用しますが、メソッドが関数の場合には最初の文字だけを大文字にします。 このように命名することにより、数ヶ月後に保守のためプロジェクトを再度開いたときに、エクスプローラーウィンドウでその名前を見ただけで、メソッドが結果を返すかどうかがわかります。 +**Tip:** It is a good programming technique to adopt the same naming convention as the one used by 4D for built-in methods. Use uppercase characters for naming your methods; however if a method is a function, capitalize the first character of its name. By doing so, when you reopen a project for maintenance after a few months, you will already know if a method returns a result by simply looking at its name in the Explorer window. -**注:** メソッドを呼び出すには、そのメソッド名を入力します。 しかし `ON EVENT CALL` など一部の 4Dのビルトインコマンドやプラグインコマンドにメソッド名を引数として渡す場合には文字列 (ダブルクォートで括る) として渡します。 例: +**Note:** When you call a method, you just type its name. However, some 4D built-in commands, such as `ON EVENT CALL`, as well as all the Plug-In commands, expect the name of a method as a string when a method parameter is passed. Examples: ```4d - // このコマンドはメソッド (関数) またはフォーミュラを受け取ります + //This command expects a method (function) or formula QUERY BY FORMULA([aTable];Special query) - // このコマンドはメソッド (プロシージャ) またはステートメントを受け取ります + //This command expects a method (procedure) or statement APPLY TO SELECTION([Employees];INCREASE SALARIES) - // このコマンドはメソッド名を文字列で受け取ります + //But this command expects a method name ON EVENT CALL("HANDLE EVENTS") ``` -プロジェクトメソッドには引数を渡すことができます。 メソッドに引数を渡す場合は、メソッド名の後の括弧 () に引数を入れ、 セミコロン (;) で区切ります。 引数は受け取り側のメソッドにて、受け取り順に番号が付けられたローカル変数 ($1, $2, ...$n) に格納されます。 さらに、複数の連続する引数は、${n}というシンタックスを用いて使用できます。nは数値で引数の番号を示します。 +Project methods can accept parameters (arguments). The parameters are passed to the method in parentheses, following the name of the method. Each parameter is separated from the next by a semicolon (;). The parameters are available within the called method as consecutively numbered local variables: $1, $2,…, $n. In addition, multiple consecutive (and last) parameters can be addressed with the syntax ${n}where n, numeric expression, is the number of the parameter. -関数の戻り値は、ローカル変数 $0 に代入することで指定します。 +Inside a function, the $0 local variable contains the value to be returned. -例: +Examples: ```4d - // DROP SPACES メソッド内で、$1 はフィールド [People]Name へのポインターです + //Within DROP SPACES $1 is a pointer to the field [People]Name DROP SPACES(->[People]Name) - // Calc creator メソッド内で、 - //- $1 は数値の 1 - //- $2 は数値の 5 - //- $3 テキストまたは文字列の "Nice" - //- 戻り値は $0 に代入されます + //Within Calc creator: + //- $1 is numeric and equal to 1 + //- $2 is numeric and equal to 5 + //- $3 is text or string and equal to "Nice" + //- The result value is assigned to $0 $vsResult:=Calc creator(1;5;"Nice") - // Dump メソッド内で、 - //- 3つの引数はテキストまたは文字列です - //- これらの引数は $1, $2, $3 で参照できます - //- また、これらの引数を ${$vlParam} で間接的に参照することもできます ($vlParamは1, 2, 3) - //- 戻り値は $0 に代入されます + //Within Dump: + //- The three parameters are text or string + //- They can be addressed as $1, $2 or $3 + //- They can also be addressed as, for instance, ${$vlParam} where $vlParam is 1, 2 or 3 + //- The result value is assigned to $0 vtClone:=Dump("is";"the";"it") ``` -## セット +## Sets -セット名は、スコープ記号を除いて255文字以内で指定します。 +A set name can contain up to 255 characters, not including scope character()s). -- セットの名前を表す文字列を使用して **プロセス** セットを表します (<>記号も$記号も名前の先頭につきません) 。 -- **インタープロセス** セットの名前は、先頭にインタープロセス記号 (<>) が付きます。 -- 4D サーバー上において **クライアント** セット名は、先頭にドル記号 ($) を指定します。 クライアントセット名は、ドル記号を除いて255文字以内で指定します。 +- You denote a **process** set by using a string expression that represents its name (which cannot start with the <> symbols or the dollar sign $). +- You denote an **interprocess** set if the name of the set is preceded by the symbols (<>) — a “less than” sign followed by a “greater than” sign. +- On 4D Server, the name of a **client** set is preceded by the dollar sign ($). A client set name can contain up to 255 characters, not including the dollar sign. -> セットはサーバーマシン上で保守されます。 効率や特殊目的のために、クライアントマシン上でローカルにセットを使用したい場合があります。 このような場合にクライアントセットを使用します。 +> Sets are maintained on the Server machine. In certain cases, for efficiency or special purposes, you may need to work with sets locally on the Client machine. To do so, you use client sets. -例: +Examples: ```4d -CREATE SET([Customers];"Customer Orders")// プロセスセット -USE SET("<>Deleted Records") // インタープロセスセット -If(Records in set("$Selection"+String($i))>0) // クライアントセット +CREATE SET([Customers];"Customer Orders")//Process set +USE SET("<>Deleted Records") //Interprocess set +If(Records in set("$Selection"+String($i))>0) //Client set ``` -## テーブル +## Tables -大カッコ内 (\[...]) に名前を入れることで、テーブルを表します。 テーブル名は、31文字以内で指定します。 競合防止のため、[クラス](#クラス) と同じ名前のテーブルを作成するのは推奨されません。 +You designate a table by placing its name between brackets: \[...]. A table name can contain up to 31 characters. Giving the same name to a table and a [class](#classes) is not recommended, in order to prevent any conflict. -例: +Examples: ```4d DEFAULT TABLE([Orders]) FORM SET INPUT([Clients];"Entry") ADD RECORD([Letters]) ``` -## 変数 +## Variables -変数名は、スコープ記号を除いて最大31文字以内で指定することができます。 +The name of a variable can be up to 31 characters, not including the scope symbols. -- ドル記号 ($) を名前の先頭につけて **ローカル** 変数を表します。 -- (<>記号や$記号から始まらない) 名前を使用して、**プロセス** 変数を表します。 -- 名前の先頭にインタープロセス記号 (<>) を付けることによって、**インタープロセス** 変数を表します。 +- You designate a **local** variable by placing a dollar sign ($) before the variable name. +- You designate a **process** variable by using its name (which cannot start with the <> symbols nor the dollar sign $) +- You designate an **interprocess** variable by preceding the name of the variable with the symbols (<>) — a “less than” sign followed by a “greater than” sign. -例: +Examples: ```4d -For($vlRecord;1;100) // ローカル変数 -$vsMyString:="Hello there" // ローカル変数 -If(bValidate=1) // プロセス変数 -<>vlProcessID:=Current process // インタープロセス変数 +For($vlRecord;1;100) //local variable +$vsMyString:="Hello there" //local variable +If(bValidate=1) //process variable +<>vlProcessID:=Current process //interprocess variable ``` -## 識別子の一覧 +## Summary of Identifiers -次の表は、4Dの命名規則についてまとめています。 +The following table summarizes 4D naming conventions. -| 識別子 | 最大 長 | 例題 | -| ---------------- | -------- | -------------------------- | -| テーブル | 31 | [Invoices] | -| フィールド | 31 | [Employees]Last Name | -| インタープロセス変数/配列 | <> + 31 | <>vlNextProcessID | -| プロセス変数/配列 | 31 | vsCurrentName | -| ローカル変数/配列 | $ + 31 | $vlLocalCounter | -| オブジェクト属性 | 255 | $o.myAttribute | -| フォーム | 31 | "My Custom Web Input" | -| フォームオブジェクト | 255 | "MyButton" | -| プロジェクトメソッド | 31 | M_ADD_CUSTOMERS | -| プラグインコマンド | 31 | PDF SET ROTATION | -| インタープロセスセット | <> + 255 | "<>Records to be Archived" | -| プロセスセット | 255 | "Current selected records" | -| クライアントセット | $ + 255 | "$Previous Subjects" | -| 命名セレクション | 255 | "Employees A to Z" | -| インタ-プロセス命名セレクション | <> + 255 | "<>Employees Z to A" | -| ローカルプロセス | $ + 255 | "$Follow Events" | -| グロ-バルプロセス | 255 | "*P_INVOICES_MODULE*" | -| セマフォー | 255 | "mysemaphore" | +| Identifier | Max. Length | Example | +| ---------------------------- | ----------- | -------------------------- | +| Table | 31 | [Invoices] | +| Field | 31 | [Employees]Last Name | +| Interprocess Variable/Array | <> + 31 | <>vlNextProcessID | +| Process Variable/Array | 31 | vsCurrentName | +| Local Variable/Array | $ + 31 | $vlLocalCounter | +| Object attribute | 255 | $o.myAttribute | +| Form | 31 | "My Custom Web Input" | +| Form object | 255 | "MyButton" | +| Project method | 31 | M_ADD_CUSTOMERS | +| Plug-in Routine | 31 | PDF SET ROTATION | +| Interprocess Set | <> + 255 | "<>Records to be Archived" | +| Process Set | 255 | "Current selected records" | +| Client Set | $ + 255 | "$Previous Subjects" | +| Named Selection | 255 | "Employees A to Z" | +| Interprocess Named Selection | <> + 255 | "<>Employees Z to A" | +| Local Process | $ + 255 | "$Follow Events" | +| Global Process | 255 | "*P_INVOICES_MODULE*" | +| Semaphore | 255 | "mysemaphore" | -**注:** 非ローマ文字 (日本語など) が識別子に使用された場合、その最大長は短かくなることがあります。 +**Note:** If non-Roman characters are used in the names of the identifiers, their maximum length may be smaller. -## 名前が重複する場合 +## Resolving Naming Conflicts -プロジェクト内の要素に対して、ぞれぞれ重複しない名前を使用するようにしてください。 特定の要素が別タイプの要素と同じ名前を持つ場合 (たとえばフィールドが Person という名前で、変数も Person という名前の場合)、4Dは優先順位システムを使用します。 +Be sure to use unique names for the different elements in your project. If a particular element has the same name as another element of a different type (for example, if a field is named Person and a variable is also named Person), 4D uses a priority system. -4Dは、メソッドで使用される名前を次の順位で識別します: +4D identifies names used in procedures in the following order: -1. フィールド -2. コマンド +1. Fields +2. Commands 3. Methods -4. プラグインコマンド -5. 定義済み定数 -6. 変数 +4. Plug-in routines +5. Predefined constants +6. Variables. -たとえば、4Dには `Date` というビルトインコマンドがあります。 メソッドに *Date* という名前を付けても、4Dはビルトインコマンドの `Date` として認識し、メソッドとしては認識しません。 つまり、そのメソッドの呼び出しはできないということです。 しかしながら、フィールドを "Date" と命名した場合には、4Dは `Date` コマンドの代わりにフィールドとしての使用を試みます。 +For example, 4D has a built-in command called `Date`. If you named a method *Date*, 4D would recognize it as the built-in `Date` command, and not as your method. This would prevent you from calling your method. If, however, you named a field “Date”, 4D would try to use your field instead of the `Date` command. From 5959c72f86a584bcf1e5c806d299f79f96398fc9 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:58:35 +0100 Subject: [PATCH 240/311] New translations interpreted.md (Japanese) --- .../ja/Concepts/interpreted.md | 82 +++++++++---------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/website/translated_docs/ja/Concepts/interpreted.md b/website/translated_docs/ja/Concepts/interpreted.md index 29ce454e590bda..523905cd50ff31 100644 --- a/website/translated_docs/ja/Concepts/interpreted.md +++ b/website/translated_docs/ja/Concepts/interpreted.md @@ -1,62 +1,62 @@ --- id: interpreted-compiled -title: インタープリターモードとコンパイル済みモード +title: Interpreted and Compiled modes --- -4D アプリケーションは **インタープリター** または **コンパイル済み** モードで実行することができます: +4D applications can work in **interpreted** or **compiled** mode: -- インタープリターモードにおいて、コードは実行時に読み込まれてマシン語に翻訳されます。 コードはいつでも追加・変更することができ、アプリケーションは自動的に更新されます。 -- コンパイル済みモードにおいては、コンパイル時にすべてのコードが一括で読み込まれて翻訳されます。 コンパイル後のアプリケーションにはアセンブリレベルの指示のみが残され、コード編集はできません。 +- in interpreted mode, statements are read and translated in machine language at the moment of their execution. You can add or modify the code whenever you need to, the application is automatically updated. +- in compiled mode, all methods are read and translated once, at the compilation step. Afterwards, the application only contains assembly level instructions are available, it is no longer possible to edit the code. -コンパイルには以下のようなメリットがあります: +The advantages of the compilation are: -- **速度**: アプリケーションの実行速度を3倍から1000倍速くします。 -- **コードチェック**: アプリケーションコードの整合性をチェックし、 論理的矛盾や構文的矛盾を検出します。 -- **保護**: アプリケーションをコンパイルすると、インタープリターコードを削除できます。 コンパイルされたアプリケーションは、故意的にも不注意からもストラクチャーやメソッドの表示・修正ができないこと以外は、オリジナルのアプリケーションと同じに動作します。 -- **ダブルクリックで起動するアプリケーション**: コンパイル後のアプリケーションは、独自のアイコンを持つスタンドアロンアプリケーション (.EXEファイル) に作り変えることもできます。 -- **プリエンプティブモードでの実行**: プリエンプティブプロセスとして実行できるのは、コンパイルされたコードに限られます。 +- **Speed**: Your application can run from 3 to 1,000 times faster. +- **Code checking**: Your application is scanned for the consistency of code. Both logical and syntactical conflicts are detected. +- **Protection**: Once your application is compiled, you can delete the interpreted code. Then, the compiled application is functionally identical to the original, except that the structure and methods cannot be viewed or modified, deliberately or inadvertently. +- **Stand-alone double-clickable applications**: compiled applications can also be transformed into stand-alone applications (.EXE files) with their own icon. +- **Preemptive mode**: only compiled code can be executed in preemptive processes. -## インタープリターコードとコンパイル済みコードの違い -アプリケーションの動作は同じであっても、インタープリターモードとコンパイル済みモードにはいくつかの相違点があり、コンパイルされるコードを書くにあたってはこれらを意識しておく必要があります。 基本的に、4D のインタープリターはコンパイラーより柔軟です。 +## Differences between interpreted and compiled code +Although application will work the same way in interpreted and compiled modes, there are some differences to know when you write code that will be compiled. The 4D interpreter is usually more flexible than the compiler. -| コンパイル済みコード | インタープリターコード | -| ---------------------------------------------------------------------------------------- | -------------------------------- | -| 変数名とメソッド名が被ってはいけません。 | エラーは生成されませんが、メソッドが優先されます。 | -| コンパイラ指示子 (例: `C_LONGINT`) によって、またはコンパイル時にコンパイラーによって、すべての変数は型指定されなければなりません。 | 変数の型は実行中に決定していくことができます (推奨されません) | -| 変数や配列のデータタイプは変更できません。 | 変数や配列のデータタイプは変更可能です (推奨されません) | -| 1次元配列を2次元配列に、また2次元配列を1次元配列に変更することはできません。 | 可能です。 | -| コンパイラーにより変数のタイプ定義はおこなわれますが、フォーム上の変数のようにデータタイプが明確でない場合は、コンパイラー指示子を使用して変数のデータタイプを指定するべきです。 | | -| `Undefined` 関数は、常に False を返します。 変数は常に定義されています。 | | -| メソッドの "プリエンプティブプロセスで実行可能" プロパティにチェックを入れていた場合、コードは他のスレッドアンセーフなコマンドやメソッドを呼び出してはいけません。 | プリエンプティブプロセスプロパティは無視されます。 | -| 特定のループの場合、割り込みを可能にするには `IDLE` コマンドが必要です。 | いつでも割り込み可能です。 | +| Compiled | Interpreted | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | +| You cannot have a method with the same name as a variable. | No error is generated, but priority is given to the method | +| All variables must by typed, either through a compiler directive (ex: `C_LONGINT`), or by the compiler at compilation time. | Variables can be typed on-the-fly (not recommended) | +| You cannot change the data type of any variable or array. | Changing the data type of a variable or an array is possible (not recommended) | +| You cannot change a one-dimensional array to a two-dimensional array, or change a two-dimensional array to a one-dimensional array. | Possible | +| Although the compiler will type the variable for you, you should specify the data type of a variable by using compiler directives where the data type is ambiguous, such as in a form. | | +| The `Undefined` function always returns False for variables. Variables are always defined. | | +| If you have checked the "Can be run in preemptive processes" property for the method, the code must not call any thread-unsafe commands or other thread-unsafe methods. | Preemptive process properties are ignored | +| The `IDLE` command is necessary to call 4D in specific loops | It is always possible to interrupt 4D | -## インタープリターでコンパイラー指示子を使用する場合 +## Using Compiler Directives with the Interpreter -コンパイルしないアプリケーションには、コンパイラー命令は必須ではありません。 インタープリターは、各ステートメントにおける変数の使い方に準じて自動的に変数の型を設定し、アプリケーションプロジェクト内の変数の型を変えることができます。 +Compiler directives are not required for uncompiled applications. The interpreter automatically types each variable according to how it is used in each statement, and a variable can be freely retyped throughout the application project. -インタープリターがこのように柔軟に対応するので、インタープリターモードとコンパイル済みモードでは、アプリケーションの動作が異なることがあります。 +Because of this flexibility, it is possible that an application can perform differently in interpreted and compiled modes. -たとえば、あるところでは次のように記述して: +For example, if you write: ```4d C_LONGINT(MyInt) ``` -プロジェクトの他の場所では、下記のように記述した場合: +and elsewhere in the project, you write: ```4d MyInt:=3.1416 ``` -この例では、コンパイラー指示子が代入ステートメントより *先に* 解釈されれば、インタープリターでもコンパイル後でも `Myint` には同じ値 (3) が代入されます。 +In this example, `MyInt` is assigned the same value (3) in both the interpreted and compiled modes, provided the compiler directive is interpreted *prior* to the assignment statement. -4D のインタープリターは、コンパイラー指示子を使用して変数の型を定義します。 コード内でコンパイラー指示子が検出されると、インタープリターはそれに従って変数の型を定義します。 それ以降のステートメントで間違った値を代入しようとすると (たとえば、数値変数に文字を割り当てるなど)、代入はおこなわれず、エラーが生成されます。 +The 4D interpreter uses compiler directives to type variables. When the interpreter encounters a compiler directive, it types the variable according to the directive. If a subsequent statement tries to assign an incorrect value (e.g., assigning an alphanumeric value to a numeric variable) the assignment will not take place and will generate an error. -コンパイラーにとっては、この2つのステートメントのどちらが先に表示されても問題ではありません。はじめにプロジェクト全体を調べてコンパイラー指示子を探すからです。 しかし、インタープリターは系統立てて処理するわけではなく、 実行される順にステートメントを解釈します。 ユーザーが何をおこなうかによって、この順序は当然異なります。 したがって、常にコンパイラー指示子によって型定義してから変数を使用するようプロジェクトを計画することが肝心です。 +The order in which the two statements appear is irrelevant to the compiler, because it first scans the entire project for compiler directives. The interpreter, however, is not systematic. It interprets statements in the order in which they are executed. That order, of course, can change from session to session, depending on what the user does. For this reason, it is important to design your project so that your compiler directives are executed prior to any statements containing declared variables. -## ポインターの使用で型の矛盾を避ける +## Using pointers to avoid retyping -変数の型は変更することができません。 しかし、ポインターを活用して異なるデータ型の変数を参照することはできます。 たとえば、次のコードはインタープリターおよびコンパイル済みモードの両方で動作します: +A variable cannot be retyped. However, it is possible to use a pointer to refer to variables of different data types. For example, the following code is allowed in both interpreted and compiled modes: ```4d C_POINTER($p) @@ -66,19 +66,19 @@ C_LONGINT($age) $name:="Smith" $age:=50 -$p:=->$name // テキストへのポインター -$p->:="Wesson" // テキストの代入 +$p:=->$name //text target for the pointer +$p->:="Wesson" //assigns a text value $p:=->$age -// 数値へのポインターに変更 -$p->:=55 // 数値の代入 +// new target of different type for the pointer +$p->:=55 //assigns a number value ``` -値の型に関わらず、その値の長さ (文字の数) を返す関数を考えてみましょう: +Imagine a function that returns the length (number of charaters) of values that can be of any type. ```4d - // Calc_Length 文字の数を返す関数 - // $1 = 数値、テキスト、時間、ブール型の変数へのポインター + // Calc_Length (how many characters) + // $1 = pointer to flexible variable type, numeric, text, time, boolean C_POINTER($1) C_TEXT($result) @@ -87,7 +87,7 @@ $result:=String($1->) $0:=Length($result) ``` -この関数は次のように使えます: +Then this method can be called: ```4d $var1:="my text" $var2:=5.3 @@ -96,5 +96,5 @@ $var4:=True $vLength:=Calc_Length(->$var1)+Calc_Length(->$var2)+Calc_Length (->$var3)+Calc_Length(->$var4) -ALERT("長さの合計: "+String($vLength)) +ALERT("Total length: "+String($vLength)) ``` From bafb01e10b8f2c317e7a48fdc34c62f98d444f44 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:58:37 +0100 Subject: [PATCH 241/311] New translations plug-ins.md (Japanese) --- .../translated_docs/ja/Concepts/plug-ins.md | 66 +++++++++---------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/website/translated_docs/ja/Concepts/plug-ins.md b/website/translated_docs/ja/Concepts/plug-ins.md index 4b01e8f9158c64..0e62435acb5e9f 100644 --- a/website/translated_docs/ja/Concepts/plug-ins.md +++ b/website/translated_docs/ja/Concepts/plug-ins.md @@ -1,59 +1,59 @@ --- id: plug-ins -title: プラグイン +title: Plug-ins --- -4Dアプリケーションの開発を進めていくと、最初は気付かなかった数多くの機能を発見することでしょう。 それだけでなく、**プラグイン** を4D開発環境に追加することで、標準の4Dの機能を高めることもできます。 +As you develop a 4D application, you will discover many capabilities that you did not notice when you started. You can even augment the standard version of 4D by adding **plug-ins** to your 4D development environment. -## プラグインの必要性 +## Why the need for a plug-in? -オブジェクトやレコードの操作、ユーザーインターフェースの実装のため、4D は数百のビルトインコマンドを提供していますが、さらに特殊な機能 (プラットフォーム依存のものなど) が必要になることがあります。たとえば、Windows上のODBC 、macOS上のアップルサービス、特殊な統計機能、ソーシャルネットワークログイン、決済用のプラットフォーム、ネットワークを介したファイルアクセス、特殊なユーザーインターフェース、独自のピクチャー構造などです。 +Although 4D provides hundred of built-in methods used to manipulate objects, records and implement user interface, some special use or feature (sometimes platform dependant) may be needed: one may need ODBC under Windows, another may need Apple services under macOS, while yet another may want to implement specific statistics tools, social network login, payment platform, file access over the network, a special user interface, or a private picture structure. -これらの機能をすべて、macOS と Windows の両方で 4D コマンドによって提供しようとした場合、コマンド数は数千に膨れ上がると同時に、ほとんどのユーザーはそれらの追加機能を必要としないでしょう。 また、そのような万能ツールを作り上げたとしても、その結果として 4D 環境は複雑化することになり、4D の学習が困難になるだけでなく、成果が得られるまで時間を要するようになるでしょう。 +It is obvious that covering all areas of both the macOS and Windows operating systems by way of 4D commands would certainly lead to a product with thousands of commands, and at the same time, most users would have no need for such a large set of capabilities. Also, creating such an all-encompassing tool would make the 4D environment incredibly complex and would take most users months of study before useful results could be expected. -4D 環境のモジュール性により、基礎的なアプリケーションの作成はもちろんのこと、非常に複雑なシステムの開発も可能です。 4D プラグインのアーキテクチャーによって、4D 環境はあらゆるアプリケーションとユーザーに対して開かれています。 4D プラグインによってアプリケーションやユーザーの生産性を飛躍させることができます。 +The modular nature of the 4D environment allows the creation of basic applications but does not preclude the development of highly complex systems. The 4D Plug-in architecture opens the 4D environment to any type of application or user. 4D Plug-ins multiply that application or user's power and productivity. -## プラグインとは何か +## What is a plug-in and what can it do? -プラグインとは、4D 起動時にロードされるコードのことです。 プラグインは、4D に機能を追加します。 +A plug-in is a piece of code that 4D launches at start up. It adds functionality to 4D and thus increases its capacity. -通常、プラグインは: -- 4D ができないことを処理します (プラットフォーム特有の技術など) -- 4D だけでは難しいことを実現します -- プラグインのエントリーポイントの形でのみ提供されている機能を提供します +Usually, a plug-in does things that: +- 4D cannot do (ie, specific platform technology), +- will be very hard to write just using 4D, +- are only available as Plug-in Entrypoint -プラグインには通常複数のルーチンが含まれています。 プラグインは外部エリアを操作でき、外部プロセスを実行できます。 +A plug-in usually contains a set of routines given to the 4D Developer. It can handle an External Area and run an external process. -- **プラグインルーチン** とは、ネイティブ言語 (通常は C あるいは C++) で書かれたルーチンで、なんらかの処理を実行します。 -- **外部エリア** とはフォームの一部で、あらゆるものを表示することができ、必要に応じてユーザー操作を受け付けることができます。 -- **外部プロセス** とは、通常はループ形式で単独実行されるプロセスのことです。 プロセスのコードはすべてプラグインに属しており、4D はプロセスに対してイベントを送受信するだけです。 +- A **plug-in routine** is a routine written in native language (usually C or C++) that causes an action. +- An **external area** is a part of a form that can display almost everything and interact with the user when necessary. +- An **external process** is a process that runs alone, usually in a loop, doing almost everything it wants. All process code belongs to the plug-in, 4D is simply present to receive/send events to the process. -### 重要な注記 +### Important note -プラグインは、小さな処理をおこなう一つのルーチンを実行するだけの、とても簡単なものでありえます。また、百以上のルーチンとエリアを扱うような、非常に複雑なものでもありえます。 プラグインの機能に制限はありませんが、プラグインの開発にあたっては、プラグインがあくまで従たるコードであることに留意が必要です。 プラグインは 4D 内で実行されます。 プラグインは独立したアプリケーションではなく、4D の一部です。 プラグインは、他のプラグインや 4D 自身と CPU 時間とメモリを共有します。したがって、プラグインのコードは、必要なリソースだけを使用する控えめなコードであるべきです。 たとえば、非常に長いループ処理においては (その重要性が絶対的な優先権を要求しないかぎり)、プラグインは `PA_Yield()` を呼び出して、4D のスケジューラーにも処理時間を割り当てるべきです。 +A plug-in can be very simple, with just one routine performing a very small task, or it can be very complex, involving hundred of routines and areas. There is virtually no limit to what a plug-in can do, however every plug-in developer should remember that a plug-in is a "sample" piece of code. It is the plug-in that runs within 4D, not the opposite. As a piece of code, it is the host of 4D; it is not a stand-alone application. It shares CPU time and memory with 4D and other plug-ins, thus, it should be a polite code, using just what is necessary to run. For example, in long loops, a plug-in should call `PA_Yield()` to give time to the 4D scheduler unless its task is critical for both it and the application. -## プラグインの作り方 +## How to create a plug-in? -4D は GitHub 上に、4D Plugin API と the 4D Plugin Wizard を含んだオープンソースの [**プラグイン SDK**](https://github.com/4d/4D-Plugin-SDK) (英語) を提供しています: +4D provides on GitHub an open-source [**plug-in SDK**](https://github.com/4d/4D-Plugin-SDK), containing the 4D Plugin API and the 4D Plugin Wizard: -- [**4D Plugin API**](https://github.com/4d/4D-Plugin-SDK/blob/master/4D%20Plugin%20API) は C で書かれており、プラグインの開発を助けるための機能を400以上追加します。 4D Plug-in API の機能は、4D とプラグイン間の通信を管理します。 -- [**4D Plugin Wizard**](https://github.com/4d/4D-Plugin-SDK/blob/master/4D%20Plugin%20Wizard) は、4D プラグインの開発を簡略化するために不可欠なツールです。 プラグインのロードや、プラグインとの通信に 4D が必要とするコードがツールによって提供されることで、デベロッパーはプラグインの根幹をなすコードに集中することができます。 +- the [**4D Plugin API**](https://github.com/4d/4D-Plugin-SDK/blob/master/4D%20Plugin%20API), written in C, adds more than 400 functions that help you to easily create your own plug-ins to add new functionnalities to your 4D application. 4D Plug-in API functions manage all the interactions between the 4D application and your plug-in. +- The [**4D Plugin Wizard**](https://github.com/4d/4D-Plugin-SDK/blob/master/4D%20Plugin%20Wizard) is an essential tool that simplifies the task of developing 4D plug-ins. It writes the code 4D needs to correctly load and interact with a plug-in, allowing you to concentrate on your own code. -## インストールの手順 +## How to install a plug-in? -プラグインやコンポーネントは 4D環境の適切なフォルダーにコピーすることでインストールされます。 +You install plug-ins in the 4D environment by copying their files into the appropriate folder. -Windows および macOS用の 4Dプラグインは、“PluginName.bundle” フォルダー (macOSではパッケージと呼ばれます) に格納されます。 このフォルダーの内部構造により、4D Server環境において、接続するクライアントのOSに応じたプラグインがロード/配信され、クライアント上で実行されます。 プラグインをインストールするには、この “PluginName.bundle” フォルダー (パッケージ) を**Plugins** フォルダーに配置します。 +“PluginName.bundle” folders contain both Windows and macOS versions of 4D plug-ins. Their specific internal architecture lets 4D Server load the appropriate version according to the platform where the client machine will be run. To install a plug-in in your environment, you just need to put the “PluginName.bundle” folder or package concerned into the desired **Plugins** folder. -Plugins フォルダーは 2つの異なる場所に配置できます: +You can put the Plugins folder in two different places: -- 4D実行アプリケーションレベル: - - Windows: .exeファイルと同階層 - - macOS: アプリケーションパッケージ内の Contentsフォルダーの直下。 この場合、このアプリケーションで開かれるすべてのプロジェクトからプラグインを利用できます。 -- Project フォルダーと同階層: この場合、プラグインは当該プロジェクトでのみ利用可能です。 +- At the level of the 4D executable application, i.e.: + - Under Windows: next to the .exe file + - Under macOS: at the first level of the Contents folder inside the application package. In this case, plug-ins are available in every project opened by this application. +- At the same level as the Project folder. In this case, plug-ins are only available in this particular project. -場所の選択はプラグインをどのように使用するかによって決定します。 +The choice of location depends on how you want to use the plug-in. -同じプラグインが両方の場所にインストールされている場合、4Dはストラクチャーファイルと同階層にインストールされたもののみをロードします。 コンパイルされ、4D Volume Desktop がマージされたアプリケーションでは、同じプラグインのインスタンスが複数存在する場合、アプリケーションを開くことができません。 +If the same plug-in is placed in both locations, 4D will only load the one located next to the structure. In an application that is compiled and merged using 4D Volume Desktop, if there are several instances of the same plug-in present, this will prevent the application from opening. -プラグインは 4D 起動時にロードされるので、これらをインストールする際には 4Dアプリケーションを終了する必要があります。 インストールが終了したら 4D でプロジェクトを開きます。 プラグインの利用に特別なライセンスが必要な場合、プラグインはロードされますが、ライセンスをインストールするまで使用することはできません。 \ No newline at end of file +Plug-ins are loaded by 4D when the application is launched so you will need to quit your 4D application before installing them. Then open your project with 4D. If any plug-in requires a specific license for use, it will be loaded but not available for use. \ No newline at end of file From 84b6b6ca0656158b84408da4177c51c15178c1d4 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:58:39 +0100 Subject: [PATCH 242/311] New translations methods.md (Japanese) --- .../translated_docs/ja/Concepts/methods.md | 172 +++++++++--------- 1 file changed, 86 insertions(+), 86 deletions(-) diff --git a/website/translated_docs/ja/Concepts/methods.md b/website/translated_docs/ja/Concepts/methods.md index abd0b252757700..3856cf2de4b042 100644 --- a/website/translated_docs/ja/Concepts/methods.md +++ b/website/translated_docs/ja/Concepts/methods.md @@ -4,143 +4,143 @@ title: Methods --- -メソッドとは、1つ以上の動作を実行するコードのことです。 メソッドは、一つ以上のステートメントで構成されます。ステートメントとは、メソッドの1行のことで1つの命令を実行します。 ステートメントは単純な場合もあれば、複雑な場合もあります。 各ステートメントは常に 1行ですが最大 32,000文字まで使用することができます。 +A method is basically a piece of code that executes one or several actions. A method is composed of statements; each statement consists of one line in the method. A statement performs an action, and may be simple or complex. Although a statement is always one line, that one line can be as long as needed (up to 32,000 characters, which is probably enough for most tasks). -メソッドは最大 2GBのテキストまたは、32000行まで記述できます。 +The maximum size of a method is limited to 2 GB of text or 32,000 lines of code. -## メソッドタイプ +## Method Types -4D ランゲージにおいて、数種類のメソッドが存在します。 その呼び出し方によって、メソッドは区別されます: +In the 4D Language, there are several categories of methods. The category depends on how they can be called: -| タイプ | 自動呼び出しのコンテキスト | 引数の受け取り | 説明 | -| ------------------------ | --------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------------------ | -| **プロジェクトメソッド** | 呼び出しに応じて ([プロジェクトメソッドの呼び出し](#calling-project-methods) 参照) | ◯ | 任意のアクションを実行するためのコードです。 作成されたプロジェクトメソッドは、そのプロジェクトのランゲージの一部となります。 | -| **オブジェクト (ウィジェット) メソッド** | メソッドが設定されたフォームオブジェクトに関連したイベント発生時に | × | フォームオブジェクト (ウィジェットとも呼びます) のプロパティです。 | -| **フォームメソッド** | メソッドが設定されたフォームに関連したイベント発生時に | × | フォームのプロパティです。 フォームメソッドを使用してデータとオブジェクトを管理することができます。ただし、これら目的には、オブジェクトメソッドを使用する方が通常は簡単であり、より効果的です。 | -| **トリガー** (別名 *テーブルメソッド*) | テーブルのレコード操作 (追加・削除・修正) の度に | × | テーブルのプロパティです。 トリガーは、データベースのレコードに対して「不正な」操作がおこなわれることを防ぎます。 | -| **データベースメソッド** | 作業セッションのイベント発生時に | ○ (既定) | 4D には 16のデータベースメソッドがあります。 詳細はデータベースメソッドの項を参照ください。 | +| Type | Calling context | Accepts parameters | Description | +| -------------------------------- | ----------------------------------------------------------------------------------------------------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Project method** | On demand, when the project method name is called (see [Calling project methods](#calling-project-methods)) | Yes | Can contain any code to execute any custom actions. Once a project method is created, it becomes part of the language of the project. | +| **Object (widget) method** | Automatic, when an event involves the object to which the method is attached | No | Property of a form object (also called widget) | +| **Form method** | Automatic, when an event involves the form to which the method is attached | No | Property of a form. You can use a form method to manage data and objects, but it is generally simpler and more efficient to use an object method for these purposes. | +| **Trigger** (aka *Table method*) | Automatic, each time that you manipulate the records of a table (Add, Delete and Modify) | No | Property of a table. Triggers are methods that can prevent “illegal” operations with the records of your database. | +| **Database method** | Automatic, when a working session event occurs | Yes (predefined) | There are 16 database methods in 4D. See Database methods section | -> 4D ランゲージは **クラス関数** もサポートしています。クラス関数は、オブジェクトインスタンスのコンテキストにおいて呼び出されます。 クラス関数にはビルトインのものと (*例: * `collection.orderBy()` や `entity.save()`)、[開発者によって作成されるもの](classes.md#function)があります。 +> The 4D Language also supports **Class functions**, that can be called in the context of an object instance. Class functions can be built-in (*e.g.* `collection.orderBy()` or `entity.save()`), or [created by the 4D developer](classes.md#class-function). -## プロジェクトメソッドの呼び出し +## Calling Project Methods -その実行方法や使用方法に応じて、プロジェクトメソッドは次のような役割を果たします: +A project method can have one of the following roles, depending on how it is executed and used: -- サブルーチン -- オブジェクトフォーミュラ -- メニューメソッド -- プロセスメソッド -- イベントまたはエラー処理メソッド +- Subroutine +- Object formula +- Menu method +- Process method +- Event or Error catching method -### サブルーチン +### Subroutines -サブルーチンは、処理の下請け的なプロジェクトメソッドです。 他のメソッドから呼ばれて、要求された処理を実行します。 関数は、呼び出し元のメソッドに値を返すサブルーチンのことです。 +A subroutine is a project method that can be thought of as a servant. It performs those tasks that other methods request it to perform. A function is a subroutine that returns a value to the method that called it. -プロジェクトメソッドを作成すると、それは同データベースのランゲージの一部となります。 プロジェクトメソッドは、4Dのビルトインコマンドと同様に、ほかのメソッド (プロジェクトメソッドやオブジェクトメソッド) から呼び出すことができます。 このように使用されるプロジェクトメソッドをサブルーチンと呼びます。 +When you create a project method, it becomes part of the language of the project in which you create it. You can then call the project method from another method (project method, object method...) in the same way that you call 4D’s built-in commands. A project method used in this way is called a subroutine. -サブルーチンは、以下のような目的で使います: +You use subroutines to: -- 重複コードの削減 -- メソッドの役割の明確化 -- メソッド改変の容易化 -- コードのモジュール化 +- Reduce repetitive coding +- Clarify your methods +- Facilitate changes to your methods +- Modularize your code -たとえば、顧客データベースがあるとします。 プロジェクトをカスタマイズしていくうちに、顧客を検索してレコードを修正するという一連の作業を繰り返しおこなっていることに気づいたとします。 そのコーディングは以下のようになっています: +For example, let’s say you have a project of customers. As you customize the project, you find that there are some tasks that you perform repeatedly, such as finding a customer and modifying his or her record. The code to do this might look like this: ```4d - // 顧客を検索します + // Look for a customer QUERY BY EXAMPLE([Customers]) - // 入力フォームを選択します + // Select the input form FORM SET INPUT([Customers];"Data Entry") - // 顧客レコードを修正します + // Modify the customer's record MODIFY RECORD([Customers]) ``` -サブルーチンを使用しなければ、顧客レコード修正のたびにコードを作成しなければなりません。 プロジェクトの 10箇所で同じ処理が必要であれば、同じコーディングを 10回も書かねばなりません。 サブルーチンを使用すれば 1回コーディングするだけですみます。 これがコーディングの重複を減らすというサブルーチンの第一の利点です。 +If you do not use subroutines, you will have to write the code each time you want to modify a customer’s record. If there are ten places in your project where you need to do this, you will have to write the code ten times. If you use subroutines, you will only have to write it once. This is the first advantage of subroutines—to reduce the amount of code. -先ほど説明したコードが `MODIFY_CUSTOMER` と呼ばれるメソッドであるとすれば、他のメソッド内でそのメソッド名を使うことで実行できます。 たとえば、顧客のレコードを修正し、それからレコードをプリントするために、以下のようなメソッドを書くことができます: +If the previously described code was a method called `MODIFY_CUSTOMER`, you would execute it simply by using the name of the method in another method. For example, to modify a customer’s record and then print the record, you would write this method: ```4d MODIFY_CUSTOMER PRINT SELECTION([Customers]) ``` -この機能はメソッドを劇的にに簡素化します。 さきほどの例で言えば、`MODIFY_CUSTOMER` メソッドがどのように動作するかは知る必要がなく、何をおこなうかだけ知っていればよいのです。 これはメソッドをサブルーチン化することの2番目の理由、役割の明確化です。 このように、作成されたメソッドは 4Dランゲージを拡張します。 +This capability simplifies your methods dramatically. In the example, you do not need to know how the `MODIFY_CUSTOMER` method works, just what it does. This is the second reason for using subroutines—to clarify your methods. In this way, your methods become extensions to the 4D language. -このプロジェクトの例で顧客の検索方法を変える場合、10箇所ではなく、たった1つのメソッドを変更するだけですみます。 これがサブルーチンを使うもう一つの理由、改変の容易化です。 +If you need to change your method of finding customers in this example project, you will need to change only one method, not ten. This is the next reason to use subroutines—to facilitate changes to your methods. -また、サブルーチンの利用はコードをモジュール化します。 これはコードをモジュール (サブルーチン) に分割することを意味し、それぞれは論理的な処理を実行します。 小切手振り出し口座のプロジェクトから、以下のコードを見てみましょう: +Using subroutines, you make your code modular. This simply means dividing your code into modules (subroutines), each of which performs a logical task. Consider the following code from a checking account project: ```4d - FIND_CLEARED_CHECKS // 決済された小切手の検索 - RECONCILE_ACCOUNT // 口座の照合 - PRINT_CHECK_BOOK_REPORT // レポートの印刷 + FIND_CLEARED_CHECKS //Find the cleared checks + RECONCILE_ACCOUNT //Reconcile the account + PRINT_CHECK_BOOK_REPORT //Print a checkbook report ``` -プロジェクトの詳細を知らない人でも、このプログラムが何をしているかはわかります。 各サブルーチンの処理手順を知る必要はありません。 各サブルーチンは長く、複雑な処理で構成されていることもありますが、それらが何を実行するのかだけを知っていれば十分なのです。 プログラムを論理的な処理単位やモジュールにできるだけ分割することをお勧めします。 +Even for someone who doesn’t know the project, it is clear what this code does. It is not necessary to examine each subroutine. Each subroutine might be many lines long and perform some complex operations, but here it is only important that it performs its task. We recommend that you divide your code into logical tasks, or modules, whenever possible. -### オブジェクトフォーミュラ +### Object formulas -プロジェクトメソッドは、**フォーミュラ** オブジェクトにカプセル化して、オブジェクトから呼び出すことができます。 +You can encapsulate your project methods in **formula** objects and call them from your objects. -`Formula` または `Formula from string` コマンドを使用すると、オブジェクトプロパティに格納可能な、ネイティブなフォーミュラオブジェクトを作成することができます: つまり、カスタムなオブジェクトメソッドを実装することが可能です。 +The `Formula` or `Formula from string` commands allow you to create native formula objects that you can encapsulate in object properties. It allows you to implement custom object methods. -オブジェクトプロパティに保存されているメソッドを実行するには、プロパティ名のあとに **( )** をつけます。 たとえば: +To execute a method stored in an object property, use the **( )** operator after the property name. For example: ```4d -// myAlert プロジェクトメソッド +//myAlert ALERT("Hello world!") ``` -この `myAlert` プロジェクトメソッドを任意のオブジェクトに格納し、呼び出すことができます: +Then `myAlert` can be encapsulated in any object and called: ```4d C_OBJECT($o) $o:=New object("custom_Alert";Formula(myAlert)) -$o.custom_Alert() // "Hello world!" と表示します +$o.custom_Alert() //displays "Hello world!" ``` -大カッコを使用したシンタックスもサポートされます: +Syntax with brackets is also supported: ```4d -$o["custom_Alert"]() // "Hello world!" と表示します +$o["custom_Alert"]() //displays "Hello world!" ``` -4D プロジェクトメソッドのように、$1, $2, .... を使用して呼び出すことで、フォーミュラに [引数を渡す](Concepts/parameters.md) こともできます: +You can also [pass parameters](Concepts/parameters.md) to your formula when you call it by using $1, $2… just like with 4D project methods: ```4d -//fullName メソッド +//fullName method C_TEXT($0;$1;$2) $0:=$1+" "+$2 ``` -`fullName` メソッドをオブジェクトに格納し、呼び出します: +You can encapsulate `fullName` in an object: ```4d C_OBJECT($o) $o:=New object("full_name";Formula(fullName)) $result:=$o.full_name("John";"Smith") //$result = "John Smith" -// $result:=fullName("param1";"param2") と同義です +// equivalent to $result:=fullName("param1";"param2") ``` -`This` 関数と組み合わせることで、オブジェクトメソッドを利用した汎用的なコードを書くことができます。 たとえば: +Combined with the `This`function, such object methods allow writing powerful generic code. For example: ```4d -//fullName2 メソッド +//fullName2 method C_TEXT($0) $0:=This.firstName+" "+This.lastName ``` -このメソッドをオブジェクトに格納すると、オブジェクトの新しい計算属性のように使えます: +Then the method acts like a new, calculated attribute that can be added to other attributes: ```4d C_OBJECT($o) $o:=New object("firstName";"Jim";"lastName";"Wesson") -$o.fullName:=Formula(fullName2) // メソッドをオブジェクトに追加します +$o.fullName:=Formula(fullName2) //add the method $result:=$o.fullName() //$result = "Jim Wesson" @@ -148,45 +148,45 @@ $result:=$o.fullName() -たとえ引数を受け取らなかったとしても、オブジェクトメソッドを実行するためにはカッコ () をつけて呼び出す必要があるという点に注意してください。 オブジェクトプロパティのみを呼び出した場合、フォーミュラへの新しい参照が返されます (そしてフォーミュラは実行はされません): +Note that, even if it does not have parameters, an object method to be executed must be called with ( ) parenthesis. Calling only the object property will return a new reference to the formula (and will not execute it): ```4d -$o:=$f.message // $o にはフォーミュラオブジェクトが返されます +$o:=$f.message //returns the formula object in $o ``` -### メニューメソッド -メニューメソッドは、カスタムメニューから呼び出されるプロジェクトメソッドです。 メニューエディターまたは "メニュー" テーマのコマンドを使用して、メニューにメソッドを割り当てます。 メニューが選択されると、それに対応するメニューメソッドが実行されます。 特定の処理を実行するメニューメソッドを割り当てたカスタムメニューを作成することで、デスクトップアプリケーションのユーザーインターフェースをカスタマイズすることができます。 +### Menu Methods +A menu method is invoked when you select the custom menu command to which it is attached. You assign the method to the menu command using the Menu editor or a command of the "Menus" theme. The method executes when the menu command is chosen. By creating custom menus with menu methods that perform specific actions, you create custom interfaces for your desktop applications. -メニューメソッドにより、単一または複数の処理を実行することができます。 たとえば、データ入力のメニューに、以下の2つの処理を実行するメソッドを割り当てられます。まず適切な入力フォームを表示し、次にユーザーがキャンセルするまでの間 `ADD RECORD` コマンドによるデータ入力を繰り返します。 +Custom menu commands can cause one or more activities to take place. For example, a menu command for entering records might call a method that performs two tasks: displaying the appropriate input form, and calling the `ADD RECORD` command until the user cancels the data entry activity. -連続した処理の自動化は、プログラミング言語の強力な機能の 1つです。 カスタムメニューを使用することで処理を自動化することができ、アプリケーションのユーザーにより多くのガイダンスを提供することができます。 +Automating sequences of activities is a very powerful capability of the programming language. Using custom menus, you can automate task sequences and thus provide more guidance to users of the application. -### プロセスメソッド +### Process Methods -**プロセスメソッド** とは、プロセスの開始時に呼び出されるプロジェクトメソッドのことです。 ワーカープロセスの場合を除いて、プロセスはプロセスメソッドが実行されている間だけ存続します。 メニューに属するメニューメソッドのプロパティとして *新規プロセス開始* をチェックしている場合、そのメニューメソッドは新規プロセスのプロセスメソッドでもあります。 +A **process method** is a project method that is called when a process is started. The process lasts only as long as the process method continues to execute, except if it is a Worker process. Note that a menu method attached to a menu command with *Start a New Process* property is also the process method for the newly started process. -### イベント・エラー処理メソッド -**イベント処理メソッド** は、イベントを処理するプロセスメソッドとして、分離されたプロセス内で実行されます。 通常、開発者はイベント管理の大部分を 4Dに任せます。 たとえば、データ入力中にキーストロークやクリックを検出した 4Dは、正しいオブジェクトとフォームメソッドを呼び出します。このため開発者は、これらのメソッド内でイベントに対し適切に応答できるのです。 詳細については `ON EVENT CALL` コマンドの説明を参照してください。 +### Event and Error catching Methods +An **event catching method** runs in a separate process as the process method for catching events. Usually, you let 4D do most of the event handling for you. For example, during data entry, 4D detects keystrokes and clicks, then calls the correct object and form methods so you can respond appropriately to the events from within these methods. For more information, see the description of the command `ON EVENT CALL`. -**エラー処理メソッド** は、割り込みを実行するプロジェクトメソッドです。 エラーや例外が起こる度に、エラー処理メソッドは自身がインストールされたプロセス内で実行されます。 詳細については `ON ERR CALL` コマンドの説明を参照してください。 +An **error catching method** is an interrupt-based project method. Each time an error or an exception occurs, it executes within the process in which it was installed. For more information, see the description of the command `ON ERR CALL`. -## プロジェクトメソッドの再帰呼び出し +## Recursive Project Methods -プロジェクトメソッドは、自分自身を呼び出すことができます。 たとえば: +Project methods can call themselves. For example: -- メソッドAがメソッドBを呼び出し、メソッドBはメソッドAを呼び出します。 -- メソッドAは自身を呼び出すことができます。 +- The method A may call the method B which may call A, so A will call B again and so on. +- A method can call itself. -これは再帰呼び出しと呼ばれています。 4D ランゲージは再帰呼び出しを完全にサポートしています。 +This is called recursion. The 4D language fully supports recursion. -次に例を示します。 以下のフィールドから成る `[Friends and Relatives]` テーブルがあります: +Here is an example. Let’s say you have a `[Friends and Relatives]` table composed of this extremely simplified set of fields: - `[Friends and Relatives]Name` - `[Friends and Relatives]ChildrensName` -この例題では、フィールドの値は重複しない、つまり同じ名前の人間はいないとします。 名前を指定することで、以下のような文を作成します: “A friend of mine, John who is the child of Paul who is the child of Jane who is the child of Robert who is the child of Eleanor, does this for a living!”: +For this example, we assume the values in the fields are unique (there are no two persons with the same name). Given a name, you want to build the sentence “A friend of mine, John who is the child of Paul who is the child of Jane who is the child of Robert who is the child of Eleanor, does this for a living!”: -1. この文を以下のように作成できます: +1. You can build the sentence in this way: ```4d $vsName:=Request("Enter the name:";"John") @@ -208,7 +208,7 @@ $o:=$f.message // $o にはフォーミュラオブジェクトが返されま End if ``` -2. 以下の方法でも作成できます: +2. You can also build it this way: ```4d $vsName:=Request("Enter the name:";"John") @@ -220,10 +220,10 @@ $o:=$f.message // $o にはフォーミュラオブジェクトが返されま End if ``` -再帰関数 `Genealogy of` は以下の通りです: +with the recursive function `Genealogy of` listed here: ```4d - ` Genealogy of プロジェクトメソッド + ` Genealogy of project method ` Genealogy of ( String ) -> Text ` Genealogy of ( Name ) -> Part of sentence @@ -234,15 +234,15 @@ $o:=$f.message // $o にはフォーミュラオブジェクトが返されま End if ``` -`Genealogy of` メソッドが自分自身を呼び出していることに注目してください。 +Note the `Genealogy of` method which calls itself. -最初に挙げた方法は **反復性のアルゴリズム** です。 2番目に挙げた方法は **再帰呼び出しのアルゴリズム** です。 +The first way is an **iterative algorithm**. The second way is a **recursive algorithm**. -前述の例題のようなコードを実装する場合、反復性や再帰呼び出しを使用してメソッドを書くことができるということに留意してください。 再帰呼び出しは一般的に、より明瞭で読みやすく、維持しやすいコードを提供します。ただし、この使用は必須ではありません。 +When implementing code for cases like the previous example, it is important to note that you can always write methods using iteration or recursion. Typically, recursion provides more concise, readable, and maintainable code, but using it is not mandatory. -4D内での再帰呼び出しの代表的な使用方法は以下のとおりです: +Some typical uses of recursion in 4D are: -- 例題と同じく、互いに関連するテーブル内でのレコードの取り扱い。 -- `FOLDER LIST` と `DOCUMENT LIST` コマンドを使用して、ディスク上にあるドキュメントとフォルダーをブラウズする。 フォルダーにはフォルダーとドキュメントが含まれており、サブフォルダーはまたフォルダーとドキュメントを含むことができます。 +- Treating records within tables that relate to each other in the same way as in the example. +- Browsing documents and folders on your disk, using the commands `FOLDER LIST` and `DOCUMENT LIST`. A folder may contain folders and documents, the subfolders can themselves contain folders and documents, and so on. -**重要:** 再帰呼び出しは、必ずある時点で終了する必要があります。 たとえば、`Genealogy of` メソッドが自身の呼び出しを止めるのは、クエリがレコードを返さないときです。 この条件のテストをしないと、メソッドは際限なく自身を呼び出します。 (メソッド内で使用される引数やローカル変数の蓄積を含む) 再帰呼び出しによって容量が一杯になると、最終的に 4Dは “スタックがいっぱいです” エラーを返します 。 +**Important:** Recursive calls should always end at some point. In the example, the method `Genealogy of` stops calling itself when the query returns no records. Without this condition test, the method would call itself indefinitely; eventually, 4D would return a “Stack Full” error becuase it would no longer have space to “pile up” the calls (as well as parameters and local variables used in the method). From 11d018ca0fc43e7d5901bca06103c5195aa28422 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:58:41 +0100 Subject: [PATCH 243/311] New translations dt_picture.md (Japanese) --- .../translated_docs/ja/Concepts/dt_picture.md | 114 +++++++++--------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/website/translated_docs/ja/Concepts/dt_picture.md b/website/translated_docs/ja/Concepts/dt_picture.md index 221b60b2b5782e..965814ec29924b 100644 --- a/website/translated_docs/ja/Concepts/dt_picture.md +++ b/website/translated_docs/ja/Concepts/dt_picture.md @@ -1,119 +1,119 @@ --- -id: ピクチャー -title: ピクチャー +id: picture +title: Picture --- -ピクチャーのフィールド・変数・式に格納されるデータは、任意の Windows または Macintosh の画像です。 これらの画像には、ペーストボード上に置いたり、4Dコマンドやプラグインコマンド (`READ PICTURE FILE` など) を使用してディスクから読み出すことのできる画像を含みます。 +A Picture field, variable or expression can be any Windows or Macintosh picture. In general, this includes any picture that can be put on the pasteboard or read from the disk using 4D commands such as `READ PICTURE FILE`. -4D は Windows と macOS の両方においてネイティブな API を使用してフィールドや変数のピクチャーをエンコード (書き込み) およびデコード (読み込み) します。 これらの実装は現在デジタルカメラで使用されている RAW フォーマット含め、数多くのネイティブなフォーマットへのアクセスを提供します。 +4D uses native APIs to encode (write) and decode (read) picture fields and variables under both Windows and macOS. These implementations provide access to numerous native formats, including the RAW format, currently used by digital cameras. -* Windows では、4DはWIC (Windows Imaging Component) を使用します。 -* macOS では、4D は ImageIO を使用します。 +* on Windows, 4D uses WIC (Windows Imaging Component). +* on macOS, 4D uses ImageIO. -WIC および ImageIO はピクチャー内のメタデータの書き込みを許可しています。 `SET PICTURE METADATA` および `GET PICTURE METADATA` コマンドを使用することで、それらのメタデータを開発に役立てることができます。 +WIC and ImageIO permit the use of metadata in pictures. Two commands, `SET PICTURE METADATA` and `GET PICTURE METADATA`, let you benefit from metadata in your developments. -## ピクチャー Codec ID +## Picture Codec IDs -4D は多様な [ピクチャーフォーマット](FormEditor/pictures.md#native-formats-supported) をネイティブにサポートします: .jpeg, .png, .svg 等。 +4D supports natively a wide set of [picture formats](FormEditor/pictures.md#native-formats-supported), such as .jpeg, .png, or .svg. -4D が認識するピクチャーフォーマットは `PICTURE CODEC LIST` コマンドからピクチャー Codec IDとして返されます。 これは以下の形式で返されます: +Picture formats recognized by 4D are returned by the `PICTURE CODEC LIST` command as picture Codec IDs. They can be returned in the following forms: -* 拡張子 (例: “.gif”) -* MIME タイプ (例: “image/jpeg”) +* As an extension (for example “.gif”) +* As a MIME type (for example “image/jpeg”) -それぞれのピクチャーフォーマットに対して返される形式は、当該 Codec が OS レベルで記録されている方法に基づきます。 エンコーディング (書き込み) 用コーデックにはライセンスが必要な場合があるため、利用できるコーデックの一覧は、読み込み用と書き込み用で異なる可能性があることに注意してください。 +The form returned for each format will depend on the way the Codec is recorded at the operating system level. Note that the list of available codecs for reading and writing can be different since encoding codecs may require specific licenses. -多くの [4D ピクチャー管理コマンド](https://doc.4d.com/4Dv18/4D/18/Pictures.201-4504337.ja.html) は Codec ID を引数として受けとることができます。 したがって、`PICTURE CODEC LIST` から返されるシステムIDを使用しなければなりません。 4D が認識するピクチャーフォーマットは `PICTURE CODEC LIST` コマンドによって返されます。 +Most of the [4D picture management commands](https://doc.4d.com/4Dv18/4D/18/Pictures.201-4504337.en.html) can receive a Codec ID as a parameter. It is therefore imperative to use the system ID returned by the `PICTURE CODEC LIST` command. Picture formats recognized by 4D are returned by the `PICTURE CODEC LIST` command. -## ピクチャー演算子 +## Picture operators -| 演算子 | シンタックス | 戻り値 | 動作 | -| ------ | ------------------ | ----- | ------------------------------------------------------------------------------------------------------------------ | -| 水平連結 | Pict1 + Pict2 | ピクチャー | Pict1 の右側に Pict2 を追加します | -| 垂直連結 | Pict1 / Pict2 | ピクチャー | Pict1 の下側に Pict2 を追加します | -| 排他的論理和 | Pict1 & Pict2 | ピクチャー | Pict1 の前面に Pict2 を重ねます (Pict2 が前面) `COMBINE PICTURES(pict3;pict1;Superimposition;pict2)` と同じ結果になります。 | -| 包括的論理和 | Pict1 | Pict2 | ピクチャー | Pict1 と Pict2 を重ね、そのマスクした結果を返します (両ピクチャーとも同じサイズである必要があります) `$equal:=Equal pictures(Pict1;Pict2;Pict3)` と同じ結果になります。 | -| 水平移動 | ピクチャー + 数値 | ピクチャー | 指定ピクセル分、ピクチャーを横に移動します。 | -| 垂直移動 | ピクチャー / 数値 | ピクチャー | 指定ピクセル分、ピクチャーを縦に移動します。 | -| サイズ変更 | ピクチャー * 数値 | ピクチャー | 割合によってピクチャーをサイズ変更します。 | -| 水平スケール | ピクチャー *+ 数値 | ピクチャー | 割合によってピクチャー幅をサイズ変更します。 | -| 垂直スケール | ピクチャー *| 数値 | ピクチャー | 割合によってピクチャー高さをサイズ変更します。 | +| Operation | Syntax | Returns | Action | +| ------------------------- | ---------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Horizontal concatenation | Pict1 + Pict2 | Picture | Add Pict2 to the right of Pict1 | +| Vertical concatenation | Pict1 / Pict2 | Picture | Add Pict2 to the bottom of Pict1 | +| Exclusive superimposition | Pict1 & Pict2 | Picture | Superimposes Pict2 on top of Pict1 (Pict2 in foreground). Produces the same result as `COMBINE PICTURES(pict3;pict1;Superimposition;pict2)` | +| Inclusive superimposition | Pict1 | Pict2 | Picture | Superimposes Pict2 on Pict1 and returns resulting mask if both pictures are the same size. Produces the same result as `$equal:=Equal pictures(Pict1;Pict2;Pict3)` | +| Horizontal move | Picture + Number | Picture | Move Picture horizontally Number pixels | +| Vertical move | Picture / Number | Picture | Move Picture vertically Number pixels | +| Resizing | Picture * Number | Picture | Resize Picture by Number ratio | +| Horizontal scaling | Picture *+ Number | Picture | Resize Picture horizontally by Number ratio | +| Vertical scaling | Picture *| Number | Picture | Resize Picture vertically by Number ratio | -**注:** +**Notes :** -- | 演算子を使用するためには、Pict1 と Pict2 が完全に同一のサイズでなければなりません。 二つのピクチャーサイズに違いがある場合、Pict1 | Pict2 は空のピクチャーを生成します。 -- `COMBINE PICTURES` コマンドは、それぞれのソースピクチャーの特性を結果ピクチャーに保持しつつ、ピクチャーの重ね合わせをおこないます。 -- `TRANSFORM PICTURE` コマンドを使って、さらなる画像処理をおこなうことができます。 -- ピクチャー用の比較演算子はありませんが、`Equal picture` コマンドを使って 2つのピクチャーを比較することができます。 +- In order to use the | operator, Pict1 and Pict2 must have exactly the same dimension. If both pictures are a different size, the operation Pict1 | Pict2 produces a blank picture. +- The `COMBINE PICTURES` command can be used to superimpose pictures while keeping the characteristics of each source picture in the resulting picture. +- Additional operations can be performed on pictures using the `TRANSFORM PICTURE` command. +- There is no comparison operators on pictures, however 4D proposes the `Equal picture` command to compare two pictures. -### 例題 +### Examples -水平連結 +Horizontal concatenation ```4d - circle+rectangle // circle の右に rectangle が追加されます。 - rectangle+circle // rectangle の右に circle が追加されます。 + circle+rectangle //Place the rectangle to the right of the circle + rectangle+circle //Place the circle to the right of the rectangle ``` ![](assets/en/Concepts/concatHor.en.png) ![](assets/en/Concepts/concatHor2.en.png) -垂直連結 +Vertical concatenation ```4d - circle/rectangle // circle の下に rectangle が追加されます。 - rectangle/circle // rectangle の下に circle が追加されます。 + circle/rectangle //Place the rectangle under the circle + rectangle/circle //Place the circle under the rectangle ``` ![](assets/en/Concepts/concatVer.en.png) ![](assets/en/Concepts/concatVer2.en.png) -排他的論理和 +Exclusive superimposition ```4d -Pict3:=Pict1 & Pict2 // Pict1 の上に Pict2 を重ねます。 +Pict3:=Pict1 & Pict2 // Superimposes Pict2 on top of Pict1 ``` ![](assets/en/Concepts/superimpoExc.fr.png) -包括的論理和 +Inclusive superimposition ```4d -Pict3:=Pict1|Pict2 // 同じサイズの二つのピクチャーを重ね合わせた上でそのマスクの結果を返します。 +Pict3:=Pict1|Pict2 // Recovers resulting mask from superimposing two pictures of the same size ``` ![](assets/en/Concepts/superimpoInc.fr.png) -水平移動 +Horizontal move ```4d -rectangle+50 // rectangle を右に 50ピクセル移動します。 -rectangle-50 // rectangle を左に 50ピクセル移動します。 +rectangle+50 //Move the rectangle 50 pixels to the right +rectangle-50 //Move the rectangle 50 pixels to the left ``` ![](assets/en/Concepts/hormove.en.png) -垂直移動 +Vertical move ```4d -rectangle/50 // rectangle を下に 50ピクセル移動します。 -rectangle/-20 // rectangle を上に 20ピクセル移動します。 +rectangle/50 //Move the rectangle down by 50 pixels +rectangle/-20 //Move the rectangle up by 20 pixels ``` ![](assets/en/Concepts/vertmove.en.png)![](assets/en/Concepts/vertmove2.en.png) -拡大 +Resize ```4d -rectangle*1.5 // rectangle を 50%拡大します。 -rectangle*0.5 // rectangle を 50%縮小します。 +rectangle*1.5 //The rectangle becomes 50% bigger +rectangle*0.5 //The rectangle becomes 50% smaller ``` ![](assets/en/Concepts/resize.en.png)![](assets/en/Concepts/resisze2.en.png) -水平スケール +Horizontal scaling ```4d -circle*+3 // circle の幅を 3倍に広げます。 -circle*+0.25 // circle の幅を 25%に縮めます。 +circle*+3 //The circle becomes 3 times wider +circle*+0.25 //The circle's width becomes a quarter of what it was ``` ![](assets/en/Concepts/Horscaling.en.png)![](assets/en/Concepts/Horscaling2.en.png) -垂直スケール +Vertical scaling ```4d -circle*|2 // circle の高さを 2倍に伸ばします。 -circle*|0.25 // circle の高さを 25%に縮めます。 +circle*|2 //The circle becomes twice as tall +circle*|0.25 //The circle's height becomes a quarter of what it was ``` ![](assets/en/Concepts/vertscaling.en.png)![](assets/en/Concepts/veticalscaling2.en.png) From 1154e67cc95645daa57ecf7a4b9ee4a7251125da Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:58:43 +0100 Subject: [PATCH 244/311] New translations dt_pointer.md (Japanese) --- .../translated_docs/ja/Concepts/dt_pointer.md | 160 +++++++++--------- 1 file changed, 80 insertions(+), 80 deletions(-) diff --git a/website/translated_docs/ja/Concepts/dt_pointer.md b/website/translated_docs/ja/Concepts/dt_pointer.md index 7115cfe32e8f72..1bf5c2050c7e4b 100644 --- a/website/translated_docs/ja/Concepts/dt_pointer.md +++ b/website/translated_docs/ja/Concepts/dt_pointer.md @@ -1,188 +1,188 @@ --- id: pointer -title: ポインター +title: Pointer --- -ポインターの変数や式は、別の変数 (配列、配列要素を含む) 、テーブル、またはフィールドへの参照です。 ポインタータイプのフィールドは、存在しません。 +A Pointer variable or expression is a reference to another variable (including arrays and array elements), table, field, or object. There is no field of type Pointer. -ポインターは、(プログラミングにおける) データを参照するための高度な方法を提供します。 4D ランゲージ使用時にテーブル・フィールド・変数・配列等にアクセスするには、単純に名前を用います。 ですが、名前を使用しないでデータを参照する、またはアクセスした方が便利な場合もあります。 ポインターを使うとこれが実現できます。 +Pointers provide an advanced way (in programming) to refer to data. When you use the language, you access various objects—in particular, tables, fields, variables, objects, and arrays—by simply using their names. However, it is often useful to refer to these elements and access them without knowing their names. This is what pointers let you do. -ポインターの背景にある概念は、日常生活でもよく使われています。 対象物を正確に知らないまま、それを示すことがあります。 たとえば、友人に対して "登録番号123ABDの車に乗ろう" と言わずに "君の車に乗ろう" と言う場合です。 つまり、"登録番号123ABDの車" を "君の車" で示したわけです。 この場合、"登録番号123ABDの車" はオブジェクトの名前で、"君の車" はオブジェクトを参照するためのポインターと考えることができます。 +The concept behind pointers is not that uncommon in everyday life. You often refer to something without knowing its exact identity. For example, you might say to a friend, “Let’s go for a ride in your car” instead of “Let’s go for a ride in the car with license plate 123ABD.” In this case, you are referencing the car with license plate 123ABD by using the phrase “your car.” The phrase “car with license plate 123ABD” is like the name of an object, and using the phrase “your car” is like using a pointer to reference the object. -対象物を明示しないで参照できると、非常に便利です。 たとえば、友人が新しい車に買い替えても、同じく "君の車" と言うことができます。 ポインターも同じように機能します。 たとえば、同じポインターがある時は数値フィールド "Age" を参照し、別の時には数値変数 "Old Age" を参照することもできます。 いずれの場合にもポインターは数値データを参照しており、それは計算に使用することができます。 +Being able to refer to something without knowing its exact identity is very useful. In fact, your friend could get a new car, and the phrase “your car” would still be accurate—it would still be a car and you could still take a ride in it. Pointers work the same way. For example, a pointer could at one time refer to a numeric field called Age, and later refer to a numeric variable called Old Age. In both cases, the pointer references numeric data that could be used in a calculation. -テーブル・フィールド・変数・配列・配列要素・オブジェクトを参照するためにポインターを使用することができます。 以下の表に、各タイプの例を示します: +You can use pointers to reference tables, fields, variables, arrays, array elements, and objects. The following table gives an example of each data type: -| タイプ | 参照時 | 使用時 | 代入時 | -| ------ | ----------------------- | ------------------------ | ------------------------ | -| テーブル | vpTable:=->[Table] | DEFAULT TABLE(vpTable->) | n/a | -| フィールド | vpField:=->[Table]Field | ALERT(vpField->) | vpField->:="John" | -| 変数 | vpVar:=->Variable | ALERT(vpVar->) | vpVar->:="John" | -| 配列 | vpArr:=->Array | SORT ARRAY(vpArr->;>) | COPY ARRAY (Arr;vpArr->) | -| 配列要素 | vpElem:=->Array{1} | ALERT (vpElem->) | vpElem->:="John" | -| オブジェクト | vpObj:=->myObject | ALERT (vpObj->myProp) | vpObj->myProp:="John" | +| Type | To Reference | To Use | To Assign | +| ------------- | ----------------------- | ------------------------ | ------------------------ | +| Table | vpTable:=->[Table] | DEFAULT TABLE(vpTable->) | n/a | +| Field | vpField:=->[Table]Field | ALERT(vpField->) | vpField->:="John" | +| Variable | vpVar:=->Variable | ALERT(vpVar->) | vpVar->:="John" | +| Array | vpArr:=->Array | SORT ARRAY(vpArr->;>) | COPY ARRAY (Arr;vpArr->) | +| Array element | vpElem:=->Array{1} | ALERT (vpElem->) | vpElem->:="John" | +| Object | vpObj:=->myObject | ALERT (vpObj->myProp) | vpObj->myProp:="John" | -## ポインターの基本 +## Using a pointer: Basic example -ポインターの使用方法について例題を用いて説明します。 以下の例は、ポインターを通して変数にアクセスする方法を示します。 まず、変数を作成します: +It is easiest to explain the use of pointers through an example. This example shows how to access a variable through a pointer. We start by creating a variable: ```4d $MyVar:="Hello" ``` -$MyVar は、文字列 "Hello" を含む変数です。 $MyVar に対するポインターを作成します: +$MyVar is now a variable containing the string “Hello.” We can now create a pointer to $MyVar: ```4d C_POINTER($MyPointer) $MyPointer:=->$MyVar ``` -ポインター記号 (->) は、"・・・に対するポインターを求める" ことを意味します。 この記号は、"ダッシュ" (-) の後に "大なり" (>) を付けて構成されます。 ここでは、$MyVar を参照するポインターを取得します。 このポインターは、代入演算子 (:=) で $MyPointer に対して割り当てられます。 +The -> symbol means “get a pointer to.” This symbol is formed by a dash followed by a “greater than” sign. In this case, it gets the pointer that references or “points to” $MyVar. This pointer is assigned to MyPointer with the assignment operator. -$MyPointer は、$MyVar に対するポインターを格納する変数です。 $MyPointer は、"Hello" という $MyVar の値を含みませんが、その値を参照することはできます。 以下の式は $MyVar の値を返します: +$MyPointer is now a variable that contains a pointer to $MyVar. $MyPointer does not contain “Hello”, which is the value in $MyVar, but you can use $MyPointer to get this value. The following expression returns the value in $MyVar: ```4d $MyPointer-> ``` -前述の式は、"Hello" という文字列を返します。 ポインター記号 (->) をポインターの後につけると、参照先の値を取得することができます。 これをデリファレンス (参照外し) と呼びます。 +In this case, it returns the string “Hello”. The -> symbol, when it follows a pointer, references the object pointed to. This is called dereferencing. -ポインター記号 (->) を後につけたポインターは、その参照先を直接使うのと同義であることを理解することが重要です。 つまり、変数 $MyVar を使用することと、$MyPointer-> を使用することは、まったく同じ意味になります。 たとえば、以下のステートメントはアラートボックスに文字列 "Hello" を表示します: +It is important to understand that you can use a pointer followed by the -> symbol anywhere that you could have used the object that the pointer points to. This means that you could use the expression $MyPointer-> anywhere that you could use the original $MyVar variable. For example, the following line displays an alert box with the word Hello in it: ```4d ALERT($MyPointer->) ``` -$MyPointer を使用して $MyVar の値を変更することもできます。 下記のステートメントは、変数 $MyVar に文字列 "Goodbye" を代入します: +You can also use $MyPointer to change the data in $MyVar. For example, the following statement stores the string "Goodbye" in the variable $MyVar: ```4d $MyPointer->:="Goodbye" ``` -この2つの $MyPointer-> を使用した例のとおり、$MyVar を使用するのとまったく同じ動作が実行されます。 以下の2つのステートメントも、同一の動作を実行します。両方とも、変数 $MyVar の現在の値をアラートボックスに表示します: +If you examine the two uses of the expression $MyPointer->, you will see that it acts just as if you had used $MyVar instead. In summary, the following two lines perform the same action—both display an alert box containing the current value in the variable $MyVar: ```4d ALERT($MyPointer->) ALERT($MyVar) ``` -以下の2つのステートメントも、同一の動作を実行します。両方とも $MyVar に、文字列 "Goodbye" を代入します: +The following two lines perform the same action— both assign the string "Goodbye" to $MyVar: ```4d $MyPointer->:="Goodbye" $MyVar:="Goodbye" ``` -## ポインター演算子 +## Pointer operators -前提: +With: ```4d - // vPtrA と vPtrB は同じ対象を参照します + ` vPtrA and vPtrB point to the same object vPtrA:=->anObject vPtrB:=->anObject - // vPtrC は別の対象を参照します + ` vPtrC points to another object vPtrC:=->anotherObject ``` -| 演算子 | シンタックス | 戻り値 | 式 | 結果 | -| --- | ------------- | --- | ------------- | ----- | -| 等しい | ポインター = ポインター | ブール | vPtrA = vPtrB | True | -| | | | vPtrA = vPtrC | False | -| 異なる | ポインター # ポインター | ブール | vPtrA # vPtrC | True | -| | | | vPtrA # vPtrB | False | +| Operation | Syntax | Returns | Expression | Value | +| ---------- | ----------------- | ------- | ------------- | ----- | +| Equality | Pointer = Pointer | Boolean | vPtrA = vPtrB | True | +| | | | vPtrA = vPtrC | False | +| Inequality | Pointer # Pointer | Boolean | vPtrA # vPtrC | True | +| | | | vPtrA # vPtrB | False | -## ポインターの使用例 -### テーブルへのポインター -テーブルの代わりにデリファレンスしたポインターを使用することができます。 以下のようなステートメントで、テーブルのポインターを作成します: +## Main usages +### Pointers to tables +Anywhere that the language expects to see a table, you can use a dereferenced pointer to the table. You create a pointer to a table by using a line like this: ```4d $TablePtr:=->[anyTable] ``` -あるいは、以下のように `Table` コマンドを使用してテーブルのポインターを得ることができます: +You can also get a pointer to a table by using the `Table` command: ```4d $TablePtr:=Table(20) ``` -取得したポインターは、以下のようにデリファレンスしてコマンドに渡すことができます: +You can use the dereferenced pointer in commands, like this: ```4d DEFAULT TABLE($TablePtr->) ``` -### フィールドへのポインター -フィールドの代わりにデリファレンスしたポインターを使用することができます。 以下のようなステートメントで、フィールドのポインターを作成します: +### Pointers to fields +Anywhere that the language expects to see a field, you can use a dereferenced pointer to reference the field. You create a pointer to a field by using a line like this: ```4d $FieldPtr:=->[aTable]ThisField ``` -あるいは、以下のように `Field` コマンドを使用してフィールドのポインターを得ることができます: +You can also get a pointer to a field by using the `Field` command, for example: ```4d $FieldPtr:=Field(1;2) ``` -取得したポインターは、以下のようにデリファレンスしてコマンドに渡すことができます: +You can use the dereferenced pointer in commands, like this: ```4d OBJECT SET FONT($FieldPtr->;"Arial") ``` -### 変数へのポインター +### Pointers to local variables -プロセス変数またはローカル変数のポインターを使う場合、参照される変数はポインターが使用される時点ですでに定義されていなければなりません。 ローカル変数は、それらを作成したメソッドの実行が終わると破棄され、プロセス変数もそれを作成したプロセスの終了時に削除される点に留意してください。 存在しない変数をポインターで呼び出そうとすると、インタープリターモードでは (「変数が設定されていません」という内容の) シンタックスエラーが起きます。コンパイルモードでは、さらに重大なエラーが発生する可能性があります。 +When you use pointers to process or local variables, you must be sure that the variable pointed to is already set when the pointer is used. Keep in mind that local variables are deleted when the method that created them has completed its execution and process variables are deleted at the end of the process that created them. When a pointer calls a variable that no longer exists, this causes a syntax error in interpreted mode (variable not defined) but it can generate a more serious error in compiled mode. -ローカル変数のポインターを使用すると、プロセス変数の使用を控えることができます。 ローカル変数へのポインターは、同じプロセス内でのみ使用することができます。 デバッガーにおいて、別のメソッドで宣言されたローカル変数へのポインターを表示すると、ポインターの後ろの括弧内にそのメソッド名が表示されます。 例として、Method1 で以下のように書いたとします: +Pointers to local variables allow you to save process variables in many cases. Pointers to local variables can only be used within the same process. In the debugger, when you display a pointer to a local variable that has been declared in another method, the original method name is indicated in parentheses, after the pointer. For example, if you write in Method1: ```4d $MyVar:="Hello world" Method2(->$MyVar) ``` -Method2 実行中のデバッガーは $1 を次のように表示します: +In Method2, the debugger will display $1 as follows: | $1 | ->$MyVar (Method1) | | -- | ------------------ | | | | -$1 の値は、次のようになります: +The value of $1 will be: | $MyVar (Method1) | "Hello world" | | ---------------- | ------------- | | | | -### 配列要素へのポインター -配列要素に対するポインターを作成することができます。 以下の例は配列を作成し、配列の最初の要素を指し示すポインターを変数 $ElemPtr に割り当てます: +### Pointers to array elements +You can create a pointer to an array element. For example, the following lines create an array and assign a pointer to the first array element to a variable called $ElemPtr: ```4d -ARRAY REAL($anArray;10) // 配列を作成 -$ElemPtr:=->$anArray{1} // 配列要素へのポインターを作成 +ARRAY REAL($anArray;10) //Create an array +$ElemPtr:=->$anArray{1} //Create a pointer to the array element ``` -以下のように、ポインターの参照先である配列要素に値を代入することができます: +You could use the dereferenced pointer to assign a value to the element, like this: ```4d $ElemPtr->:=8 ``` -### 配列へのポインター -配列に対するポインターを作成することができます。 以下の例は配列を作成し、配列を指し示すポインターを変数 $ArrPtr に割り当てます: +### Pointers to arrays +You can create a pointer to an array. For example, the following lines create an array and assign a pointer to the array to a variable called $ArrPtr: ```4d -ARRAY REAL($anArray;10) // 配列を作成 -$ArrPtr:=->$anArray // 配列へのポインターを作成 +ARRAY REAL($anArray;10) //Create an array +$ArrPtr:=->$anArray //Create a pointer to the array ``` -ポインターの参照先はあくまでも配列であり、配列要素ではないことを理解することが重要です。 たとえば、デリファレンスしたポインターを以下のように使用できます: +It is important to understand that the pointer points to the array; it does not point to an element of the array. For example, you can use the dereferenced pointer from the preceding lines like this: ```4d -SORT ARRAY($ArrPtr->;>) // 配列の並べ替え +SORT ARRAY($ArrPtr->;>) //Sort the array ``` -配列の4番目の要素にアクセスするのに配列のポインターを使う場合は、以下のように記述します: +If you need to refer to the fourth element in the array by using the pointer, you do this: ```4d ArrPtr->{4}:=84 ``` -### メソッドの引数としてのポインター -ポインターは引数としてメソッドに渡すことができます。 メソッド内で、ポインターの参照先の値を変更することができます。 たとえば、以下のメソッド `takeTwo` は、2つのポインターを引数として受け取ります。 そして、最初の引数の参照先を大文字に変換し、2つめの引数の参照先を小文字に変換します。 当該プロジェクトメソッドのコードです: +### Pointers as parameters to methods +You can pass a pointer as a parameter to a method. Inside the method, you can modify the object referenced by the pointer. For example, the following method, `takeTwo`, takes two parameters that are pointers. It changes the object referenced by the first parameter to uppercase characters, and the object referenced by the second parameter to lowercase characters. Here is the project method: ```4d - //takeTwo プロジェクトメソッド - //$1 – 文字列フィールドまたは変数へのポインター。 これを大文字に変換します。 - //$2 – 文字列フィールドまたは変数へのポインター。 これを小文字に変換します。 + //takeTwo project method + //$1 – Pointer to a string field or variable. Change this to uppercase. + //$2 – Pointer to a string field or variable. Change this to lowercase. $1->:=Uppercase($1->) $2->:=Lowercase($2->) ``` -以下のステートメントではメソッド `takeTwo` を使用し、フィールドの値を大文字に、変数の値を小文字に変換します: +The following line uses the `takeTwo` method to change a field to uppercase characters and to change a variable to lowercase characters: ``` takeTwo(->[myTable]myField;->$MyVar) ``` -このフィールド [myTable]myField の値が "jones" であれば、"JONES" に変更されます。 他方、変数 $MyVar の値が "HELLO" であれば、"hello" に変更されます。 +If the field [myTable]myField contained the string "jones", it would be changed to the string "JONES". If the variable $MyVar contained the string "HELLO", it would be changed to the string "hello". -メソッド takeTwo で宣言されている引数の型と、引数として渡したポインターの参照先のデータタイプが一致していることが重要です。 この例では、ポインターの参照先は必ず文字列またはテキスト型でなければなりません。 +In the takeTwo method, and in fact, whenever you use pointers, it is important that the data type of the object being referenced is correct. In the previous example, the pointers must point to something that contains a string or text. -### ポインターへのポインター -より複雑な使い方として、ポインターを参照するポインターを使うことができます。 以下の例を考えます: +### Pointers to pointers +If you really like to complicate things, you can use pointers to reference other pointers. Consider this example: ```4d $MyVar:="Hello" $PointerOne:=->$MyVar @@ -190,24 +190,24 @@ takeTwo(->[myTable]myField;->$MyVar) ($PointerTwo->)->:="Goodbye" ALERT(($PointerTwo->)->) ``` -この例はアラートボックスに "Goodbye" を表示します。 +It displays an alert box with the word “Goodbye” in it. -各行について見ていきましょう: +Here is an explanation of each line of the example: -- $MyVar:="Hello" --> この行は、変数 $MyVar に "Hello" という文字列を代入しています。 -- $PointerOne:=->$MyVar --> 変数 $PointerOne に、変数 $MyVar へのポインターを代入します。 -- $PointerTwo:=->$PointerOne --> 新たな変数 $PointerTwo に、$MyVar を参照する $PointerOne へのポインターを代入します。 -- ($PointerTwo->)->:="Goodbye" --> $PointerTwo-> は $PointerOne を示し、$PointerOne は $MyVarを示します。 つまり、($PointerTwo->)-> は、$MyVar を示しています。 結果として、文字列 "Goodbye" が $MyVar に代入されます。 -- ALERT (($PointerTwo->)->) --> 先の説明と同様に $PointerTwo-> は $PointerOne を示し、$PointerOne は $MyVarを示しています。 つまり、($PointerTwo->)-> は、$MyVar を示しています。 結果としてアラートボックスには $MyVar の内容が表示されます。 +- $MyVar:="Hello" --> This line puts the string "Hello" into the variable $MyVar. +- $PointerOne:=->$MyVar --> $PointerOne now contains a pointer to $MyVar. +- $PointerTwo:=->$PointerOne --> $PointerTwo (a new variable) contains a pointer to $PointerOne, which in turn points to $MyVar. +- ($PointerTwo->)->:="Goodbye" --> $PointerTwo-> references the contents of $PointerOne, which in turn references $MyVar. Therefore ($PointerTwo->)-> references the contents of $MyVar. So in this case, $MyVar is assigned "Goodbye". +- ALERT (($PointerTwo->)->) --> Same thing: $PointerTwo-> references the contents of $PointerOne, which in turn references $MyVar. Therefore ($PointerTwo->)-> references the contents of $MyVar. So in this case, the alert box displays the contents of $MyVar. -以下の例では、$MyVar に "Hello" が代入されます: +The following line puts "Hello" into $MyVar: ```4d ($PointerTwo->)->:="Hello" ``` -以下のステートメントは、$NewVar に $MyVar の値である "Hello" が代入されます: +The following line gets "Hello" from $MyVar and puts it into $NewVar: ``` $NewVar:=($PointerTwo->)-> ``` -**重要:** デリファレンスを複数おこなうには括弧が必要です。 +**Important:** Multiple dereferencing requires parentheses. From 976a57e0535925514f1605234d97ff46039bf1d2 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:58:46 +0100 Subject: [PATCH 245/311] New translations components.md (Japanese) --- .../translated_docs/ja/Concepts/components.md | 172 +++++++++--------- 1 file changed, 86 insertions(+), 86 deletions(-) diff --git a/website/translated_docs/ja/Concepts/components.md b/website/translated_docs/ja/Concepts/components.md index 00f907fbad41d5..9964d48045942f 100644 --- a/website/translated_docs/ja/Concepts/components.md +++ b/website/translated_docs/ja/Concepts/components.md @@ -1,67 +1,67 @@ --- id: components -title: コンポーネント +title: Components --- -4D のコンポーネントとは、他のアプリケーションにインストール可能な、1つ以上の機能を持つ 4D メソッドやフォームの一式です。 たとえば、メールの送受信をおこない、それらを 4D アプリケーションに格納するための機能を持ったコンポーネントを作成できます。 +A 4D component is a set of 4D methods and forms representing one or more functionalities that can be installed in different applications. For example, you can develop a 4D e-mail component that manages every aspect of sending, receiving and storing e-mails in 4D applications. -4D コンポーネントの作成とインストールは直接 4D を使用しておこないます。 4D では、コンポーネントは [プラグイン](Concepts/plug-ins.md) のように扱われ、以下の原則が適用されます: +Creating and installing 4D components is carried out directly from 4D. Basically, components are managed like [plug-ins](Concepts/plug-ins.md) according to the following principles: -- コンポーネントは、標準のアーキテクチャーまたはパッケージ (.4dbase 拡張子) の形をしたストラクチャーファイル ( コンパイルまたは非コンパイル) で構成されます。 -- アプリケーションプロジェクトにコンポーネントをインストールするには、プロジェクトの Project フォルダーと同階層の "Components" フォルダーにコンポーネントをコピーします。 -- コンポーネントは次の 4D の要素を呼び出すことができます: プロジェクトメソッド、プロジェクトフォーム、メニューバー、選択リスト、ライブラリピクチャーなど。 反面、コンポーネントが呼び出せないものは、データベースメソッドとトリガーです。 -- コンポーネント内で標準のテーブルやデータファイルを使用することはできません。 しかし、外部データベースのメカニズムを使用すればテーブルやフィールドを作成し、そこにデータを格納したり読み出したりすることができます。 外部データベースは、メインの 4D データベースとは独立して存在し、SQLコマンドでアクセスします。 +- A component consists of a regular structure file (compiled or not) having the standard architecture or in the form of a package (see .4dbase Extension). +- To install a component in an application project, you simply need to copy it into the "Components" folder of the project, at the same level as the Project folder. +- A component can call on most of the 4D elements: project methods, project forms, menu bars, choice lists, pictures from the library, and so on. It cannot call database methods and triggers. +- You cannot use standard tables or data files in 4D components. However, a component can create and/or use tables, fields and data files using mechanisms of external databases. These are separate 4D databases that you work with using SQL commands. -## 定義 +## Definitions -4D のコンポーネント管理メカニズムでは、以下の用語とコンセプトを使います: +The component management mechanisms in 4D require the implementation of the following terms and concepts: -- **マトリクスプロジェクト**: コンポーネント開発に使用する4D プロジェクト。 マトリクスプロジェクトは特別な属性を持たない標準のプロジェクトです。 マトリクスプロジェクトはひとつのコンポーネントを構成します。 マトリクスプロジェクトは、コンポーネントを使用するプロジェクト (ホストアプリケーションプロジェクト) の Components フォルダーにコピーして使います。コンパイルされていてもいなくてもかまいません。 -- **ホストプロジェクト**: コンポーネントがインストールされ、それを使用するアプリケーションプロジェクト。 -- **コンポーネント**: ホストアプリケーションによって使用される目的で、同アプリケーションの Components フォルダーにコピーされたマトリクスプロジェクト (コンパイル済みまたは非コンパイル)。 +- **Matrix Project**: 4D project used for developing the component. The matrix project is a standard project with no specific attributes. A matrix project forms a single component. The matrix project is intended to be copied, compiled or not, into the Components folder of the project that will be using the component (host application project). +- **Host Project**: Application project in which a component is installed and used. +- **Component**: Matrix project, compiled or not, copied into the Components folder of the host application and whose contents are used in the host applications. -プロジェクトは "マトリクス" にも "ホスト" にもなりえます。言い換えれば、マトリクスプロジェクト自体も1 つ以上のコンポーネントを使用できます。 しかしコンポーネントが "サブコンポーネント" を使用することはできません。 +It should be noted that a project can be both a “matrix” and a “host,” in other words, a matrix project can itself use one or more components. However, a component cannot use “sub-components” itself. -### コンポーネントの保護: コンパイル +### Protection of components: compilation -コンポーネントとしてインストールされたマトリクスプロジェクトのプロジェクトメソッドは、ホストプロジェクトからデフォルトでアクセス可能です。 特に: +By default, all the project methods of a matrix project installed as a component are potentially visible from the host project. In particular: -- エクスプローラーのメソッドページに存在する共有のプロジェクトメソッドは、ホストプロジェクトのメソッドから呼び出し可能です。 エクスプローラーのプレビューエリアでそれらの内容を選択してコピーすることが可能です。 また、その内容はデバッガーで見ることもできます。 しかし、それらをメソッドエディター上で開いたり編集したりすることはできません。 -- マトリクスプロジェクトの他のプロジェクトメソッドはエクスプローラーに現れません。しかし、ホストプロジェクトのデバッガーには内容が表示されます。 +- The shared project methods are found on the Methods Page of the Explorer and can be called in the methods of the host project. Their contents can be selected and copied in the preview area of the Explorer. They can also be viewed in the debugger. However, it is not possible to open them in the Method editor nor to modify them. +- The other project methods of the matrix project do not appear in the Explorer but they too can be viewed in the debugger of the host project. -コンポーネントのプロジェクトメソッドを効果的に保護するには、マトリクスプロジェクトをコンパイルして、インタプリターコードを含まない .4dz ファイルとして提供します。 コンパイルされたマトリクスプロジェクトがコンポーネントとしてインストールされると: +To protect the project methods of a component effectively, simply compile the matrix project and provide it in the form of a .4dz file. When a compiled matrix project is installed as a component: -- エクスプローラーのメソッドページに存在する共有のプロジェクトメソッドは、ホストプロジェクトのメソッドから呼び出し可能です。 しかし、その内容はプレビューエリアにもデバッガーにも表示されません。 -- マトリクスプロジェクトの他のプロジェクトメソッドは一切表示されません。 +- The shared project methods are shown on the Methods Page of the Explorer and can be called in the methods of the host project. However, their contents will not appear in the preview area nor in the debugger. +- The other project methods of the matrix project will never appear. -## プロジェクトメソッドの共有 -マトリクスプロジェクトのすべてのプロジェクトメソッドは 、コンポーネントに含まれます。つまり、マトリクスプロジェクトをコンポーネント化しても、これらのプロジェクトメソッドは同コンポーネントにて呼び出して実行することができます。 +## Sharing of project methods +All the project methods of a matrix project are by definition included in the component (the project is the component), which means that they can be called and executed by the component. -他方、デフォルトでは、これらのプロジェクトメソッドはホストプロジェクトに表示されず、呼び出すこともできません。 プロジェクトメソッドをホストプロジェクトと共有するには、 マトリクスプロジェクト側でそのメソッドをそのように明示的に設定しなければなりません。 設定することで、それらのプロジェクトメソッドはホストプロジェクトにて呼び出すことができるようになります (しかしホストプロジェクトのメソッドエディターで編集することはできません)。 これらのメソッドはコンポーネントの **エントリーポイント** となります。 +On the other hand, by default these project methods will not be visible, nor can they be called in the host projects. In the matrix project, you must explicitly designate the methods that you want to share with the host project. These project methods can be called in the code of the host project (but they cannot be modified in the Method editor of the host database). These methods form **entry points** in the component. -**注:** セキュリティのため、デフォルトでは、コンポーネントはホストプロジェクトのプロジェクトメソッドを実行することはできません。 特定の場合に、ホストプロジェクトのプロジェクトメソッドにコンポーネントがアクセスできるようにする必要があるかもしれません。 そうするには、ホストプロジェクトのプロジェクトメソッド側で、コンポーネントからのアクセスを可能にするよう明示的に指定しなければなりません。 +**Note:** Conversely, for security reasons, by default a component cannot execute project methods belonging to the host project. In certain cases, you may need to allow a component to access the project methods of your host project. To do this, you must explicitly designate the project methods of the host project that you want to make accessible to the components. ![](assets/en/Concepts/pict516563.en.png) -## 変数の渡し方 +## Passing variables -ローカル、プロセス、インタープロセス変数は、コンポーネントとホストプロジェクト間で共有されません。 ホストプロジェクトからコンポーネントの変数、またはその逆にアクセスする唯一の方法はポインターを使用することです。 +The local, process and interprocess variables are not shared between components and host projects. The only way to access component variables from the host project and vice versa is using pointers. -配列を使用した例: +Example using an array: ```4d -// ホストプロジェクト側: +//In the host project: ARRAY INTEGER(MyArray;10) AMethod(->MyArray) -// コンポーネント側で AMethod プロジェクトメソッドは以下の通りです: +//In the component, the AMethod project method contains: APPEND TO ARRAY($1->;2) ``` -変数を使用した例: +Examples using variables: ```4d C_TEXT(myvariable) @@ -71,42 +71,42 @@ title: コンポーネント ``` -ホストプロジェクトとコンポーネント間でポインターを使用して通信をおこなうには、以下の点を考慮する必要があります: +When you use pointers to allow components and the host project to communicate, you need to take the following specificities into account: -- `Get pointer` をコンポーネント内で使用した場合、このコマンドはホストプロジェクトの変数へのポインターを返しません。また逆にこのコマンドをホストプロジェクトで使用した場合も同様です。 +- The `Get pointer` command will not return a pointer to a variable of the host project if it is called from a component and vice versa. -- コンパイル済みプロジェクトでは、コンパイルされたコンポーネントしか使用できませんが、インタープリタープロジェクトの場合には、インタープリターおよびコンパイル済みコンポーネントを同時に使用することができます。 この場合、ポインターの利用は以下の原則を守らなければなりません: インタープリターモードでは、コンパイルモードにおいて作成されたポインターを解釈できます。逆にコンパイルモードでは、インタープリターモードにて作成されたポインターを解釈することはできません。 以下の例でこの原則を説明します: 同じホストプロジェクトにインストールされた 2つのコンポーネント C ( コンパイル済) と I ( インタープリタ) があります: - - コンポーネントC が定義する変数 `myCvar` があるとき、コンポーネントI はポインター `->myCvar` を使用して変数の値にアクセスすることができます。 - - コンポーネントI が定義する変数 `myIvar` があるとき、コンポーネントC はポインター `->myIvar` を使用しても変数の値にアクセスすることはできません。 このシンタックスは実行エラーを起こします。 +- The component architecture allows the coexistence, within the same interpreted project, of both interpreted and compiled components (conversely, only compiled components can be used in a compiled project). In order to use pointers in this case, you must respect the following principle: the interpreter can unpoint a pointer built in compiled mode; however, in compiled mode, you cannot unpoint a pointer built in interpreted mode. Let’s illustrate this principle with the following example: given two components, C (compiled) and I (interpreted), installed in the same host project. + - If component C defines the `myCvar` variable, component I can access the value of this variable by using the pointer `->myCvar`. + - If component I defines the `myIvar` variable, component C cannot access this variable by using the pointer `->myIvar`. This syntax causes an execution error. -- `RESOLVE POINTER` を使用したポインターの比較はお勧めできません。 変数の分離の原則により、ホストプロジェクトとコンポーネント (あるいは他のコンポーネント) で同じ名前の変数が存在することができますが、根本的にそれらは異なる内容を持ちます。 両コンテキストで、変数のタイプが違うことさえありえます。 ポインター `myptr1` と `myptr2` がそれぞれ変数を指すとき、以下の比較は正しくない結果となるかもしれません: +- The comparison of pointers using the `RESOLVE POINTER` command is not recommended with components since the principle of partitioning variables allows the coexistence of variables having the same name but with radically different contents in a component and the host project (or another component). The type of the variable can even be different in both contexts. If the `myptr1` and `myptr2` pointers each point to a variable, the following comparison will produce an incorrect result: ```4d RESOLVE POINTER(myptr1;vVarName1;vtablenum1;vfieldnum1) RESOLVE POINTER(myptr2;vVarName2;vtablenum2;vfieldnum2) If(vVarName1=vVarName2) - // 変数が異なっているにもかかわらず、このテストはtrue を返します + //This test returns True even though the variables are different ``` -このような場合には、ポインターを比較しなければなりません: +In this case, it is necessary to use the comparison of pointers: ```4d - If(myptr1=myptr2) // このテストはFalse を返します + If(myptr1=myptr2) //This test returns False ``` -## ホストプロジェクトのテーブルへのアクセス +## Access to tables of the host project -コンポーネントでテーブルを使用することはできませんが、ホストプロジェクトとコンポーネントはポインターを使用して通信を行うことができます。 たとえば、以下はコンポーネントで実行可能なメソッドです: +Although components cannot use tables, pointers can permit host projects and components to communicate with each other. For example, here is a method that could be called from a component: ```4d -// コンポーネントメソッドの呼び出し +// calling a component method methCreateRec(->[PEOPLE];->[PEOPLE]Name;"Julie Andrews") ``` -コンポーネント内の `methCreateRec` メソッドのコード: +Within the component, the code of the `methCreateRec` method: ```4d -C_POINTER($1) // ホストプロジェクトのテーブルへのポインター -C_POINTER($2) // ホストプロジェクトのフィールドへのポインター -C_TEXT($3) // 代入する値 +C_POINTER($1) //Pointer on a table in host project +C_POINTER($2) //Pointer on a field in host project +C_TEXT($3) // Value to insert $tablepointer:=$1 $fieldpointer:=$2 @@ -116,22 +116,22 @@ $fieldpointer->:=$3 SAVE RECORD($tablepointer->) ``` -## ランゲージコマンドのスコープ +## Scope of language commands -[使用できないコマンド](#使用できないコマンド) を除き、コンポーネントではすべての 4D ランゲージコマンドが使用できます。 +Except for [Unusable commands](#unusable-commands), a component can use any command of the 4D language. -コマンドがコンポーネントから呼ばれると、コマンドはコンポーネントのコンテキストで実行されます。ただし `EXECUTE METHOD` コマンドは除きます。このコマンドは、パラメーターにて指定されたメソッドのコンテキストを使用します。 また、ユーザー&グループテーマの読み出しコマンドはコンポーネントで使用することができますが、読み出されるのはホストプロジェクトのユーザー&グループ情報であることに注意してください (コンポーネントに固有のユーザー&グループはありません)。 +When commands are called from a component, they are executed in the context of the component, except for the `EXECUTE METHOD` command that uses the context of the method specified by the command. Also note that the read commands of the “Users and Groups” theme can be used from a component but will read the users and groups of the host project (a component does not have its own users and groups). -`SET DATABASE PARAMETER` と `Get database parameter` コマンドは例外となります: これらのコマンドのスコープはグローバルです。 これらのコマンドがコンポーネントから呼び出されると、結果はホストプロジェクトに適用されます。 +The `SET DATABASE PARAMETER` and `Get database parameter` commands are an exception: their scope is global to the application. When these commands are called from a component, they are applied to the host application project. -さらに、`Structure file` と `Get 4D folder` コマンドは、コンポーネントで使用するための設定ができるようになっています。 +Furthermore, specific measures have been specified for the `Structure file` and `Get 4D folder` commands when they are used in the framework of components. -`COMPONENT LIST` コマンドを使用して、ホストプロジェクトにロードされたコンポーネントのリストを取得できます。 +The `COMPONENT LIST` command can be used to obtain the list of components that are loaded by the host project. -### 使用できないコマンド +### Unusable commands -(読み込み専用モードで開かれるため) ストラクチャーファイルを更新する以下のコマンドは、コンポーネントで使用することができません。 コンポーネント中で以下のコマンドを実行すると、-10511, "CommandName コマンドをコンポーネントでコールすることはできません" のエラーが生成されます: +The following commands are not compatible for use within a component because they modify the structure file — which is open in read-only. Their execution in a component will generate the error -10511, “The CommandName command cannot be called from a component”: - `ON EVENT CALL` - `Method called on event` @@ -151,40 +151,40 @@ SAVE RECORD($tablepointer->) - `BLOB TO USERS` - `SET PLUGIN ACCESS` -**注:** +**Notes:** -- `Current form table` コマンドは、プロジェクトフォームのコンテキストで呼び出されると `Nil` を返します。 ゆえにこのコマンドをコンポーネントで使用することはできません。 -- SQLデータ定義言語のコマンド (`CREATE TABLE`、`DROP TABLE`等) をコンポーネントのフレームワークで使用することはできません。 ただし、外部データベースの場合は使用することができます (`CREATE DATABASE` SQL コマンド参照)。 +- The `Current form table` command returns `Nil` when it is called in the context of a project form. Consequently, it cannot be used in a component. +- SQL data definition language commands (`CREATE TABLE`, `DROP TABLE`, etc.) cannot be used on the component project. However, they are supported with external databases (see `CREATE DATABASE` SQL command). -## エラー処理 +## Error handling -`ON ERR CALL` コマンドによって実装された [エラー処理メソッド](Concepts/error-handling.md) は、実行中のプロジェクトに対してのみ適用されます。 コンポーネントによって生成されたエラーの場合、ホストプロジェクトの `ON ERR CALL` エラー処理メソッドは呼び出されず、その逆もまた然りです。 +An [error-handling method](Concepts/error-handling.md) installed by the `ON ERR CALL` command only applies to the running application. In the case of an error generated by a component, the `ON ERR CALL` error-handling method of the host project is not called, and vice versa. -## フォームの使用 +## Use of forms -- 特定のテーブルに属さない" プロジェクトフォーム" のみが、コンポーネント内で利用できます。 マトリクスプロジェクトのすべてのプロジェクトフォームをコンポーネントで使用することができます。 -- コンポーネントはホストプロジェクトのテーブルフォームを使用できます。 この場合、コンポーネントのコードでフォームを指定するにあたっては、テーブル名ではなく、テーブルへのポインターを使用しなければならないことに注意してください。 +- Only “project forms” (forms that are not associated with any specific table) can be used in a component. Any project forms present in the matrix project can be used by the component. +- A component can call table forms of the host project. Note that in this case it is necessary to use pointers rather than table names between brackets [] to specify the forms in the code of the component. -**注:** コンポーネントが `ADD RECORD` コマンドを使用すると、ホストプロジェクトのコンテキストで、ホストプロジェクトのカレントの入力フォームが表示されます。 したがって、その入力フォーム上に変数が含まれている場合、コンポーネントはその変数にアクセスできません。 +**Note:** If a component uses the `ADD RECORD` command, the current Input form of the host project will be displayed, in the context of the host project. Consequently, if the form includes variables, the component will not have access to it. -- コンポーネントフォームをホストプロジェクト内でサブフォームとして公開することができます。 これは具体的には、グラフィックオブジェクトを提供するコンポーネントを開発できることを意味します。 たとえば、4D社が提供するウィジェットはコンポーネントのサブフォーム利用に基づいています。 +- You can publish component forms as subforms in the host projects. This means that you can, more particularly, develop components offering graphic objects. For example, Widgets provided by 4D are based on the use of subforms in components. -## テーブルやフィールドの利用 +## Use of tables and fields -コンポーネントは、マトリクスプロジェクトのストラクチャーで定義されたテーブルやフィールドを使用することはできません。 しかし外部データベースを作成し、そのテーブルやフィールドを必要に応じ利用することはできます。 外部データベースの作成と管理は SQL を用いておこないます。 外部データベースは、メインの4Dプロジェクトから独立している別の 4Dプロジェクトですが、メインプロジェクトから操作が可能です。 外部データベースの利用は、そのデータベースを一時的にカレントデータベースに指定することです。言い換えれば、4Dが実行する SQL クエリのターゲットデータベースとして外部データベースを指定します。 外部データベースの作成は SQL の `CREATE DATABASE` コマンドを使用します。 +A component cannot use the tables and fields defined in the 4D structure of the matrix project. However, you can create and use external databases, and then use their tables and fields according to your needs. You can create and manage external databases using SQL. An external database is a 4D project that is independent from the main 4D project, but that you can work with from the main 4D project. Using an external database means temporarily designating this database as the current database, in other words, as the target database for the SQL queries executed by 4D. You create external databases using the SQL `CREATE DATABASE` command. -### 例題 +### Example -以下のコードはコンポーネントに実装されており、外部データベースに対して3つの基本的なアクションをおこないます: +The following code is included in a component and performs three basic actions with an external database: -- 外部データベースを作成します (存在しない場合) -- 外部データベースにデータを追加します -- 外部データベースからデータを読み込みます +- creates the external database if it does not already exist, +- adds data to the external database, +- reads data from the external database. -外部データベースの作成: +Creating the external database: ```4d -<>MyDatabase:=Get 4D folder+"\MyDB" // (Windows) データを許可されているディレクトリに保存します +<>MyDatabase:=Get 4D folder+"\MyDB" // (Windows) stores the data in an authorized directory Begin SQL CREATE DATABASE IF NOT EXISTS DATAFILE :[<>MyDatabase]; USE DATABASE DATAFILE :[<>MyDatabase]; @@ -204,10 +204,10 @@ SAVE RECORD($tablepointer->) End SQL ``` -外部データベースへのデータ書き込み: +Writing in the external database: ```4d - $Ptr_1:=$2 // ホストプロジェクトへのデータアクセスはポインターを通じておこないます + $Ptr_1:=$2 // retrieves data from the host project through pointers $Ptr_2:=$3 $Ptr_3:=$4 $Ptr_4:=$5 @@ -226,10 +226,10 @@ SAVE RECORD($tablepointer->) End SQL ``` -外部データベースからデータを読み込み: +Reading from an external database: ```4d - $Ptr_1:=$2 // ホストプロジェクトへのデータアクセスはポインターを通じておこないます + $Ptr_1:=$2 // accesses data of the host project through pointers $Ptr_2:=$3 $Ptr_3:=$4 $Ptr_4:=$5 @@ -248,17 +248,17 @@ SAVE RECORD($tablepointer->) End SQL ``` -## リソースの使用 +## Use of resources -コンポーネントはリソースを使用することができます。 リソース管理の原則に従い、コンポーネントが .4dbase 形式の場合 (推奨されるアーキテクチャー)、Resources フォルダーは .4dbase フォルダーの中に置かれます。 +Components can use resources. In conformity with the resource management principle, if the component is of the .4dbase architecture (recommended architecture), the Resources folder must be placed inside this folder. -これによって自動メカニズムが有効となり、コンポーネントの Resources フォルダー内で見つかった XLIFF ファイルは、 同コンポーネントによってロードされます。 +Automatic mechanisms are operational: the XLIFF files found in the Resources folder of a component will be loaded by this component. -1つ以上のコンポーネントを含むホストプロジェクトでは、ホストプロジェクトと同様にそれぞれのコンポーネントも固有のリソースチェーンを持っています。 リソースは異なるプロジェクト間で分離されます。コンポーネントA のリソースにコンポーネントB やホストプロジェクトからアクセスすることはできません。 +In a host project containing one or more components, each component as well as the host projects has its own “resources string.” Resources are partitioned between the different projects: it is not possible to access the resources of component A from component B or the host project. -## コンポーネントのオンラインヘルプ -コンポーネントにオンラインヘルプを追加できるように、専用のメカニズムが実装されています。 原理は 4D プロジェクトに提供されているものと同じです: +## On-line help for components +A specific mechanism has been implemented in order to allow developers to add on-line help to their components. The principle is the same as that provided for 4D projects: -- コンポーネントヘルプは拡張子が .htm, .html または (Windows のみ) .chm で提供されます。 -- ヘルプファイルはコンポーネントのストラクチャーファイルと同階層に置かれ、ストラクチャーと同じ名前でなくてはなりません。 -- このファイルは自動的にアプリケーションのヘルプメニューに、" ヘルプ: ヘルプファイル名" のタイトルでロードされます。 \ No newline at end of file +- The component help must be provided as a file suffixed .htm, .html or (Windows only) .chm, +- The help file must be put next to the structure file of the component and have the same name as the structure file, +- This file is then automatically loaded into the Help menu of the application with the title “Help for...” followed by the name of the help file. \ No newline at end of file From f06924a7a875161b2fa5d10f688d4df003596a82 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:58:48 +0100 Subject: [PATCH 246/311] New translations dt_object.md (Japanese) --- .../translated_docs/ja/Concepts/dt_object.md | 231 +++++++++--------- 1 file changed, 116 insertions(+), 115 deletions(-) diff --git a/website/translated_docs/ja/Concepts/dt_object.md b/website/translated_docs/ja/Concepts/dt_object.md index ed95f9c9aa8d94..d9bde1947c5c1c 100644 --- a/website/translated_docs/ja/Concepts/dt_object.md +++ b/website/translated_docs/ja/Concepts/dt_object.md @@ -1,101 +1,101 @@ --- id: object -title: オブジェクト +title: Object --- -オブジェクト型の変数・フィールド・式にはさまざまなデータを格納することができます。 4D のネイティブなオブジェクトの構造は、よくある「プロパティ/値」(または「属性/値」) というペア (連想配列) に基づいています。 これらオブジェクトの記法は JSON をもとにしていますが、完全に同じというわけではありません。 +Variables, fields or expressions of the Object type can contain various types of data. The structure of "native" 4D objects is based on the classic principle of "property/value" pairs. The syntax of these objects is based on JSON notation: -- プロパティ名は必ずテキストで表現されます。 +- A property name is always a text, for example "Name". -- プロパティ値は以下のどれかの型で表現されます: - - 数値 (実数、整数、等) +- A property value can be of the following type: + - number (Real, Integer, etc.) - text - null - - ブール - - ポインター (`JSON Stringify` コマンドの使用、またはコピーの際に評価されます) - - 日付 (日付型あるいは ISO日付フォーマット文字列) - - オブジェクト (オブジェクトは入れ子にすることができます) - - ピクチャー (*) + - Boolean + - pointer (stored as such, evaluated using the `JSON Stringify` command or when copying), + - date (date type or ISO date format string) + - object (objects can be nested on several levels) + - picture(*) - collection -(*) デバッガー内でテキストとして表示したり、JSON へと書き出されたりした場合、ピクチャー型のオブジェクトプロパティは "[object Picture]" と表されます。 +(*)When exposed as text in the debugger or exported to JSON, picture object properties print "[object Picture]". -**警告:** 属性名は大文字と小文字を区別するという点に注意してください。 +**Warning:** Keep in mind that attribute names differentiate between upper and lower case. -オブジェクト型の変数・フィールド・式を操作するには **オブジェクト (ランゲージ)** テーマのコマンドを使用するか、オブジェクト記法 ([オブジェクト記法の使用](Concepts/dt_object.md#オブジェクト記法の使用) 参照)を用います。 オブジェクト型フィールドに対して処理をおこなうには `QUERY BY ATTRIBUTE`、`QUERY SELECTION BY ATTRIBUTE` や `ORDER BY ATTRIBUTE` など、クエリテーマの特定のコマンドも使用することができます。 +You manage Object type variables, fields or expressions using the commands available in the **Objects (Language)** theme or through the object notation (see [Syntax basics](Concepts/dt_object.md#syntax-basics)). Note that specific commands of the Queries theme such as `QUERY BY ATTRIBUTE`, `QUERY SELECTION BY ATTRIBUTE`, or `ORDER BY ATTRIBUTE` can be used to carry out processing on object fields. -オブジェクト記法を使ってアクセスされたそれぞれのプロパティ値は式とみなされます。 4D内で式が期待される場所であれば、どこでもこのような値を使用することができます: +Each property value accessed through the object notation is considered an expression. You can use such values wherever 4D expressions are expected: -- 4Dコード内。メソッド (メソッドエディター) に書いても、外部化(フォーミュラ、PROCESS 4D TAGS あるいは Web Server によって処理される 4D tags ファイル、4D Write Proドキュメントなど) しても使用可能です。 -- デバッガー及びランタイムエクスプローラーの式エリア内。 -- フォームエディターにおいて、フォームオブジェクトのプロパティリスト内。変数あるいは式フィールド内の他、様々なセレクションリストボックス及びカラムの式 (データソース、背景色、スタイル、フォントカラー等) において使用可能です。 +- in 4D code, either written in the methods (Method editor) or externalized (formulas, 4D tags files processed by PROCESS 4D TAGS or the Web Server, export files, 4D Write Pro documents...), +- in the Expression areas of the Debugger and the Runtime explorer, +- in the Property list of the Form editor for form objects: Variable or Expression field as well as various selection list box and columns expressions (Data Source, background color, style, or font color). -## 初期化 +## Initialization -`New object` コマンドを使うなどして、オブジェクトはあらかじめ初期化しておく必要があります。初期化しない場合、プロパティ値の取得や変更はシンタックスエラーとなります。 +Objects must have been initialized, for example using the `New object` command, otherwise trying to read or modify their properties will generate a syntax error. -例: +Example: ```4d - C_OBJECT($obVar) // オブジェクト型の変数の作成 - $obVar:=New object // オブジェクトの初期化と変数への代入 + C_OBJECT($obVar) //creation of an object type 4D variable + $obVar:=New object //initialization of the object and assignment to the 4D variable ``` -### 通常オブジェクトと共有オブジェクト +### Regular or shared object -二種類のオブジェクトを作成することができます: +You can create two types of objects: -- `New object` コマンドを使用して作成する通常 (非共有) コレクション。 通常のオブジェクトは特別なアクセスコントロールをせずに編集可能ですが、プロセス間で共有することはできません。 -- `New shared object` コマンドを使用して作成する共有コレクション。 共有オブジェクトはプロセス間 (プリエンティブ・スレッド含む) で共有可能なオブジェクトです。 共有オブジェクトへのアクセスは `Use...End use` 構造によって管理されています。 詳細な情報については、[共有オブジェクトと共有コレクション](Concepts/shared.md) を参照ください。 +- regular (non-shared) objects, using the `New object` command. These objects can be edited without any specific access control but cannot be shared between processes. +- shared objects, using the `New shared object` command. These objects can be shared between processes, including preemptive threads. Access to these objects is controlled by `Use...End use` structures. For more information, refer to the [Shared objects and collections](Concepts/shared.md) section. -## オブジェクト記法の使用 +## Syntax basics -オブジェクト記法を使うと、トークンのチェーンを通してオブジェクトのプロパティ値にアクセスすることができます。 +Object notation can be used to access object property values through a chain of tokens. -### オブジェクトプロパティ +### Object properties -オブジェクト記法では、オブジェクトプロパティは二通りの方法でアクセスすることができます: +With object notation, object properties can be accessed in two ways: -- "ドット"記号を使用する方法: > object.propertyName +- using a "dot" symbol: > object.propertyName -例: +Example: ```4d employee.name:="Smith" ``` -- 大カッコ内の文字列を使用する方法: > object["propertyName"] +- using a string within square brackets: > object["propertyName"] -例: +Examples: ```4d $vName:=employee["name"] - // または: + //or also: $property:="name" $vName:=employee[$property] ``` -オブジェクトプロパティ値には、オブジェクトやコレクションも設定することが可能です。これらのサブプロパティにアクセスするため、オブジェクト記法では連続した字句を受け入れることができます: +Since an object property value can be an object or a collection, object notation accepts a sequence of symbols to access sub-properties, for example: ```4d $vAge:=employee.children[2].age ``` -オブジェクトを格納、あるいは返すあらゆるランゲージ要素に対してオブジェクト記法を使用できます。たとえば: +Object notation is available on any language element that can contains or returns an object, i.e: -- **オブジェクト** 自身 (変数、フィールド、オブジェクトプロパティ、オブジェクト配列、コレクション要素などに保存されているもの) 例: +- **Objects** themselves (stored in variables, fields, object properties, object arrays, or collection elements). Examples: ```4d - $age:=$myObjVar.employee.age // 変数 - $addr:=[Emp]data_obj.address // フィールド - $city:=$addr.city // オブジェクトプロパティ - $pop:=$aObjCountries{2}.population // オブジェクト配列 - $val:=$myCollection[3].subvalue // コレクション要素 + $age:=$myObjVar.employee.age //variable + $addr:=[Emp]data_obj.address //field + $city:=$addr.city //property of an object + $pop:=$aObjCountries{2}.population //object array + $val:=$myCollection[3].subvalue //collection element ``` -- オブジェクトを返す **4D コマンド** 例: +- **4D commands** that return objects. Example: ```4d $measures:=Get database measures.DB.tables ``` -- オブジェクトを返す **プロジェクトメソッド** 例: +- **Project methods** that return objects. Example: ```4d // MyMethod1 @@ -106,25 +106,25 @@ title: オブジェクト $result:=MyMethod1.a //10 ``` -- **コレクション** 例: +- **Collections** Example: ```4d - myColl.length // コレクションの長さ + myColl.length //size of the collection ``` -### ポインター +### Pointers -**注:** オブジェクトは常に参照として渡されるため、通常はポインターを使用する必要はありません。 オブジェクトを引数として渡す際、4D 内部では自動的にポインターに類似したメカニズムを使うことでメモリの消費を最小限に抑え、引数を編集して返すことを可能にします。 つまり、ポインターは必要ないということです。 それでもポインターを使用したい場合には、プロパティ値はポインターを通してアクセスすることができます。 +**Preliminary Note:** Since objects are always passed by reference, there is usually no need to use pointers. While just passing the object, internally 4D automatically uses a mechanism similar to a pointer, minimizing memory need and allowing you to modify the parameter and to return modifications. As a result, you should not need to use pointers. However, in case you want to use pointers, property values can be accessed through pointers. -ポインターを使ってオブジェクトプロパティにアクセスするには、直接オブジェクトを使用する場合と方法が似ていますが、"ドット" 記号は省略する必要があります。 +Using object notation with pointers is very similar to using object notation directly with objects, except that the "dot" symbol must be omitted. -- オブジェクト記法によるアクセス: +- Direct access: > pointerOnObject->propertyName -- 大カッコを使用する方法: +- Access by name: > pointerOnObject->["propertyName"] -例: +Example: ```4d C_OBJECT(vObj) @@ -135,49 +135,50 @@ title: オブジェクト x:=vPtr->a //x=10 ``` -### Null 値 +### Null value -オブジェクト記法を使用する場合、**null** 値は **Null** コマンドを通してサポートされています。 このコマンドを使用すると、null 値をオブジェクトプロパティやコレクション要素に割り当てたり、それらと比較したりすることができます。例: +When using the object notation, the **null** value is supported though the **Null** command. This command can be used to assign or compare the null value to object properties or collection elements, for example: ```4d myObject.address.zip:=Null If(myColl[2]=Null) ``` -詳細については、`Null` コマンドの説明を参照してください。 +For more information, please refer to the `Null` command description. -### 未定義の値 +### Undefined value -オブジェクトプロパティを評価した結果、未定義の値が生成されることがあります。 未定義の式を読み込んだ、または割り当てようとしたときに 4D は通常、エラーを生成します。 ただし以下の場合には生成されません: +Evaluating an object property can sometimes produce an undefined value. Typically when trying to read or assign undefined expressions, 4D will generate errors. This does not happen in the following cases: -- 未定義のオブジェクトやプロパティ値を読み込むと未定義 (undefined) が返されます。未定義の値を (配列を除く) 変数に割り当てることは、`CLEAR VARIABLE` コマンドを使うのと同じ効果があります: +- Reading a property of an undefined object or value returns undefined; assigning an undefined value to variables (except arrays) has the same effect as calling `CLEAR VARIABLE` with them: ```4d C_OBJECT($o) C_LONGINT($val) $val:=10 //$val=10 - $val:=$o.a // $o.a は未定義 (エラーなし) なため、この値を代入すると変数が初期化されます - // $val=0 + $val:=$o.a //$o.a is undefined (no error), and assigning this value clears the variable + //$val=0 ``` -- 未定義のコレクションの **length** プロパティは 0 を返します: +- Reading the **length** property of an undefined collection produces 0: ```4d - C_COLLECTION($c) // 変数は作成されたが、コレクションは未定義 $size:=$c.length // $size = 0 + C_COLLECTION($c) //variable created but no collection is defined + $size:=$c.length //$size = 0 ``` -- 未定義の値を引数としてプロジェクトメソッドに渡した場合、宣言された引数の型に応じて、0 あるいは "" (空の文字列) へと自動変換されます。 +- An undefined value passed as parameter to a project method is automatically converted to 0 or "" according to the declared parameter type. ```4d C_OBJECT($o) - mymethod($o.a) // 未定義の引数を渡すと + mymethod($o.a) //pass an undefined parameter - // mymethod メソッド内では - C_TEXT($1) // 引数の型はテキスト - // $1 の中身は"" + //In mymethod method + C_TEXT($1) //parameter type is text + // $1 contains "" ``` -- 条件式で、If あるいは Case of キーワードで未定義と評価された場合には、自動的にfalse へと変換されます: +- A condition expression is automatically converted to false when evaluating to undefined with the If and Case of keywords: ```4d C_OBJECT($o) @@ -188,95 +189,95 @@ title: オブジェクト End case ``` -- 未定義の値を既存のオブジェクトプロパティに代入した場合、その値は型に応じて初期化、あるいは消去されます: - - オブジェクト、コレクション、ポインター: Null - - ピクチャー: 空のピクチャー - - ブール: False - - 文字列: "" - - 数値: 0 - - 日付: "オブジェクトではISO日付フォーマットの代わりに日付型を使用する" 設定が有効化されている場合は !00-00-00!、それ以外の場合には "" - - 時間: 0 (ミリ秒単位) - - 未定義、Null: 変化なし +- Assigning an undefined value to an existing object property reinitializes or clears its value, depending on its type: + - Object, collection, pointer: Null + - Picture: Empty picture + - Boolean: False + - String: "" + - Number: 0 + - Date: !00-00-00! if "Use date type instead of ISO date format in objects" setting is enabled, otherwise "" + - Time: 0 (number of ms) + - Undefined, Null: no change ```4d C_OBJECT($o) $o:=New object("a";2) - $o.a:=$o.b // $o.a=0 + $o.a:=$o.b //$o.a=0 ``` -- 未定義の値を存在しないオブジェクトのプロパティへと代入した場合は、何も起こりません。 +- Assigning an undefined value to a non existing object property does nothing. -4Dコード内の式に対して特定の型であることが要求される場合、その式を適切な 4Dキャストコマンド (`String`, `Num`, `Date`, `Time`, `Bool`) で囲うことで、たとえ未定義に評価されたとしても正しい型を確実に得ることができます。 これらのコマンドは式が未定義と評価された場合に、指定された型の空の値を返します。 たとえば: +When expressions of a given type are expected in your 4D code, you can make sure they have the correct type even when evaluated to undefined by surrounding them with the appropriate 4D cast command: `String`, `Num`, `Date`, `Time`, `Bool`. These commands return an empty value of the specified type when the expression evaluates to undefined. For example: ```4d - $myString:=Lowercase(String($o.a.b)) // 未定義の場合でもコード内でエラーが起きないように - // 文字列の値が得られるようにします + $myString:=Lowercase(String($o.a.b)) //make sure you get a string value even if undefined + //to avoid errors in the code ``` -## オブジェクトプロパティ識別子 +## Object property identifiers -トークンメンバー名 (つまり、オブジェクト記法を使用してアクセスしたオブジェクトプロパティ名) には、[標準の 4Dオブジェクト名](identifiers.md) より厳格な規制があります。 プロパティ名は JavaScriptの字句文法に則ってなければなりません ([ECMA Script standard](https://www.ecma-international.org/ecma-262/5.1/#sec-7.6) 参照): +Token member names (i.e., object property names accessed using the object notation) are more restrictive than [standard 4D object names](identifiers.md). They must comply with JavaScript Identifier Grammar (see [ECMA Script standard](https://www.ecma-international.org/ecma-262/5.1/#sec-7.6)): -- 1文字目は、文字、アンダースコア(_)、あるいはドル記号 ($) でなければなりません。 -- その後の文字には、文字、数字、アンダースコア、またはドル記号を使用することができます (スペース文字は使用することはできません)。 -- 大文字・小文字は区別されます。 +- the first character must be a letter, an underscore (_), or a dollar sign ($), +- subsequent characters may be any letter, digit, an underscore or dollar sign (space characters are NOT allowed), +- they are case sensitive. -**注:** +**Note:** -- テーブルフィールドをコレクションインデックスとして使用すること (例: a.b[[Table1]Id] ) は許可されていません。 この場合には媒介として変数を使用する必要があります。 -- 大カッコでくくった文字列を使用してオブジェクト属性を作成すると、ECMAスクリプトのルールを無視することができます。 たとえば、`$o["My Att"]` という属性はスペースを含みますが、4D において有効です。 しかしながらこの場合、この属性に対してドット記法や自動補完機能を使用することは不可能です。 +- Using a table field as a collection index, for example a.b[[Table1]Id], is not allowed. You must use an intermediary variable. +- Creating object attributes using a string in square brackets allows you to override the ECMA Script rules. For example, the `$o["My Att"]` attribute is valid in 4D, despite the space. In this case, however, it will not be possible to use dot notation and autocomplete features with this attribute. -## 例題 +## Examples -オブジェクト記法を使用すると、オブジェクトを扱う際の 4Dコードを単純化することができます。 同時に、コマンドベースの記法も引き続き完全にサポートされています。 +Using object notation simplifies the 4D code while handling objects. Note however that the command-based notation is still fully supported. -- オブジェクトの読み書き (この例題ではオブジェクト記法とコマンド記法を比較します): +- Writing and reading objects (this example compares object notation and command notation): ```4d - // オブジェクト記法を使用 - C_OBJECT($myObj) // 4Dオブジェクト変数を宣言 - $myObj:=New object // オブジェクト作成し、変数に代入 + // Using the object notation + C_OBJECT($myObj) //declares a 4D variable object + $myObj:=New object //creates an object and assigns to the variable $myObj.age:=56 - $age:=$myObj.age // 56 + $age:=$myObj.age //56 - // コマンド記法を使用 - C_OBJECT($myObj2) // 4Dオブジェクト変数を宣言 - OB SET($myObj2;"age";42) // オブジェクトを作成し、ageプロパティを追加 - $age:=OB Get($myObj2;"age") // 42 + // Using the command notation + C_OBJECT($myObj2) //declares a 4D variable object + OB SET($myObj2;"age";42) //creates an object and adds the age property + $age:=OB Get($myObj2;"age") //42 - // もちろん両方の記法を混用することもできます + // Of course, both notations can be mixed C_OBJECT($myObj3) OB SET($myObj3;"age";10) - $age:=$myObj3.age // 10 + $age:=$myObj3.age //10 ``` -- プロパティの作成と、オブジェクトを含む値の代入: +- Create a property and assign values, including objects: ```4d C_OBJECT($Emp) $Emp:=New object - $Emp.city:="London" // cityプロパティを作成し、その値を"London"に設定します - $Emp.city:="Paris" // cityプロパティを変更します + $Emp.city:="London" //creates the city property and sets its value to "London" + $Emp.city:="Paris" //modifies the city property $Emp.phone:=New object("office";"123456789";"home";"0011223344") - // phoneプロパティを作成し、その値にオブジェクトを設定します + //creates the phone property and sets its value to an object ``` -- オブジェクト記法を使用すると、サブオブジェクトの値を簡単に取得できます: +- Get a value in a sub-object is very simple using the object notation: ```4d - $vCity:=$Emp.city // "Paris" - $vPhone:=$Emp.phone.home // "0011223344" + $vCity:=$Emp.city //"Paris" + $vPhone:=$Emp.phone.home //"0011223344" ``` -- 大カッコ [ ] を使用すると文字列を使ってプロパティにアクセスできます: +- You can access properties as strings using the [ ] operator ```4d - $Emp["city"]:="Berlin" // city プロパティを変更 - // これは変数を通してプロパティを作成する場合に便利です + $Emp["city"]:="Berlin" //modifies the city property + //this can be useful for creating properties through variables C_TEXT($addr) $addr:="address" For($i;1;4) $Emp[$addr+String($i)]:="" End for - // $Emp object には4つの空のプロパティ "address1...address4" が作成されました + // creates 4 empty properties "address1...address4" in the $Emp object ``` From 4987c8b8459319a5c3b399cce83c89d30de7ae04 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:58:50 +0100 Subject: [PATCH 247/311] New translations cf_branching.md (Japanese) --- .../ja/Concepts/cf_branching.md | 109 +++++++++--------- 1 file changed, 52 insertions(+), 57 deletions(-) diff --git a/website/translated_docs/ja/Concepts/cf_branching.md b/website/translated_docs/ja/Concepts/cf_branching.md index 88bda254586612..ef48b8be0fc65f 100644 --- a/website/translated_docs/ja/Concepts/cf_branching.md +++ b/website/translated_docs/ja/Concepts/cf_branching.md @@ -1,14 +1,14 @@ --- id: branching -title: 分岐構造 +title: Branching structures --- -分岐構造は、条件をテストし、その結果に基づいて異なる流れにメソッドを導きます。 +A branching structure allows methods to test a condition and take alternative paths, depending on the result. ## If...Else...End if -`If...Else...End if` による制御フロー構造の正式な構文は以下のようになります: +The formal syntax of the `If...Else...End if` control flow structure is: ```4d If(Boolean_Expression) @@ -18,16 +18,16 @@ title: 分岐構造 End if ``` -`Else` 部分はオプションであり、省略して以下のように記述できます: +Note that the `Else` part is optional; you can write: ```4d If(Boolean_Expression) statement(s) End if ``` -`If...Else...End if` 構造は、条件 (ブール式) が true か false かによって、処理の選択肢を2つメソッドに与えます。 ブール式が true の場合は、テストのすぐ後のステートメントを実行し、 ブール式が FALSE の場合には、Else 文のすぐ後のステートメントを実行します。 任意の `Else` が省略されていた場合、`End if` のすぐ後のステートメント (あれば) へと実行が続行されます。 +The `If...Else...End if` structure lets your method choose between two actions, depending on whether a test (a Boolean expression) is TRUE or FALSE. When the Boolean expression is TRUE, the statements immediately following the test are executed. If the Boolean expression is FALSE, the statements following the Else statement are executed. The `Else` statement is optional; if you omit Else, execution continues with the first statement (if any) following the `End if`. -ブール式は常に全体が評価されるという点に注意してください。 たとえば、以下のような場合: +Note that the Boolean expression is always fully evaluated. Consider in particular the following test: ```4d If(MethodA & MethodB) @@ -35,7 +35,7 @@ title: 分岐構造 End if ``` -この場合、両方のメソッドが true である場合に限り、式は true になります。 しかしながら _MethodA_ が false であっても、4Dは_MethodB_ も評価するため、これは時間の無駄になります。 この場合には、以下のような構造を使用するほうが賢明といえます: +he expression is TRUE only if both methods are TRUE. However, even if _MethodA_ returns FALSE, 4D will still evaluate _MethodB_, which is a useless waste of time. In this case, it is more interesting to use a structure like: ```4d If(MethodA) @@ -45,21 +45,21 @@ title: 分岐構造 End if ``` -上記の結果はほぼ同じで、_MethodB_ は必要な場合にのみ評価されます。 +The result is similar and _MethodB_ is evaluated only if necessary. -### 例題 +### Example ```4d - // ユーザーに名前の入力を求めます - $Find:=Request("名前を入力してください") + // Ask the user to enter a name + $Find:=Request(Type a name) If(OK=1) QUERY([People];[People]LastName=$Find) Else - ALERT("名前が入力されませんでした") + ALERT("You did not enter a name.") End if ``` -**Tip:** 一方の条件に実行ステートメントがない分岐処理を書くこともできます。 下のようなコードはどちらも有効です: +**Tip:** Branching can be performed without statements to be executed in one case or the other. When developing an algorithm or a specialized application, nothing prevents you from writing: ```4d If(Boolean_Expression) @@ -67,7 +67,7 @@ title: 分岐構造 statement(s) End if ``` -または: +or: ```4d If(Boolean_Expression) @@ -78,7 +78,7 @@ title: 分岐構造 ## Case of...Else...End case -`Case of...Else...End case` による制御フロー構造の正式な構文は以下のようになります: +The formal syntax of the `Case of...Else...End case` control flow structure is: ```4d Case of :(Boolean_Expression) @@ -96,7 +96,7 @@ title: 分岐構造 End case ``` -`Else` 部分はオプションであり、省略して以下のように記述できます: +Note that the `Else` part is optional; you can write: ```4d Case of :(Boolean_Expression) @@ -111,85 +111,80 @@ title: 分岐構造 statement(s) End case ``` -`If...Else...End if` と同様に、`Case of...Else...End case` 構造も処理の選択肢をメソッドに与えます。 `If...Else...End` との違いは、`Case of...Else...End case` 構造が複数のブール式を評価し、その中から最初に true となるステートメントを実行することです。 +As with the `If...Else...End if` structure, the `Case of...Else...End case` structure also lets your method choose between alternative actions. Unlike the `If...Else...End` if structure, the `Case of...Else...End case` structure can test a reasonable unlimited number of Boolean expressions and take action depending on which one is TRUE. -ブール式の前にはそれぞれコロン (`:`) を付けます。 コロンとブール式の組み合わせをケースと呼びます。 例えば以下の行はケースです: +Each Boolean expression is prefaced by a colon (`:`). This combination of the colon and the Boolean expression is called a case. For example, the following line is a case: ```4d :(bValidate=1) ``` -最初に true になったケースに続く (次のケースまでの) ステートメントだけが実行されます。 true になるケースがない場合、どのステートメントも実行されません (`Else` 文が指定されていない場合) 。 +Only the statements following the first TRUE case (and up to the next case) will be executed. If none of the cases are TRUE, none of the statements will be executed (if no `Else` part is included). -最後のケースの後に Else 文を含むことができます。 すべてのケースが FALSE の場合に、`Else` 文の後のステートメントが実行されます。 +You can include an Else statement after the last case. If all of the cases are FALSE, the statements following the `Else` will be executed. -### 例題 +### Example -下記の例は数値変数を判定し、対応する数字をアラートボックスに表示します: +This example tests a numeric variable and displays an alert box with a word in it: ```4d Case of - :(vResult=1) // 数値が1の場合 - ALERT("一です。") // 1のアラートボックスを表示します - :(vResult=2) // 数値が2の場合 - ALERT("二です。") // 2のアラートボックスを表示します - :(vResult=3) // 数値が3の場合 - ALERT("三です。") // 3のアラートボックスを表示します - Else // 数値が1,2,3のいずれでもない場合 - ALERT("一、二、三のいずれでもありません。") + :(vResult=1) //Test if the number is 1 + ALERT("One.") //If it is 1, display an alert + :(vResult=2) //Test if the number is 2 + ALERT("Two.") //If it is 2, display an alert + :(vResult=3) //Test if the number is 3 + ALERT("Three.") //If it is 3, display an alert + Else //If it is not 1, 2, or 3, display an alert + ALERT("It was not one, two, or three.") End case ``` -比較するために、同じことを `If...Else...End if` 構文で記述すると以下のようになります。 +For comparison, here is the `If...Else...End if` version of the same method: ```4d - If(vResult=1) // 数値が1の場合 - ALERT("一です。") // 1のアラートボックスを表示します + If(vResult=1) //Test if the number is 1 + ALERT("One.") //If it is 1, display an alert Else - If(vResult=2) // 数値が2の場合 - ALERT("二です。") // 2のアラートボックスを表示します + If(vResult=2) //Test if the number is 2 + ALERT("Two.") //If it is 2, display an alert Else - If(vResult=3) // 数値が3の場合 - ALERT("三です。") // 3のアラートボックスを表示します - Else // 数値が1,2,3のいずれでもない場合 - ALERT("一、二、三のいずれでもありません。") + If(vResult=3) //Test if the number is 3 + ALERT("Three.") //If it is 3, display an alert + Else //If it is not 1, 2, or 3, display an alert + ALERT("It was not one, two, or three.") End if End if End if ``` -`Case of...Else...End case` 構造は、最初に true になったケースだけを実行します。 2つ以上のケースが true の場合は、最初に true になったケースのステートメントだけを実行します。 +Remember that with a `Case of...Else...End case` structure, only the first TRUE case is executed. Even if two or more cases are TRUE, only the statements following the first TRUE case will be executed. -したがって、階層的なテストを実行するときには、階層上で低い位置にある条件がテスト順序で先に記述されていることを確認する必要があります。 以下の例では、ケース2が true の場合、ケース1も必ず true であるため、ケース1は後に位置すべきです。 このままの順序では、ケース2のステートメントはけっして実行されません: +Consequently, when you want to implement hierarchical tests, you should make sure the condition statements that are lower in the hierarchical scheme appear first in the test sequence. For example, the test for the presence of condition1 covers the test for the presence of condition1&condition2 and should therefore be located last in the test sequence. For example, the following code will never see its last condition detected: ```4d Case of :(vResult=1) - ... - // ステートメントなど - :((vResult=1) & (vCondition#2)) // このケースが判定されることはありません - ... - // ステートメントなど + ... //statement(s) + :((vResult=1) & (vCondition#2)) //this case will never be detected + ... //statement(s) End case ``` -vResult = 1の判定により他の条件を見る前に分岐するので、第2のケースが判定されることはありません。 コードが正しく実行されるためには次のように書きます: +In the code above, the presence of the second condition is not detected since the test "vResult=1" branches off the code before any further testing. For the code to operate properly, you can write it as follows: ```4d Case of - :((vResult=1) & (vCondition#2)) // このケースが先に判定されます - ... - // ステートメントなど + :((vResult=1) & (vCondition#2)) //this case will be detected first + ... //statement(s) :(vResult=1) - ... - -// ステートメントなど + ... //statement(s) End case ``` -さらに階層的なテストを実行したい場合、コードも階層化する必要があります。 +Also, if you want to implement hierarchical testing, you may consider using hierarchical code. -**Tip:** 分岐構造において、ケースに続くステートメントの記述は必須ではありません。 下のようなコードはどちらも有効です: +**Tip:** Branching can be performed without statements to be executed in one case or another. When developing an algorithm or a specialized application, nothing prevents you from writing: ```4d Case of :(Boolean_Expression) @@ -203,7 +198,7 @@ vResult = 1の判定により他の条件を見る前に分岐するので、第 End case ``` -または: +or: ```4d Case of :(Boolean_Expression) @@ -217,7 +212,7 @@ vResult = 1の判定により他の条件を見る前に分岐するので、第 End case ``` -または: +or: ```4d Case of Else From 6e3647a47ee813e485f63da7062dde4d4b2f83c3 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:58:53 +0100 Subject: [PATCH 248/311] New translations restore.md (Japanese) --- website/translated_docs/ja/Backup/restore.md | 54 ++++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/website/translated_docs/ja/Backup/restore.md b/website/translated_docs/ja/Backup/restore.md index 039fcebc5626ec..e1c690cc8faa88 100644 --- a/website/translated_docs/ja/Backup/restore.md +++ b/website/translated_docs/ja/Backup/restore.md @@ -1,56 +1,56 @@ --- id: restore -title: 復元 +title: Restore --- -問題が発生したときは、一連のアプリケーションファイル全体を復元することができます。 主に 2つのカテゴリの問題が発生する可能性があります: +4D allows you to restore entire sets of application data in case of any incidents, regardless of the cause of the incident. Two primary categories of incidents can occur: -- アプリケーションが使用中に予期せず終了された。 この問題は電力の切断、システムのエラー等により発生する可能性があります。 この場合、問題が発生した瞬間のデータキャッシュの状態により、アプリケーションの復旧には異なる手順が必要となります: - - キャッシュが空の場合、アプリケーションを問題なく開くことができます。 アプリケーションに対しておこなわれた変更はデータファイルに記録されています。 この場合には、特別な手順は必要ありません。 - - キャッシュに未保存の処理が含まれている場合、データファイルは損傷していませんが、カレントのログファイルを統合する必要があります。 - - キャッシュの内容をデータファイルに書き込み中だった場合、データファイルはおそらく損傷しています。 最新のバックアップから復元をおこない、カレントのログファイルを統合する必要があります。 +- The unexpected stoppage of an application while in use. This incident can occur because of a power outage, system element failure, etc. In this case, depending on the current state of the data cache at the moment of the incident, the restore of the application can require different operations: + - If the cache was empty, the application opens normally. Any changes made in the application were recorded. This case does not require any particular operation. + - If the cache contains operations, the data file is intact but it requires integrating the current log file. + - If the cache was in the process of being written, the data file is probably damaged. The last backup must be restored and the current log file must be integrated. -- アプリケーションファイルを失った。 この問題はアプリケーションが配置されたディスク上のセクターが読み書き不能になった、あるいはウィルス、操作ミス等により発生します。 最新のバックアップから復元をおこない、カレントのログファイルを統合する必要があります。 問題発生後にアプリケーションが損傷しているかどうかを見分けるには、4D でアプリケーションを起動します。 4Dは自己検証をおこない、必要な復元処理手順を示します。 自動モードの場合、この処理はユーザーのアクションなしで直接実行されます。 定期的なバックアップがおこなわれていれば、4D の復元ツールを使用して (ほとんどの場合) 問題が発生する直前の状態までアプリケーションを復旧することができます。 +- The loss of application file(s). This incident can occur because of defective sectors on the disk containing the application, a virus, manipulation error, etc. The last backup must be restored and then the current log file must be integrated. To find out if an application was damaged following an incident, simply relaunch the application using 4D. The program performs a self-check and details the necessary restore operations to perform. In automatic mode, these operations are performed directly without any intervention on the part of the user. If a regular backup strategy was put into place, the 4D restore tools will allow you to recover (in most cases) the application in the exact state it was in before the incident. -> 問題発生後に、自動で 4Dのアプリケーション復旧処理を起動することができます。 このメカニズムは、ストラクチャー設定の **バックアップ/バックアップ&復旧** ページで利用できるオプションを使用して管理します。 詳細は [自動復元](settings.md#自動復元) を参照してください。 -> 問題が、データに対しておこなわれた不適切な処理の結果引き起こされた場合 (たとえば誤ってレコードを削除した等)、ログファイルの "ロールバック" 機能を使用してデータファイルを復旧できます。 この機能は MSC の [ロールバック](MSC/rollback.md) ページから利用できます。 +> 4D can launch procedures automatically to recover applications following incidents. These mechanisms are managed using two options available on the **Backup/Backup & Restore** page of the Settings. For more information, refer to the [Automatic Restore](settings.md#automatic-restore) paragraph. +> If the incident is the result of an inappropriate operation performed on the data (deletion of a record, for example), you can attempt to repair the data file using the "rollback" function in the log file. This function is available on the [Rollback](MSC/rollback.md) page of the MSC. -## 手動でバックアップから復元する (標準ダイアログ) +## Manually restoring a backup (standard dialog) -バックアップモジュールを使用して生成されたアーカイブの内容を、手動で復元することができます。 手動による復元は、たとえばアーカイブ全体 (ストラクチャーファイルや添付されたファイル) を再生成したい場合や、アーカイブの内容を見たい場合などに必要となります。 手動復元の際に、カレントログファイルを統合することもできます。 +You can restore the contents of an archive generated by the backup module manually. A manual restore may be necessary, for instance, in order to restore the full contents of an archive (project files and enclosed attached files), or for the purpose of carrying out searches among the archives. The manual restore can also be performed along with the integration of the current log file. -バックアップの手動復元は、標準のファイルを開くダイアログボックス、あるいは Maintenance and Security Center (MSC) の [復元](MSC/restore) ページからおこなうことができます。 MSC を使用した復元では詳細なオプション設定をおこなったり、アーカイブの内容をプレビューしたりすることができます。 他方、開かれているアプリケーションに関連したアーカイブのみを復元できます。 +The manual restore of backups can be carried out either via the standard Open document dialog box, or via the [Restore](MSC/restore) page of the MSC. Restoring via the MSC provides more options and allows the archive contents to be previewed. On the other hand, only archives associated with the open application can be restored. -標準ダイアログボックスを使用してアプリケーションを手動復元するには: +To restore an application manually via a standard dialog box: -1. 4Dアプリケーションを開始し、**ファイル** メニューから **復元...** を選択します。 アプリケーションプロジェクトが開かれている必要はありません。 または
    4Dメソッドから `RESTORE` コマンドを実行します。 標準のファイルを開くダイアログボックスが表示されます。 -2. 復元するバックアップファイル (.4bk) またはログバックアップファイル (.4bl) を選択し、**開く** をクリックします。 復元したファイルを配置する場所を指定するために、以下のダイアログボックスが表示されます: デフォルトで 4Dは アーカイブと同階層にアーカイブ名と同じ名前 (拡張子なし) のフォルダーを作成し、ファイルを復元します。 場所が表示されているエリアをクリックして、パスを確認することができます: +1. Choose **Restore...** in the 4D application **File** menu. It is not mandatory that an application project be open. OR Execute the `RESTORE` command from a 4D method. A standard Open file dialog box appears. +2. Select a backup file (.4bk) or a log backup file (.4bl) to be restored and click **Open**. A dialog box appears, which allows you to specify the location where files will be restored. By default, 4D restores the files in a folder named *Archivename* (no extension) located next to the archive. You can display the path: ![](assets/en/Backup/backup07.png) -**[...]** ボタンをクリックして異なる場所を指定することもできます。 -3. **復元** ボタンをクリックします。 4D は指定されたすべてのバックアップファイルを展開します。 カレントログファイル、または、バックアップファイルと同じ番号を持つログバックアップファイルが同じフォルダーに存在する場合、4D はその内容を検証します。 データファイル中に無い処理がログファイルに含まれていれば、その処理を統合するかどうか 4D が尋ねてきます。 **データベースが完全でない場合、最新のログを統合する** オプションが選択されている場合、統合処理は自動でおこなわれます ([自動復元](settings.md#自動復元) 参照)。 +You can also click on the **[...]** button to specify a different location. +3. Click on the **Restore** button. 4D extracts all backup files from the specified location. If the current log file or a log backup file with the same number as the backup file is stored in the same folder, 4D examines its contents. If it contains operations not present in the data file, the program asks you if you want to integrate these operations. Integration is done automatically if the **Integrate last log file...** option is checked (see [Automatic Restore](settings.md#automatic-restore)). -4. (任意) **OK** をクリックして、復元したアプリケーションにログファイルを統合します。 復元と統合が正しく実行されると、4D は処理が成功したことを通知するダイアログを表示します。 -5. **OK** をクリックします。 +4.(Optional) Click **OK** to integrate the log file into the restored application. If the restore and integration were carried out correctly, 4D displays a dialog box indicating that the operation was successful. +5. Click **OK**. -保存先フォルダーが表示されます。 バックアップ時のファイルの位置にかかわらず、4D はすべてのバックアップファイルをこのフォルダーに配置します。 これにより、ファイルを探す手間が省けます。 +The destination folder is displayed. During the restore, 4D places all backup files in this folder, regardless of the position of the original files on the disk when the backup starts. This way your files will be easier to find. -> データファイルの関連要素 (ファイルや `Settings` フォルダー) は保存先フォルダー内の `Data` サブフォルダー内に自動的に復元されます。 +> Any content related to the data file (files and `Settings` folder) are automatically restored in a `Data` subfolder within the destination folder. -## 手動でバックアップから復元する (MSC) +## Manually restoring a backup (MSC) -Maintenance and Security Center (MSC) の [復元](MSC/restore.md)ページから、カレントアプリケーションのアーカイブを手動で復元できます。 +You can manually restore an archive of the current application using the [Restore page](MSC/restore.md) of the Maintenance and Security Center (MSC). -## 手動でログを統合する +## Manually integrating the log -MSC の復元ページでログファイルの自動統合を選択していない場合 ([複数のログファイルを連続して統合する](MSC/restore.md#successive-intergration-of-several-data-log-files) 参照)、データファイルに保存されていない処理がログファイル中に見つかると、4D はアプリケーションを開く際に警告ダイアログボックスを表示します。 +If you have not checked the option for the automatic integration of the log file on the Restore page of the MSC (see [Successive integration of several log files](MSC/restore.md#successive-intergration-of-several-data-log-files)), a warning dialog box appears during the opening of the application when 4D notices that the log file contains more operations than have been carried out in the data file. ![](assets/en/Backup/backup08.png) -> このメカニズムを機能させるために、4D はカレントの場所にあるログファイルにアクセスできなければなりません。 +> In order for this mechanism to work, 4D must be able to access the log file in its current location. -カレントログファイルを統合するかしないかを選択することができます。 カレントログファイルを統合しないことにより、データ中に作成されたエラーを再生成しないようにすることもできます。 \ No newline at end of file +You can choose whether or not to integrate the current log file. Not integrating the current log file allows you to avoid reproducing errors made in the data. \ No newline at end of file From 66e543511154b6c8eea810b063b0a02315f0d9e7 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:58:55 +0100 Subject: [PATCH 249/311] New translations settings.md (Japanese) --- website/translated_docs/ja/Backup/settings.md | 148 +++++++++--------- 1 file changed, 74 insertions(+), 74 deletions(-) diff --git a/website/translated_docs/ja/Backup/settings.md b/website/translated_docs/ja/Backup/settings.md index 64cb91c80be2b8..44298ffb33ced2 100644 --- a/website/translated_docs/ja/Backup/settings.md +++ b/website/translated_docs/ja/Backup/settings.md @@ -1,126 +1,126 @@ --- id: settings -title: バックアップ設定 +title: Backup Settings --- -バックアップ設定の定義は、ストラクチャー設定ダイアログボックス内で 3ページにわたっています。 次の設定がおこなえます: +Backup settings are defined through three pages in the Settings dialog box. You can set: -- 自動バックアップ用のスケジューラー設定 -- 各バックアップに含めるファイル -- 自動タスクの実行を可能にする高度な設定 +- the scheduler for automatic backups +- the files to include in every backup +- the advanced features allowing to execute automatic tasks -> このダイアログボックスで定義された設定は *Backup.4DSettings* ファイルに書き込まれ、[Settings フォルダー](Project/architecture.md#settings-フォルダー) に保存されます。 +> Settings defined in this dialog box are written in the *Backup.4DSettings* file, stored in the [Settings folder](Project/architecture.md#settings-folder). -## スケジューラー +## Scheduler -4D や 4D Server で開かれているアプリケーションのバックアップを自動化することができます (クライアントマシンが接続されている必要はありません)。 これはバックアップ周期 (時間、日、週、月単位等) を設定することによりおこないます。現在のバックアップ設定に基づき、4D は自動でバックアップを実行します。 +You can automate the backup of applications opened with 4D or 4D Server (even when no client machines are connected). This involves setting a backup frequency (in hours, days, weeks or months); for each session, 4D automatically starts a backup using the current backup settings. -バックアップが実行されるべきときにアプリケーションが起動されていなかった場合には、次に起動されたとき 4D はバックアップが失敗したものと認識し、ストラクチャー設定の再試行設定を適用します ([バックアップ中に問題が発生した場合](backup.md#バックアップ中に問題が発生した場合) 参照)。 +If this application was not launched at the theoretical moment of the backup, the next time 4D is launched, it considers the backup as having failed and proceeds as set in the Settings (refer to [Handling backup issues](backup.md#handling-backup-issues)). -バックアップのスケジュール設定は、ストラクチャー設定の **バックアップ/スケジューラー** ページでおこないます: +The scheduler backup settings are defined on the **Backup/Scheduler** page of the Structure Settings: ![](assets/en/Backup/backup02.png) -このページにあるオプションを使用して、アプリケーションの自動バックアップのスケジュールを設定できます。 標準のクイック設定、または完全なカスタマイズを選択できます。 **自動バックアップ** メニューでの選択に基づき、さまざまなオプションが表示されます: +The options found on this tab let you set and configure scheduled automatic backups of the application. You can choose a standard quick configuration or you can completely customize it. Various options appear depending on the choice made in the **Automatic Backup** menu: -- **しない**: スケジュールに基づくバックアップは無効となります。 -- **毎時**: 次の時間以降、毎時間ごとに自動バックアップをおこないます。 -- **毎日**: 日に一回自動バックアップをおこないます。 バックアップを何時に開始するかを設定します。 -- **毎週**: 週に一回自動バックアップをおこないます。 バックアップを開始する曜日と時刻を入力するエリアが表示されます。 -- **毎月**: 月に一回自動バックアップをおこないます。 バックアップを開始する日付と時刻を入力するエリアが表示されます。 -- **カスタマイズ**: 自動バックアップを詳細にスケジュールする場合に使用します。 このオプションを選択すると、複数の入力エリアが表示されます: - + **X 時間ごと**: 時間単位でバックアップの間隔をスケジュールできます。 1から24までの値を設定できます。 - - **X 日ごと**: 日単位でバックアップの間隔をスケジュールできます。 たとえば、毎日バックアップをおこなうには 1 と設定します。 このオプションを選択した場合、バックアップが開始される時刻を設定しなければなりません。 - - **X 週ごと**: 週単位でバックアップの間隔をスケジュールできます。 たとえば、毎週バックアップをおこなうには 1 と設定します。 このオプションを選択した場合、バックアップを開始する曜日と時刻を設定しなければなりません。 複数の曜日を選択することもできます。 たとえば、毎週水曜日と金曜日にバックアップをするようプログラムできます。 - - **X 月ごと**: 月単位でバックアップの間隔をスケジュールできます。 たとえば、毎月バックアップをおこなうには 1 と設定します。 このオプションを選択した場合、バックアップを開始する日付と時刻を設定しなければなりません。 +- **Never**: The scheduled backup feature is disabled. +- **Every Hour**: Programs an automatic backup every hour, starting with the next hour. +- **Every Day**: Programs an automatic backup every day. You can then enter the time when the backup should start. +- **Every Week**: Programs an automatic backup every week. Two additional entry areas let you indicate the day and time when the backup should start. +- **Every Month**: Programs an automatic backup every month. Two additional entry areas let you indicate the day of the month and the time when the backup should start. +- **Personalized**: Used to configure "tailormade" automatic backups. When you select this option, several additional entry areas appear: + + **Every X hour(s)**: Allows programming backups on an hourly basis. You can enter a value between 1 and 24. + - **Every X day(s) at x**: Allows programming backups on a daily basis. For example, enter 1 if you want to perform a daily backup. When this option is checked, you must enter the time when the backup should start. + - **Every X week(s) day at x**: Allows programming backups on a weekly basis. Enter 1 if you want to perform a weekly backup. When this option is checked, you must enter the day(s) of the week and the time when the backup should start. You can select several days of the week, if desired. For example, you can use this option to set two weekly backups: one on Wednesday and one on Friday. + - **Every X month(s), Xth Day at x**: Allows programming backups on a monthly basis. Enter 1 if you want to perform a monthly backup. When this option is checked, you must indicate the day of the month and the time when the backup should start. -## バックアップ設定 +## Configuration -ストラクチャー設定のバックアップ/設定ページではバックアップやログファイルの有効化/無効化、および保存先を設定できます。 これらのパラメーターは、4D や 4D Server で開かれる各アプリケーションごとに設定されます。 +The Backup/Configuration page of the Structure Settings lets you set the backup files and their location, as well as that of the log file. These parameters are specific to each application opened by 4D or 4D Server. ![](assets/en/Backup/backup03.png) -> **4D Server**: これらのパラメーターは 4D Server マシン上でのみ設定できます。 +> **4D Server:** These parameters can only be set from the 4D Server machine. -### 内容 -このエリアでは、次回のバックアップ時にコピー対象とするファイルやフォルダーを指定します。 +### Content +This area allows you to set which files and/or folders to copy during the next backup. -- **データ**: アプリケーションのデータファイル。 このオプションが選択されている場合、次のものがデータとともにバックアップされます: - - データベースのカレントログファイル (あれば) - - [データファイルの隣に置かれた](Project/architecture.md#settings-フォルダー) `Settings` フォルダー (あれば)。これは *データファイル用のユーザー設定* を格納しています。 -- **ストラクチャー**: アプリケーションの Project フォルダーとファイル。 プロジェクトがコンパイルされている場合には、このオプションは .4dz ファイルをバックアップします。 このオプションがチェックされていると、[Project フォルダーと同階層に置かれた](Project/architecture.md#settings-フォルダー-1) `Settings` フォルダーが自動でバックアップされます。これは、*ユーザー設定* を格納しています。 -- **ユーザーストラクチャー(バイナリデータベースのみ)**: *廃止予定* -- **添付**: このエリアでは、アプリケーションと同時にバックアップの対象とするファイルやフォルダーを指定します。 ここではどのようなタイプのファイル (ドキュメントやプラグイン、テンプレート、ラベル、レポート、ピクチャーなど) でも指定できます。 個々のファイル、または丸ごとバックアップするフォルダーを個々に設定できます。 添付エリアには、設定されたファイルのパスが表示されます。 - - **削除**: 選択したファイルを添付エリアから取り除きます。 - - **フォルダー追加...**: バックアップに追加するフォルダーを選択するダイアログボックスを表示します。 復元の場合、フォルダーがその内容物とともに復元されます。 アプリケーションファイルを含むフォルダーを除き、すべてのフォルダーやマシンに接続されたボリュームを選択できます。 - - **ファイル追加...**: バックアップに追加するファイルを選択するダイアログボックスを表示します。 +- **Data**: Application data file. When this option is checked, the following elements are automatically backed up at the same time as the data: + - the current log file of the application (if it exists), + - the full `Settings` folder located [next to the data file](Project/architecture.md#settings-folder) (if it exists), i.e. the *user settings for data*. +- **Structure**: Application project folders and files. In cases where projects are compiled, this option allows you to backup the .4dz file. When this option is checked, the full `Settings` folder located [at the same level as the Project folder](Project/architecture.md#settings-folder-1), i.e. the *user settings*, is automatically backed up. +- **User Structure File (only for binary database)**: *deprecated feature* +- **Attachments**: This area allows you to specify a set of files and/or folders to be backed up at the same time as the application. These files can be of any type (documents or plug-in templates, labels, reports, pictures, etc.). You can set either individual files or folders whose contents will be fully backed up. Each attached element is listed with its full access path in the “Attachments” area. + - **Delete**: Removes the selected file from the list of attached files. + - **Add folder...**: Displays a dialog box that allows selecting a folder to add to the backup. In the case of a restore, the folder will be recovered with its internal structure. You can select any folder or volume connected to the machine, with the exception of the folder containing the application files. + - **Add file...**: Displays a dialog box that allows you to select a file to add to the backup. -### バックアップファイル保存先 +### Backup File Destination Folder -このエリアではバックアップファイルの格納場所を確認したり、変更したりできます。 +This area lets you view and change the location where backup files as well as log backup files (where applicable) will be stored. -エリアをクリックすると、ファイルの場所がポップアップで表示されます。 +To view the location of the files, click in the area in order to display their pathname as a pop-up menu. -バックアップファイルの格納場所を変更するには、**[...]** ボタンをクリックします。 選択ダイアログが表示され、バックアップファイルを配置するフォルダーやディスクを選択できます。 "使用状況" と "空き容量" エリアは、選択したフォルダーが存在するディスクの状態を自動で表示します。 +To modify the location where these files are stored, click the **...** button. A selection dialog box appears, which allows you to select a folder or disk where the backups will be placed. The "Used Space" and "Free Space" areas are updated automatically and indicate the remaining space on the disk of the selected folder. -### ログ管理 +### Log management -**ログを使用** オプションが選択されていると、アプリケーションはログファイルを使用します。 ログファイルの場所はオプションの下に表示されます。 このオプションが選択されている場合、ログファイルなしでアプリケーションを開くことはできません。 +The **Use Log** option, when checked, indicates that the application uses a log file. Its pathname is specified below the option. When this option is checked, it is not possible to open the application without a log file. -デフォルトでは、4D で作成されたすべてのプロジェクトでログファイルが使用されます (**環境設定** の **一般ページ** 内でチェックされている **ログを使用** オプションです)。 ログファイルには *data.journal* のように名前が付けられ、Data フォルダー内に置かれます。 +By default, any project created with 4D uses a log file (option **Use Log File** checked in the **General Page** of the **Preferences**). The log file is named *data.journal* and is placed in the Data folder. -> 新しいログファイルを有効にするには、その前にアプリケーションのデータをバックアップしなければなりません。 このオプションをチェックすると、バックアップが必要である旨の警告メッセージが表示されます: ログファイルの作成は延期され、実際には次のバックアップの後にログファイルが作成されます。 +> Activating a new log file requires the data of the application to be backed up beforehand. When you check this option, a warning message informs you that a backup is necessary. The creation of the log file is postponed and it will actually be created only after the next backup of the application. -## バックアップ&復旧 +## Backup & Restore -バックアップ&復旧の設定は必要に応じて変更します。 デフォルトの設定は、標準的なバックアップ動作をおこないます。 +Modifying backup and restore options is optional. Their default values correspond to a standard use of the function. ![](assets/en/Backup/backup04.png) -### 一般設定 +### General settings -- **最新のバックアップのみ保存 X バックアップファイル**: このパラメーターを有効にすると、指定された数の最新バックアップファイルだけが保持され、古いバックアップファイルは削除されます。 この機能は以下のように動作します: バックアップ処理が完了したら、アーカイブが作成されたのと同じ場所、同じ名前のもっとも古いアーカイブを削除します。ディスクスペースを確保するため、バックアップ前に削除するよう、削除のタイミングを変更することもできます。 たとえば、3世代のファイルを保持するよう設定している場合、最初の 3回のバックアップで MyBase-0001、MyBase-0002、MyBase-0003 が作成され、 4回目のバックアップで MyBase-0004 が作成されたのちに MyBase-0001 が削除されます。 この設定はデフォルトで有効になっており、4D は 3世代のバックアップを保持します。 このメカニズムを無効にするには、チェックボックスの選択を外します。 -> このパラメーターは、アプリケーションおよびログファイル両方のバックアップに影響します。 +- **Keep only the last X backup files**: This parameter activates and configures the mechanism used to delete the oldest backup files, which avoids the risk of saturating the disk drive. This feature works as follows: Once the current backup is complete, 4D deletes the oldest archive if it is found in the same location as the archive being backed up and has the same name (you can request that the oldest archive be deleted before the backup in order to save space). If, for example, the number of sets is set to 3, the first three backups create the archives MyBase-0001, MyBase-0002, and MyBase-0003 respectively. During the fourth backup, the archive MyBase-0004 is created and MyBase-0001 is deleted. By default, the mechanism for deleting sets is enabled and 4D keeps 3 backup sets. To disable the mechanism, simply deselect the option. +> This parameter concerns both application and log file backups. -- **データファイルが更新された場合のみバックアップを行う**: このオプションが選択された場合、前回のバックアップ以降にデータが追加・変更・削除された場合のみ、4D は定期的なバックアップを開始します。 そうでない場合、定期的なバックアップはキャンセルされ、次回のスケジュールまで延期されます。 エラーは生成されませんが、バックアップジャーナルにはバックアップが延期された旨記録されます。 このオプションを使用すれば、主に参照目的で使用されているアプリケーションのバックアップに消費されるマシン時間を節約できます。 ストラクチャーや添付ファイルに対して変更がおこなわれていても、データファイルの更新としては扱われない旨注意してください。 -> このパラメーターは、アプリケーションおよびログファイル両方のバックアップに影響します。 +- **Backup only if the data file has been modified**: When this option is checked, 4D starts scheduled backups only if data has been added, changed or deleted since the last backup. Otherwise, the scheduled backup is cancelled and put off until the next scheduled backup. No error is generated; however the backup journal notes that the backup has been postponed. This option also allows saving machine time for the backup of applications principally used for viewing purposes. Please note that enabling this option does not take any modifications made to the project files or attached files into account. +> This parameter concerns both application and log file backups. -- **最も古いバックアップファイルを削除**: このオプションは "最新のバックアップのみ保存 X バックアップファイル" が有効になっている場合のみ使用されます。 このオプションを使用して、最も古いバックアップファイルを削除するタイミングを設定します。選択肢は **バックアップ前**、あるいは **バックアップ後** です。 このオプションが機能するには、バックアップファイルが名称変更されたり、移動されたりしていてはなりません。 +- **Delete oldest backup file before/after backup**: This option is only used if the "Keep only the last X backup files" option is checked. It specifies whether 4D should start by deleting the oldest archive before starting the backup (**before** option) or whether the deletion should take place once the backup is completed (**after** option). In order for this mechanism to work, the oldest archive must not have been renamed or moved. -- **バックアップ失敗時**: このオプションを使用して、バックアップ失敗時の処理を設定できます。 バックアップが実行できなかった場合、4D では再試行することが可能です。 - - **次回の予定された日付と時刻に再試行する**: このオプションは、定期的な自動バックアップを設定されている場合にのみ意味があります。 失敗したバックアップはキャンセルされます。 エラーが生成されます。 - - **指定時間経過後に再試行**: このオプションが選択されていると、設定された待ち時間経過後にバックアップを再試行します。 このメカニズムを使用すると、バックアップをブロックするような特定の状況に対応することが可能となります。 秒、分、あるいは時間単位で待ち時間を設定できます。 次のバックアップ試行にも失敗するとエラーが生成され、ステータスエリアに失敗状況が表示され、バックアップジャーナルにも記録されます。 - - **操作をキャンセル X 試行後**: このパラメーターを使用して、バックアップ試行の失敗最大数を設定できます。 この最大数に達してもバックアップが正しく実行できなかった場合、バックアップはキャンセルされ、エラー 1401 ("バックアップ試行の最大数に達しました。自動バックアップは無効になります") が生成されます。 この場合、データベースを再起動するか、手動バックアップが成功するまで自動バックアップはおこなわれません。 このパラメーターは、人による介入が必要となるような問題があり、バックアップ試行が自動的に繰り返されることにより全体的なパフォーマンスに影響するようなケースで使用できます。 デフォルトでこのオプションは選択されていません。 +- **If backup fails**: This option allows setting the mechanism used to handle failed backups (backup impossible). When a backup cannot be performed, 4D lets you carry out a new attempt. + - **Retry at the next scheduled date and time**: This option only makes sense when working with scheduled automatic backups. It amounts to cancelling the failed backup. An error is generated. + - **Retry after X second(s), minute(s) or hour(s)**: When this option is checked, a new backup attempt is executed after the wait period. This mechanism allows anticipating certain circumstances that may block the backup. You can set a wait period in seconds, minutes or hours using the corresponding menu. If the new attempt also fails, an error is generated and the failure is noted in the status area of the last backup and in the backup journal file. + - **Cancel the operation after X attempts**: This parameter is used to set the maximum number of failed backup attempts. If the backup has not been carried out successfully after the maximum number of attempts set has been reached, it is cancelled and the error 1401 is generated ("The maximum number of backup attempts has been reached; automatic backup is temporarily disabled"). In this case, no new automatic backup will be attempted as long as the application has not been restarted, or a manual backup has been carried out successfully. This parameter is useful in order to avoid a case where an extended problem (requiring human intervention) that prevented a backup from being carried out would have led to the application repeatedly attempting the backup to the detriment of its overall performance. By default, this parameter is not checked. -> 定期的なバックアップが実行される予定時刻にアプリケーションが起動されていなかった場合、4D はバックアップが失敗したものとして扱います。 +> 4D considers a backup as failed if the application was not launched at the time when the scheduled automatic backup was set to be carried out. -### アーカイブ -これらのオプションはメインのバックアップファイルとログバックアップファイルに適用されます。 +### Archive +These options apply to main backup files and to log backup files. -- **セグメントサイズ (MB)**: 4Dではアーカイブをセグメントに分割できます。 この振る舞いにより、たとえばバックアップファイルを複数の異なるディスク (DVDやUSBデバイス等) に格納できます。 復元時、4D はセグメントを自動的に統合します。 各セグメントには MyApplication[xxxx-yyyy].4BK といった名称がつけられます (xxxx はバックアップ番号、yyyy はセグメント番号)。 たとえば、MyApplication のバックアップが 3つのセグメントに分割されると、次のような名前になります: MyApplication[0006-0001].4BK、MyApplication[0006-0002].4BK、MyApplication[0006-0003].4BK **セグメントサイズ** はコンボボックスであり、各セグメントのサイズを MB単位で設定できます。 メニューから定義済み値を選択するか、0~2048 の値を入力できます。 0 を指定するとセグメント化はされません (**なし** を指定したのと同じ)。 +- **Segment Size (Mb)** 4D allows you to segment archives, i.e., to cut it up into smaller sizes. This behavior allows, for example, the storing of a backup on several different disks (DVDs, usb devices, etc.). During restore, 4D will automatically merge the segments. Each segment is called MyApplication[xxxx-yyyy].4BK, where xxxx is the backup number and yyyy is the segment number. For example, the three segments of the MyApplication backup are called MyApplication[0006-0001].4BK, MyApplication[0006-0002].4BK and MyApplication[0006-0003].4BK. The **Segment Size** menu is a combo box that allows you to set the size in MB for each segment of the backup. You can choose one of the preset sizes or enter a specific size between 0 and 2048. If you pass 0, no segmentation occurs (this is the equivalent of passing **None**). -- **圧縮率**: デフォルトで 4D はバックアップファイルを圧縮し、ディスクスペースを節約します。 しかし大量のデータがある場合、ファイルの圧縮処理はバックアップにかかる時間を長くします。 **圧縮率** オプションを使用してファイルの圧縮モードを調整できます: - - **なし**: ファイルの圧縮はおこなわれません。 バックアップは早くおこなわれますが、ファイルサイズは大きくなります。 - - **速度** (デフォルト): このオプションはバックアップの速度とアーカイブサイズのバランスが考慮されたものです。 - - **圧縮率**: アーカイブに最大の圧縮率が適用されます。 アーカイブファイルはディスク上で最小のサイズとなりますが、バックアップの速度は低下します。 +- **Compression Rate** By default, 4D compresses backups to help save disk space. However, the file compression phase can noticeably slow down backups when dealing with large volumes of data. The **Compression Rate** option allows you to adjust file compression: + - **None:** No file compression is applied. The backup is faster but the archive files are considerably larger. + - **Fast** (default): This option is a compromise between backup speed and archive size. + - **Compact**: The maximum compression rate is applied to archives. The archive files take up the least amount of space possible on the disk, but the backup is noticeable slowed. -- **インターレース率と冗長率**: 4D は最適化 (インターレース) とセキュリティ (冗長) メカニズムに基づく特定のアルゴリズムを使用してアーカイブを生成します。 これらのメカニズムを必要に応じて設定できます。 これらのオプションのメニューには低・中・高・なし (デフォルト) の選択肢があります。 - - **インターレース率**: インターレースとはデータを連続しない領域に書き込むことにより、セクター損傷の際のリスクを低減させるものです。 率を上げることでリスクがより低減されますが、データの処理により多くのメモリが必要となります。 - - **冗長率**: 冗長は同じ情報を複数回繰り返すことで、ファイル中のデータを保護するものです。 冗長率を高くするとよりファイルが保護されます。しかし書き込みは遅くなり、ファイルサイズも増大します。 +- **Interlacing Rate and Redundancy Rate** 4D generates archives using specific algorithms that are based on optimization (interlacing) and security (redundancy) mechanisms. You can set these mechanisms according to your needs. The menus for these options contain rates of **Low**, **Medium**, **High** and **None** (default). + - **Interlacing Rate**: Interlacing consists of storing data in non-adjacent sectors in order to limit risks in the case of sector damage. The higher the rate, the higher the security; however, data processing will use more memory. + - **Redundancy Rate**: Redundancy allows securing data present in a file by repeating the same information several times. The higher the redundancy rate, the better the file security; however, storage will be slower and the file size will increase accordingly. -### 自動復元 +### Automatic Restore -- **データベースが壊れていたら、最新のバックアップから復元する**: このオプションが選択されていると、ファイル破損などの異常が検知された場合、4D は起動時にアプリケーションの有効な最新のバックアップからのデータの復旧を自動で開始します。 ユーザーによる介入は必要ありませんが、処理はバックアップジャーナルに記録されます。 +- **Restore last backup if database is damaged**: When this option is checked, the program automatically starts the restore of the data file of the last valid backup of the application, if an anomaly is detected (corrupted file, for example) during application launch. No intervention is required on the part of the user; however, the operation is logged in the backup journal. -- **データベースが完全でない場合、最新のログを統合する**: このオプションがチェックされると、プログラムはアプリケーションを開く際または復旧時に、自動でログファイルを統合します。 - - アプリケーションを開く際に、データファイルに保存されていない処理がログファイル中に見つかった場合、4D は自動でカレントログファイルを統合します。 このようなケースは、ディスクに書き込まれていないデータがまだキャッシュ中に存在する状態で、電力の切断が起きた場合に発生します。 - - アプリケーションの復元時、カレントログファイルや、バックアップファイルと同じ番号を持つログバックアップファイルが同じフォルダーに存在する場合、4D はその内容を検証します。 そしてデータファイルに書き込まれていない処理が見つかれば、自動で統合処理がおこなわれます。 +- **Integrate last log file if database is incomplete**: When this option is checked, the program automatically integrates the log file when opening or restoring the application. + - When opening an application, the current log file is automatically integrated if 4D detects that there are operations stored in the log file that are not present in the data. This situation arises, for example, if a power outage occurs when there are operations in the data cache that have not yet been written to the disk. + - When restoring an application, if the current log file or a log backup file having the same number as the backup file is stored in the same folder, 4D examines its contents. If it contains operations not found in the data file, the program automatically integrates it. -ユーザーにダイアログボックスが提示されることはありません。 処理は完全に自動です。 処理はバックアップジャーナルに記録されます。 +The user does not see any dialog box; the operation is completely automatic. The goal is to make use as easy as possible. The operation is logged in the backup journal. -> 自動復元の場合、復元されるのは次の要素に限られます:
    - .4DD ファイル
    - .4DIndx ファイル
    - .4DSyncData ファイル
    - .4DSyncHeader ファイル
    - External Data フォルダー +> In the case of an automatic restore, only the following elements are restored: - .4DD file - .4DIndx file - .4DSyncData file - .4DSyncHeader file - External Data folder > -> 添付ファイルやプロジェクトファイルを取得したい場合、[手動の復元](restore.md#手動でバックアップから復元する-標準ダイアログ) をおこなう必要があります。 +> If you wish to get the attached files or the project files, you must perform a [manual restore](restore.md#manually-restoring-a-backup-standard-dialog). From bddac60b0de0d07628ded725b43ef64d9c6bd7bb Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:58:57 +0100 Subject: [PATCH 250/311] New translations variables.md (Japanese) --- .../translated_docs/ja/Concepts/variables.md | 196 +++++++++--------- 1 file changed, 98 insertions(+), 98 deletions(-) diff --git a/website/translated_docs/ja/Concepts/variables.md b/website/translated_docs/ja/Concepts/variables.md index b4df1278fbbf90..10e10b8b657f19 100644 --- a/website/translated_docs/ja/Concepts/variables.md +++ b/website/translated_docs/ja/Concepts/variables.md @@ -1,105 +1,105 @@ --- id: variables -title: 変数 +title: Variables --- -4D のデータは、根本的に異なっている 2つの方法で保持されます。 **フィールド** はディスクに永続的にデータを保存するのに対し、**変数** はメモリ上に一時的にデータを格納します。 +Data in 4D is stored in two fundamentally different ways. **Fields** store data permanently on disk; **variables** store data temporarily in memory. -データベースを作成する際には、フィールドに名前とデータタイプを指定します。 同様に、変数にも名前と [データタイプ](Concepts/data-types.md) を指定します。 +When you set up your 4D database, you specify the names and types of fields that you want to use. Variables are much the same—you also give them names and different types (see [Data types](Concepts/data-types.md)). -いったん作成された変数は、アプリケーションで必要とされる場所に使用できます。 たとえば、テキスト変数を同じタイプのフィールドに格納するには次のように書きます: +Once created, you can use a variable wherever you need it in your application. For example, you might need to store a text variable in a field of same type: ```4d [MyTable]MyField:=MyText ``` -変数はランゲージの要素です。画面上に表示されることのない、裏方に徹した変数を作成・利用することができます。 もちろん、フォーム上に変数の値を表示することもできます (ポインターやBLOBを除く)。また、変数に値を入力したり、変数の値をレポートに印刷したりすることも可能です。 このとき、入力可や入力不可の変数オブジェクトはフィールドオブジェクトと同様に振舞い、提供されるコントロールも類似しています。 フォーム上のボタン、リストボックス、スクロールエリア、ピクチャーボタンなどのオブジェクトも変数を使って制御することができるほか、保存不要な計算結果を表示させることもできます。 +Variables are language objects; you can create and use variables that will never appear on the screen. In your forms, you can display variables (except Pointer and BLOB) on the screen, enter data into them, and print them in reports. In this way, enterable and non-enterable area variables act just like fields, and the same built-in controls are available when you create them. Form variables can also control buttons, list boxes, scrollable areas, picture buttons, and so on, or display results of calculations that do not need to be saved. -## 変数の宣言 +## Declaring Variables -変数は宣言によって作成されます。 4D ランゲージでは、変数の宣言方法は2つあります: +You create variables by declaring them. The 4D language offers two ways to declare variables: -- `var` キーワードを使った宣言 (推奨、とくにオブジェクトやクラスをコードで使用する場合) -- "コンパイラー" や "配列" テーマの 4D ランゲージコマンドを使った宣言 (廃止予定、クラシックランゲージのみ) +- using the `var` keyword (recommended, specially if your code uses objects and classes), +- using one of the "Compiler" or "Arrays" theme 4D language commands (deprecated, classic language only). -**注:** この方法は推奨されませんが、単純に使用することによって変数を宣言することもできます。正式にそれらを定義することは必須ではありません。 たとえば、今日の日付に30日足した値を格納した変数を宣言するには、次のように書くことができます: +**Note:** Although it is usually not recommended, you can create basic variables simply by using them; you do not necessarily need to formally define them. For example, to declare a variable that will hold the current date plus 30 days, you can write: ```4d - MyDate:=Current date+30 // MyDateを作成します - // これは日付型の変数であると 4D は推測します - // 30日後の日付が代入されます + MyDate:=Current date+30 //MyDate is created + // 4D guesses it is of date type + // and assigns the current date plus 30 days ``` -### `var` キーワードによる宣言 +### Using the `var` keyword -オブジェクト変数をクラスに紐づけることができるため、`var` キーワードを使った変数宣言が推奨されます。 このシンタックスはコードエディターの自動補完機能を強化します。 +Declaring variables using the `var` keyword is recommended since this syntax allows you to bind object variables with classes. Using this syntax enhances code editor suggestions and type-ahead features. -`var` キーワードを使って変数を宣言するには、次のシンタックスを用います: +To declare a variable of any type with the `var` keyword, use the following syntax: `var {; ;...}{ : }` -たとえば: +For example: ```4d -var $myText : Text // テキスト変数 -var myDate1; myDate2 : Date // 複数の日付変数 -var $myFile : 4D.File // File クラスオブジェクト変数 -var $myVar // バリアント型変数 +var $myText : Text //a text variable +var myDate1; myDate2 : Date //several date variables +var $myFile : 4D.File //a file class object variable +var $myVar //a variant variable ``` -`varName` に指定する変数名は 4Dの [識別子の命名規則](Concepts/identifiers.md) に従う必要があります。 -このシンタックスは [ローカル変数とプロセス変数](#ローカル変数とプロセス変数) の宣言のみサポートしています。[インタープロセス変数](#インタープロセス変数) および [配列](Concepts/arrays.md) には使用できません。 +`varName` is the variable name, it must comply with the [4D rules](Concepts/identifiers.md) about identifiers. +This syntax only supports [local and process variables](#local-process-and-interprocess-variables) declarations, thus excluding [interprocess variables](#interprocess-variables) and [arrays](Concepts/arrays.md). -`varType` には次が指定できます: +`varType` can be: -- [基本のデータ型](Concepts/data-types.md): 変数には、宣言された型の値が格納されます -- [クラス参照](Concepts/classes.md) (4Dクラスまたはユーザークラス): 変数には、定義されたクラスのオブジェクトへの参照が格納されます +- a [basic type](Concepts/data-types.md), in which case the variable contains a value of the declared type, +- a [class reference](Concepts/classes.md) (4D class or user class), in which case the variable contains a reference to an object of the defined class. -`varType` を省略すると、**variant** 型の変数が作成されます。 +If `varType` is omitted, a variable of the **variant** type is created. -サポートされている `varType` 値の一覧です: +The following table lists all supported `varType` values: -| varType | 内容 | -| -------------- | ---------------------------- | -| テキスト | テキスト値 | -| 日付 | 日付値 | -| 時間 | 時間値 | -| ブール | ブール値 | -| 整数 | 倍長整数値 | -| 実数 | 実数値 | -| ポインター | ポインター値 | -| ピクチャー | ピクチャー値 | -| BLOB | BLOB値 | -| コレクション | コレクション値 | -| バリアント | バリアント値 | -| オブジェクト | デフォルトクラス (4D.Object) のオブジェクト | -| 4D.*className* | 4Dクラス名のオブジェクト | -| cs.*className* | ユーザークラス名のオブジェクト | +| varType | Contents | +| -------------- | ------------------------------------- | +| Text | Text value | +| Date | Date value | +| Time | Time value | +| Boolean | Boolean value | +| Integer | Long integer value | +| Real | Real value | +| Pointer | Pointer value | +| Picture | Picture value | +| Blob | BLOB value | +| Collection | Collection value | +| Variant | Variant value | +| Object | Object with default class (4D.Object) | +| 4D.*className* | Object of the 4D class name | +| cs.*className* | Object of the user class name | -#### 例題 +#### Examples -- 基本のデータ型の、ローカル変数およびプロセス変数の宣言: +- To declare local and process basic variables: ```4d var $myText; myText; $vt : Text var myVar //variant var $o : Object -// 次と同義です: +//equivalent to: var $o : 4D.Object -// C_OBJECT($o) とも同義です +//also equivalent to C_OBJECT($o) ``` -- 4Dクラス型のオブジェクト変数の宣言: +- To declare object variables of 4D class: ```4d var $myFolder : 4D.Folder var $myFile : 4D.File ``` -- ユーザークラス型のオブジェクト変数の宣言: +- To declare object variables of user class: ```4d var $myClass : cs.MyClass @@ -108,115 +108,115 @@ var $entity : cs.EmployeeEntity ``` -### C_ 指示子による宣言 +### Using a C_ directive -> **互換性に関する注記:** 4D v18 R3 以降は廃止予定となっています。 [var](#using-the-var-keyword) キーワードの使用が推奨されます。 +> **Compatibility Note:** This feature is deprecated as of 4D v18 R3. It is now recommended to use the [var](#using-the-var-keyword) keyword. -"コンパイラー" テーマコマンドの指示子を使って、基本のデータ型の変数を宣言することができます。 +Directives from the "Compiler" theme commands allow you to declare variables of basic types. -たとえば、テキスト変数を宣言するには次のように書きます: +For example, if you want to define a text variable, you write: ```4d C_TEXT(myText) ``` -いくつかの基本的な変数宣言の例です: +The following are some basic variable declarations: ```4d - C_BLOB(vxMyBlob) // プロセス変数 vxMyBlob を BLOB型として宣言します - C_DATE($vdCurDate) // ローカル変数 $vdCurDate を日付型として宣言します - C_LONGINT(vg1;vg2;vg3) // 3つのプロセス変数 vg1, vg2, vg3 を倍長整数型として宣言します - C_OBJECT($vObj) // ローカル変数 $vObj をオブジェクト型として宣言します - C_COLLECTION($vCol) // ローカル変数 $vCol をコレクション型として宣言します - ARRAY LONGINT(alAnArray;10) // プロセス変数 alAnArray を 10個の倍長整数型要素を持つ配列として宣言します + C_BLOB(vxMyBlob) // The process variable vxMyBlob is declared as a variable of type BLOB + C_DATE($vdCurDate) // The local variable $vdCurDate is declared as a variable of type Date + C_LONGINT(vg1;vg2;vg3) // The 3 process variables vg1, vg2 and vg3 are declared as variables of type longint + C_OBJECT($vObj) // The local variable $vObj is declared as a variable of type Object + C_COLLECTION($vCol) // The local variable $vCol is declared as a variable of type Collection + ARRAY LONGINT(alAnArray;10) //The process alAnArray variable is declared as a Longint array of 10 elements ``` -**注:** 配列とは、変数の一種です。 配列とは、同じタイプの変数を番号付きで並べたものです。 詳細については [配列](Concepts/arrays.md) を参照ください。 +**Note:** Arrays are a particular type of variables. An array is an ordered series of variables of the same type. For more information, please refer to [Arrays](Concepts/arrays.md). -## 変数への代入 +## Assigning Data -変数を対象に、データを格納したり、格納したデータを別の対象にコピーしたりすることができます。 変数にデータを格納することを、**変数にデータを代入する**と言い、代入演算子 (:=) を使っておこないます。 代入演算子はフィールドに対してデータを代入する場合にも使います。 +Data can be put into and copied out of variables and arrays. Putting data into a variable is called **assigning the data to the variable** and is done with the assignment operator (:=). The assignment operator is also used to assign data to fields. -代入演算子は、変数を作成し、変数にデータを代入するために使用します。 作成する変数名を代入演算子の左側に書きます。 たとえば: +The assignment operator is a primary way to create a variable and to put data into it. You write the name of the variable that you want to create on the left side of the assignment operator. For example: ```4d MyNumber:=3 ``` -は変数 _MyNumber_ を作成し、数値 3を代入します。 MyNumber が既に存在していれば、そこに数値 3が代入されます。 +creates the variable _MyNumber_ and puts the number 3 into it. If MyNumber already exists, then the number 3 is just put into it. -> [データ型の宣言](#変数の作成) をせずに変数を作成することは通常推奨されません。 +> It is usually not recommended to create variables without [declaring their type](#creating-variables). -もちろん、変数からデータを取り出すことができなければ、便利とはいえません。 再度代入演算子を使用します。 [Products]Size というフィールドに _MyNumber_ 変数の値を代入するには、代入演算子の右側に MyNumber を書きます: +Of course, variables would not be very useful if you could not get data out of them. Once again, you use the assignment operator. If you need to put the value of MyNumber in a field called [Products]Size, you would write _MyNumber_ on the right side of the assignment operator: ```4d [Products]Size:=MyNumber ``` -これで、_[Products]Size_ の値は3になります。 この例はとても単純ですが、ある場所から別の場所へランゲージによってデータを転送させる基本的な手順を表しています。 +In this case, _[Products]Size_ would be equal to 3. This example is rather simple, but it illustrates the fundamental way that data is transferred from one place to another by using the language. -配列要素にデータを代入するには中カッコ ({...}) を使用します: +You assign data to array elements by using curly braces ({...}): ```4d atNames{1}:="Richard" ``` -## ローカル、プロセス、およびインタープロセス変数 +## Local, Process, and Interprocess variables -**ローカル**、**プロセス**、および **インタープロセス** という、3種類の変数の変数を作成することができます。 これらの変数の違いは使用できるスコープにあります。また、それらを使用することのできるオブジェクトも異なります。 +You can create three types of variables: **local**, **process**, and **interprocess**. The difference between the three types of elements is their scope, or the objects to which they are available. -### ローカル変数 +### Local variables -ローカル変数はその名のとおりメソッド内でローカルであり、変数が作成されたメソッドの範囲内でのみ使用可能で、その他のメソッドからはアクセスできません。 メソッド内でローカルであるというのは、正式には「スコープがローカルである」といいます。 ローカル変数は、その使用範囲をメソッド内に限定するために用います。 +A local variable is, as its name implies, local to a method—accessible only within the method in which it was created and not accessible outside of that method. Being local to a method is formally referred to as being “local in scope.” Local variables are used to restrict a variable so that it works only within the method. -ローカル変数は、以下のような目的のために使用されます: +You may want to use a local variable to: -- 他の変数名との重複を避ける。 -- データを一時的に使用する。 -- プロセス変数の数を減らす。 +- Avoid conflicts with the names of other variables +- Use data temporarily +- Reduce the number of process variables -ローカル変数の名前は必ずドル記号 ($) で始め、この記号を除く31文字までの文字を指定できます。 これより長い名前を指定すると、4D は余分の32文字以降を切り捨てます。 +The name of a local variable always starts with a dollar sign ($) and can contain up to 31 additional characters. If you enter a longer name, 4D truncates it to the appropriate length. -多くのメソッドや変数を持つアプリケーションプロジェクトで作業する場合、現在作業しているメソッドの範囲内で一時的に変数が必要となる場合がよくあります。 この場合、同じ変数名が他で使用されていないかどうかを気にすることなくローカル変数を作成することができます。 +When you are working in an application project with many methods and variables, you often find that you need to use a variable only within the method on which you are working. You can create and use a local variable in the method without worrying about whether you have used the same variable name somewhere else. -アプリケーションではしばしば、ユーザーによる少量のデータ入力を必要とする場合があります。 `Request` コマンドを使って、この情報を取得することができます。 このコマンドはデータ入力を求めるダイアログボックスを表示し、 ユーザーがデータを入力すると、その情報を戻り値として返します。 このようなデータは通常、メソッド内で長期間維持する必要はありません。 これは、ローカル変数を使用する典型的な例といえます。 次に例を示します: +Frequently, in an application, small pieces of information are needed from the user. The `Request` command can obtain this information. It displays a dialog box with a message prompting the user for a response. When the user enters the response, the command returns the information the user entered. You usually do not need to keep this information in your methods for very long. This is a typical way to use a local variable. Here is an example: ```4d - $vsID:=Request("ID を入力してください:") + $vsID:=Request("Please enter your ID:") If(OK=1) QUERY([People];[People]ID =$vsID) End if ``` -このメソッドは、ユーザーに ID を入力するように要求します。 ローカル変数 $vsID にレスポンスが代入され、ユーザーが入力した ID に基づいた検索がおこなわれます。 このメソッドが終了した時点で、$vsID ローカル変数はメモリから消去されます。 この変数は 1回のみ、このメソッド内でしか使われないため、これ以上維持する必要はありません。 +This method simply asks the user to enter an ID. It puts the response into a local variable, $vsID, and then searches for the ID that the user entered. When this method finishes, the $vsID local variable is erased from memory. This is fine, because the variable is needed only once and only in this method. -**注:** メソッドに渡される $1, $2...等の引数はローカル変数です。 詳細については [パラメーター](Concepts/parameters.md) を参照ください。 +**Note:** Parameters $1, $2... passed to methods are local variables. For more information, please refer to [Parameters](Concepts/parameters.md). -### プロセス変数 +### Process variables -プロセス変数は、同じプロセスの範囲内に限り使用可能です。 この変数はプロセスメソッドと、そのプロセス内で呼び出された他のメソッドで使用することができます。 +A process variable is available only within a process. It is accessible to the process method and any other method called from within the process. -プロセス変数には名前に付ける接頭辞がありません。 プロセス変数の名前は、最大31文字までの長さで指定できます。 +A process variable does not have a prefix before its name. A process variable name can contain up to 31 characters. -インタープリターモードでは、変数は動的にメモリ上に作成・消去されます。 これに対してコンパイルモードでは、作成したすべてのプロセス (ユーザープロセス) で同じプロセス変数定義が共有されますが、変数のインスタンスはプロセス毎に異なるものとなります。 たとえば、プロセスP_1 とプロセスP_2 の両方においてプロセス変数 myVar が存在していても、それらはそれぞれ別のインスタンスです。 +In interpreted mode, variables are maintained dynamically; they are created and erased from memory “on the fly.” In compiled mode, all processes you create (user processes) share the same definition of process variables, but each process has a different instance for each variable. For example, the variable myVar is one variable in the process P_1 and another one in the process P_2. -バージョン6より、`GET PROCESS VARIABLE` や `SET PROCESS VARIABLE` を使用して、あるプロセスから他のプロセスのプロセス変数の値を取得したり、設定したりできるようになりました。 これらのコマンドの利用は、以下のような状況に限定することが、良いプログラミングの作法です: +A process can “peek and poke” process variables from another process using the commands `GET PROCESS VARIABLE` and `SET PROCESS VARIABLE`. It is good programming practice to restrict the use of these commands to the situation for which they were added to 4D: -- コード内の特定の箇所におけるプロセス間通信 -- プロセス間のドラッグ&ドロップ処理 -- クライアント/サーバーにおいて、クライアントマシン上のプロセスとサーバーマシン上のストアドプロシージャー間の通信 +- Interprocess communication at specific places or your code +- Handling of interprocess drag and drop +- In Client/Server, communication between processes on client machines and the stored procedures running on the server machines -詳細については **プロセス** の章と、各コマンドの説明を参照ください。 +For more information, see the chapter **Processes** and the description of these commands. -### インタープロセス変数 +### Interprocess variables -インタープロセス変数はプロジェクト全体で使用することができ、すべてのコオペラティブプロセスで共有されます。 これらは主としてプロセス間で情報を共有するために使われます。 +Interprocess variables are available throughout the project and are shared across all cooperative processes. They are primarily used to share information between processes. -> プリエンプティブプロセスにおいては使用できないことと、コードの保守管理を煩雑にすることから、インタープロセス変数の使用は推奨されません。 +> Use of interprocess variables is not recommended since they are not available from preemptive processes and tend to make the code less maintainable. -インタープロセス変数の名前は、必ずインタープロセス記号 (<>) で始めます。記号の後に31バイトまでの名前を指定できます。 +The name of an interprocess variable always begins with the symbols (<>) — a “less than” sign followed by a “greater than” sign— followed by 31 characters. -クライアント/サーバーでは、各マシン (クライアントマシンとサーバーマシン) で同じインタープロセス変数定義を共有しますが、マシンごとに各変数のインスタンスが存在します。 +In Client/Server, each machine (Client machines and Server machine) share the same definition of interprocess variables, but each machine has a different instance for each variable. From 6b0b1fd9f53e829dc558de274ba95ef9e5327b7b Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:58:59 +0100 Subject: [PATCH 251/311] New translations overview.md (Japanese) --- website/translated_docs/ja/Backup/overview.md | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/website/translated_docs/ja/Backup/overview.md b/website/translated_docs/ja/Backup/overview.md index 34f1097b300fb0..f8ec23dbc09154 100644 --- a/website/translated_docs/ja/Backup/overview.md +++ b/website/translated_docs/ja/Backup/overview.md @@ -1,22 +1,21 @@ --- id: overview -title: 概要 +title: Overview --- -4Dには、アプリケーションのフルバックアップと復元用のモジュールが組み込まれています。 +4D includes a full application backup and restore module. -このモジュールにより、現在使用中のアプリケーションを終了しなくても、そのバックアップを作成することができます。 各バックアップには、プロジェクトフォルダー、データファイルのほか、任意の追加ファイルやフォルダーを含められます。 これらのパラメーターの指定は、最初にストラクチャー設定にておこないます。 +This module allows backing up an application currently in use without having to exit it. Each backup can include the project folder, the data file and any additional files or folders. These parameters are first set in the Settings. -バックアップは手動で実行するか、またはユーザーが操作しなくても定期的に自動実行することができます。 特定のランゲージコマンドやデータベースメソッドを使用すると、独自のインタフェースにバックアップ機能を統合することができます。 +Backups can be started manually or automatically at regular intervals without any user intervention. Specific language commands, as well as specific database methods, allow integrating backup functions into a customized interface. -損傷したアプリケーションが開かれた場合には、自動的にアプリケーションを復元することができます。 +Applications can be restored automatically when a damaged application is opened. -また、この統合バックアップモジュールでは、[ログファイル](log.md) (.journal 拡張子のジャーナルファイル) を利用することができます。 このファイルは、データ上で実行された全操作の記録を保管し、2回のバックアップ間の安全性を完全に保証します。 使用中のアプリケーションに問題が発生した場合は、次回そのアプリケーションを開いたときに、データファイルから失われた操作が自動的に再統合されます。 ログファイルの内容はいつでも確認することができます。 +Also, the integrated backup module can take advantage of the .journal file ([database log file](log.md)). This file keeps a record of all operations performed on the data and also ensures total security between two backups. In case of problems with an application in use, any operations missing in the data file are automatically reintegrated the next time the application is opened. You can view the journal file contents at any time. -> バックアップを目的にデータを複製・同期することで、常に複数の完全一致するアプリケーションを管理したい場合には、他のソリューションを採用することもできます。 これらのソリューションは次のメカニズムや技術に基づいています: -> - 4D Serverを使い、(統合されたバックアップモジュールメカニズムを使用して) 論理ミラーを設定する -> - SQL による同期 -> - HTTP による同期 (/rest/url) +> You can also implement alternative solutions for replicating and synchronizing data in order to maintain identical versions of applications for backup purposes. These solutions can be based on the following mechanisms and technologies: +> - Setting up a logical mirror with 4D Server (using the integrated backup module mechanisms) +> - Synchronization using SQL - Synchronization using HTTP (/rest/url) -> 4Dのセキュリティ機能の概要については、[4D Security guide](https://blog.4d.com/4d-security-guide/) をご覧ください。 +> For a general overview of 4D's security features, see the [4D Security guide](https://blog.4d.com/4d-security-guide/). From 351567d667fa8fc1930fb601bd9f787844b32d03 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:59:01 +0100 Subject: [PATCH 252/311] New translations about.md (Japanese) --- website/translated_docs/ja/Concepts/about.md | 70 ++++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/website/translated_docs/ja/Concepts/about.md b/website/translated_docs/ja/Concepts/about.md index 14bb9fead17c1b..c68e64794a69c9 100644 --- a/website/translated_docs/ja/Concepts/about.md +++ b/website/translated_docs/ja/Concepts/about.md @@ -1,62 +1,62 @@ --- id: about -title: 4D ランゲージについて +title: About the 4D Language --- -4Dは独自のプログラミング言語を持っています。1300を超えるこのビルトインの言語により、4Dは Web、モバイル、およびデスクトップアプリケーションを作成する、パワフルな開発ツールとなっています。 単純な計算から複雑なカスタムインターフェースの作成まで、4D 言語は様々なタスクに使用することができます。 たとえば、以下のようなことが可能です: +The 4D built-in language, consisting of more than 1300 commands, makes 4D a powerful development tool for web, mobile, or desktop applications. You can use the 4D language for many different tasks—from performing simple calculations to creating complex custom user interfaces. For example, you can: -- クエリや並べ替えなどのレコード管理エディターにプログラムでアクセスする -- データベースの情報をもとに複雑なレポートやラベルを作成・印刷する -- 他のデバイスと通信する -- メールを送信する -- ドキュメントや Web サイトを管理する -- 4D アプリケーションと他のアプリケーションの間で、データの書き出しや読み込みをおこなう -- 4D のプログラミング言語に、他の言語で書かれたプロシージャーを組み込む +- Programmatically access any of the record management editors (order by, query, and so on), +- Create and print complex reports and labels with the information from the database, +- Communicate with other devices, +- Send emails, +- Manage documents and web pages, +- Import and export data between 4D applications and other applications, +- Incorporate procedures written in other languages into the 4D programming language. -4D のプログラミング言語は柔軟性とパワーを備え、あらゆるレベルのユーザーやデベロッパーにとって多種多様な情報管理業務を達成するための理想的なツールです。 初心者のユーザーであっても、計算処理を手早く実行できます。 ある程度コンピューターの知識を持っているユーザーであれば、プログラミング経験がなくてもアプリケーションをカスタマイズできます。 熟練したデベロッパーであれば、4D の強力なプログラミング言語を駆使して、ファイル転送や通信、モニタリングなどの高度な機能をアプリケーションに組み込むことができます。 他言語でプログラミング経験がある開発者は、独自のコマンドを 4D に追加することができます。 +The flexibility and power of the 4D programming language make it the ideal tool for all levels of users and developers to accomplish a complete range of information management tasks. Novice users can quickly perform calculations. Experienced users without programming experience can customize their applications. Experienced developers can use this powerful programming language to add sophisticated features and capabilities to their applications, including file transfer, communications, monitoring. Developers with programming experience in other languages can add their own commands to the 4D language. -## 4D ランゲージとは +## What is a Language? -4D ランゲージは、私たちが日ごろ話している言語とさして変わりありません。 アイデアの表現や、伝達、指示をおこなうためのコミュニケーションの一形態です。 話し言葉と同様に、4D は独自の語彙・文法・構文を持っています。このランゲージを使用して、アプリケーションやデータをどのように扱うのかを 4D に伝えます。 +The 4D language is not very different from the spoken language we use every day. It is a form of communication used to express ideas, inform, and instruct. Like a spoken language, 4D has its own vocabulary, grammar, and syntax; you use it to tell 4D how to manage your application and data. -4D を効果的に使用する目的では、ランゲージのすべてを知っている必要はありません。 言葉を交わすために言語のすべてを知る必要がないのと同じです。実際、少ない語彙でも雄弁に語ることはできるものです。 4D ランゲージも、創造性を発揮するのに必要となるのはほんの一部で、残りは必要に応じて覚えればよいのです。 +You do not need to know everything in the language in order to work effectively with 4D. In order to speak, you do not need to know the entire English language; in fact, you can have a small vocabulary and still be quite eloquent. The 4D language is much the same—you only need to know a small part of the language to become productive, and you can learn the rest as the need arises. -## なぜランゲージを使用するのか +## Why use a Language? -4D を使いはじめると、最初はプログラミング言語があまり必要ないように思えるかもしれません。 プログラミングせずとも広範囲のデータ管理タスクをおこなうことのできる自由度の高いツールを、4D はデザインモードにおいて提供しています。 データ入力やクエリ、並べ替え、レポート作成などの基本的なタスクは簡単に処理できます。 それだけでなく、データ検証や入力補助、グラフ作成、ラベルの生成など、多くの追加機能も提供されています。 +At first it may seem that there is little need for a programming language in 4D. In the Design environment, 4D provides flexible tools that require no programming to perform a wide variety of data management tasks. Fundamental tasks, such as data entry, queries, sorting, and reporting are handled with ease. In fact, many extra capabilities are available, such as data validation, data entry aids, graphing, and label generation. -では、なぜ 4D ランゲージが必要なのでしょうか。 たとえば、以下のような用途が考えられます: +Then why do we need a 4D language? Here are some of its uses: -- 自動的な繰り返しタスク: データの更新、複雑なレポートの生成、長い一連の操作などを全自動でおこなうことができます。 -- ユーザーインタフェースのコントロール: ウィンドウおよびメニューの管理、フォームやインタフェースオブジェクトの制御ができます。 -- 高度なデータ管理: トランザクション処理、複雑なデータ検証、マルチユーザー管理、セットや命名セレクションの処理などが含まれます。 -- コンピューターのコントロール: シリアルポート通信やドキュメント管理、エラー管理が可能です。 -- アプリケーションの作成: ダブルクリックで起動する、カスタマイズされたアプリケーションをビルドできます。 -- ビルトイン 4D Web サーバーの利用: データを反映させた動的な Web ページをビルドし、更新できます。 +- Automate repetitive tasks: These tasks include data modification, generation of complex reports, and unattended completion of long series of operations. +- Control the user interface: You can manage windows and menus, and control forms and interface objects. +- Perform sophisticated data management: These tasks include transaction processing, complex data validation, multi-user management, sets, and named selection operations. +- Control the computer: You can control serial port communications, document management, and error management. +- Create applications: You can create easy-to-use, customized applications that run stand-alone. +- Add functionality to the built-in 4D Web server: build and update dynamic web pages filled with your data. -ランゲージを使用すれば、アプリケーションのデザインや処理を完全に制御することができます。 4D はパワフルな汎用エディターを提供していますが、必要に応じてアプリケーションをカスタマイズするには 4D ランゲージが必要です。 +The language lets you take complete control over the design and operation of your application. 4D provides powerful “generic” editors, but the language lets you customize your application to whatever degree you require. -## データ制御 +## Taking Control of Your Data -4D ランゲージを使用すれば、パワフルでエレガントに、データをコントロールできます。 4D ランゲージは初心者にも使いやすく、経験豊かなデベロッパーの利用に耐えるほど高度です。 ランゲージの利用により、ビルトインのデータベース機能から、完全にカスタマイズされたアプリケーションにスムーズに移行できます。 +The 4D language lets you take complete control of your data in a powerful and elegant manner. The language is easy enough for a beginner, and sophisticated enough for an experienced application developer. It provides smooth transitions from built-in database functions to a completely customized application. -4D ランゲージのコマンドを使用して標準のレコード管理エディターにアクセスできます。 たとえば、デザインモードにおいて「クエリ」ツールバーボタンを使って開けるクエリエディターは、`QUERY` コマンドを使用することでも表示されます。 さらに、`QUERY` コマンドを使用すれば、エディターを開かなくても指定したデータを検索できるのです。 たとえば `QUERY ([People];[People]Last Name="Smith")` と記述すると、データベースから "Smith" という名前の人物をすべて検索します。 +The commands in the 4D language provide access to the standard record management editors. For example, when you use the `QUERY` command, you are presented with the Query Editor (which can be accessed in the Design mode using the Query command in the Records menu. You can tell the command to search for explicitly described data. For example, `QUERY([People];[People]Last Name="Smith")` will find all the people named Smith in your database. -4D ランゲージはとてもパワフルです。ひとつのコマンドが、従来のプログラム言語で書かれた数百行あるいは数千行にも及ぶコードに相当することもしばしばです。 このパワーを持ちながら、コマンドにはシンプルな英語の名称がつけられています。 例えばクエリを行うには `QUERY` コマンドを、レコードを追加するには `ADD RECORD` コマンドを使用します。 +The 4D language is very powerful—one command often replaces hundreds or even thousands of lines of code written in traditional computer languages. Surprisingly enough, with this power comes simplicity—commands have plain English names. For example, to perform a query, you use the `QUERY` command; to add a new record, you use the `ADD RECORD` command. -4D ランゲージは、ほとんどのタスクを簡単に実行できるようデザインされています。 レコードの追加、並べ替え、データの検索などの操作がシンプルなコマンドで提供されています。 さらにコマンドを使用してシリアルポートのコントロール、ディスク上のドキュメントの読み込み、高度なトランザクション処理等を行うこともできるのです。 +The language is designed for you to easily accomplish almost any task. Adding a record, sorting records, searching for data, and similar operations are specified with simple and direct commands. But the language can also control the serial ports, read disk documents, control sophisticated transaction processing, and much more. -4D ランゲージは非常に高度なタスクをも比較的簡単におこないます。 このようなタスクをランゲージなしでおこなうことはほとんど想像できません。 ランゲージのパワフルなコマンドを使用したとしても、タスクによっては複雑で難しいものとなることがあります。 ツール自身はタスクを処理しませんが、困難なタスクの処理を助けてくれます。 たとえば、ワープロを使用すれば早く簡単に文章を書くことができますが、ワープロ自体が文章を代わりに考えてくれるわけではありません。 4D ランゲージの使用はデータ管理を楽にし、複雑なタスクにも自信を持って取り掛かれるようにします。 +The 4D language accomplishes even the most sophisticated tasks with relative simplicity. Performing these tasks without using the language would be unimaginable for many. Even with the language’s powerful commands, some tasks can be complex and difficult. A tool by itself does not make a task possible; the task itself may be challenging and the tool can only ease the process. For example, a word processor makes writing a book faster and easier, but it will not write the book for you. Using the 4D language will make the process of managing your data easier and will allow you to approach complicated tasks with confidence. -## 4D ランゲージは従来のコンピュータ言語ですか +## Is it a “Traditional” Computer Language? -従来のコンピュータ言語に馴れ親しんでいる方は、本節を参照してください。 それ以外の方は、この章を読みとばしても構いません。 +If you are familiar with traditional computer languages, this section may be of interest. If not, you may want to skip it. -4D ランゲージは従来のコンピュータ言語とは異なります。 4D ランゲージは、今日のコンピュータで使用できる最も先進的で柔軟性のある言語の1つです。 4D ランゲージは、人が作業をおこなうように処理するよう設計されています。 +The 4D language is not a traditional computer language. It is one of the most innovative and flexible languages available on a computer today. It is designed to work the way you do, and not the other way around. -従来の言語を使用して開発を行う場合、まず念入りに計画を立てる必要があります。 実際、計画の立案は開発の重要な工程の1つです。 4D においては、プロジェクトのあらゆる部分でいつでもランゲージを使いはじめることができます。 たとえば、初めにフォームにメソッドを追加し、いくつかのメソッドをあとから追加することができます。 アプリケーションがより高度になったら、メニューから実行するプロジェクトメソッドを追加することもできます。 4D ランゲージは好きなだけ利用することができます。 他の多くのデータベースのような "すべてか無か" ではありません。 +To use traditional languages, you must do extensive planning. In fact, planning is one of the major steps in development. 4D allows you to start using the language at any time and in any part of your project. You may start by adding a method to a form, then later add a few more methods. As your application becomes more sophisticated, you might add a project method controlled by a menu. You can use as little or as much of the language as you want. It is not “all or nothing,” as is the case with many other databases. -従来の言語では、インターフェースオブジェクトをあらかじめ正式な記述法で宣言・定義しなければなりません。 しかし、4D ではボタンなどのオブジェクトを作成し、そのまま使用することができます。作成したオブジェクトは自動的に 4D によって管理されます。 たとえば、ボタンを使用するためには、ボタンをフォーム上に作成して名前を指定します。 ユーザーがボタンをクリックした時点で、ランゲージが自動的にメソッドに通知します。 +Traditional languages force you to define and pre-declare interface objects in formal syntactic terms. In 4D, you simply create an object, such as a button, and use it. 4D automatically manages the object for you. For example, to use a button, you draw it on a form and name it. When the user clicks the button, the language automatically notifies your methods. -従来の言語は、コマンドの記述方法を制限するなどして、融通性に欠けることが多いのに対し、 4D ランゲージは伝統に縛られることなく進化していきます。 \ No newline at end of file +Traditional languages are often rigid and inflexible, requiring commands to be entered in a very formal and restrictive style. The 4D language breaks with tradition, and the benefits are yours. \ No newline at end of file From cd8a8f98d38dcec0eaa74e5c024e79eda9974d3a Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:59:03 +0100 Subject: [PATCH 253/311] New translations arrays.md (Japanese) --- website/translated_docs/ja/Concepts/arrays.md | 144 +++++++++--------- 1 file changed, 72 insertions(+), 72 deletions(-) diff --git a/website/translated_docs/ja/Concepts/arrays.md b/website/translated_docs/ja/Concepts/arrays.md index d220248131698f..4c63e6e3ff1a4e 100644 --- a/website/translated_docs/ja/Concepts/arrays.md +++ b/website/translated_docs/ja/Concepts/arrays.md @@ -1,35 +1,35 @@ --- id: arrays -title: 配列 +title: Arrays --- -**配列** とは、同じタイプの **変数** を番号付きで並べたものです。 各変数は、配列の **要素** といいます。 配列のサイズとは、配列が持つ要素の数を指します。配列は作成時にサイズが与えられ、要素の追加・挿入・削除によって、または作成時に使用したコマンドの再使用によって、何度でもサイズを変更することができます。 配列要素には、1 から N の番号が付けられます (N は配列のサイズ)。 配列は必ず、特別な [要素ゼロ](#配列の要素ゼロ) を持ちます。 配列は 4D の変数です。 他の変数と同様、配列にもスコープがあり、4D ランゲージの規則に従いますが、他と異なるところがいくつかあります。 -> ほとんどの場合において、**配列** より **コレクション** の利用が推奨されます。 コレクションは配列より柔軟なだけでなく、たくさんの専用メソッドを持ちます。 詳細については、[コレクション](Concepts/dt_collection.md) を参照してください。 +An **array** is an ordered series of **variables** of the same type. Each variable is called an **element** of the array. An array is given its size when it is created; you can then resize it as many times as needed by adding, inserting, or deleting elements, or by resizing the array using the same command used to create it. Array elements are numbered from 1 to N, where N is the size of the array. An array always has a special [element zero](#using-the-element-zero-of-an-array). Arrays are 4D variables. Like any variable, an array has a scope and follows the rules of the 4D language, though with some unique differences. +> In most cases, it is recommended to use **collections** instead of **arrays**. Collections are more flexible and provide a wide range of dedicated methods. For more information, please refer to the [Collection](Concepts/dt_collection.md) section. -## 配列の作成 +## Creating Arrays -配列は、"配列" テーマの配列宣言コマンドのいずれかを使用して作成します。 配列宣言コマンドは、1次元または 2次元の配列の作成やサイズ変更をすることができます。 2次元配列の詳細については [二次元配列](#二次元配列) を参照してください。 +You create an array with one of the array declaration commands from the "Array" theme. Each array declaration command can create or resize one-dimensional or two-dimensional arrays. For more information about two-dimensional arrays, see the [two dimensional arrays](#two-dimensional-arrays) section. -次のコードは、10個の要素からなる整数配列を作成 (宣言) します: +The following line of code creates (declares) an Integer array of 10 elements: ```4d ARRAY INTEGER(aiAnArray;10) ``` -次のコードは、さきほど作成した配列を20要素にサイズ変更します: +Then, the following code resizes that same array to 20 elements: ```4d ARRAY INTEGER(aiAnArray;20) ``` -次のコードは、この配列を要素なしにサイズ変更します: +Then, the following code resizes that same array to no elements: ```4d ARRAY INTEGER(aiAnArray;0) ``` -## 配列要素への値の代入 +## Assigning values in arrays -配列中の要素は中カッコ ({…}) を使用して参照します。 中カッコの中には数字を入れて特定の要素を指定します。この数字を要素番号といいます。 次のコードは、5つの名前を atNames という配列に入れ、それらを警告ウィンドウに表示します: +You reference the elements in an array by using curly braces ({…}). A number is used within the braces to address a particular element; this number is called the element number. The following lines put five names into the array called atNames and then display them in alert windows: ```4d ARRAY TEXT(atNames;5) @@ -39,87 +39,87 @@ ARRAY INTEGER(aiAnArray;0) atNames{4}:="Jane" atNames{5}:="John" For($vlElem;1;5) - ALERT("要素番号 #"+String($vlElem)+" の値は "+atNames{$vlElem}+" です。") + ALERT("The element #"+String($vlElem)+" is equal to: "+atNames{$vlElem}) End for ``` -atNames{$vlElem} というシンタックスに注目してください。 atNames{3} のように数値リテラルを使うだけでなく、数値変数によって配列の要素番号を指定することができます。 ループ構造による反復を使用すると (`For...End for`, `Repeat...Until` または `While...End while`)、短いコードで配列の全要素、または一部の要素を対象とした処理をおこなうことができます。 +Note the syntax atNames{$vlElem}. Rather than specifying a numeric literal such as atNames{3}, you can use a numeric variable to indicate which element of an array you are addressing. Using the iteration provided by a loop structure (`For...End for`, `Repeat...Until` or `While...End while`), compact pieces of code can address all or part of the elements in an array. -**重要:** 代入演算子 (:=) と比較演算子 (=) とを混同しないように注意してください。 代入と比較は、まったく異なった性質の処理です。 +**Important:** Be careful not to confuse the assignment operator (:=) with the comparison operator, equal (=). Assignment and comparison are very different operations. -### 配列への配列の代入 -文字列やテキスト変数と違って、配列に配列を代入することはできません。 配列をそっくりそのまま別の配列にコピーするには `COPY ARRAY` コマンドを使います。 +### Assigning an array to another array +Unlike text or string variables, you cannot assign one array to another. To copy (assign) an array to another one, use `COPY ARRAY`. -## 配列の要素ゼロ +## Using the element zero of an array -配列は必ず、要素ゼロを持ちます。 ドロップダウンリストなどのフォームオブジェクトに配列が設定されていた場合、要素ゼロが表示されることはありませんが、ランゲージでの利用に制限はありません (*)。 +An array always has an element zero. While element zero is not shown when an array supports a form object, there is no restriction(*) in using it with the language. -例として、デフォルト値を指定せずにフォームオブジェクトを初期化したいとします。 このような場合に配列の要素ゼロが利用できます: +Here is another example: you want to initialize a form object with a text value but without setting a default value. You can use the element zero of the array: ```4d - // atName 配列と紐づいているコンボボックスまたはドロップダウンリストの - // フォームオブジェクトメソッドです + // method for a combo box or drop-down list + // bound to atName variable array Case of :(Form event code=On Load) - // 要素ゼロを含め - // 配列を初期化します + // Initialize the array (as shown further above) + // But use the element zero ARRAY TEXT(atName;5) - atName{0}:=選択してください" + atName{0}:=Please select an item" atName{1}:="Text1" atName{2}:="Text2" atName{3}:="Text3" atName{4}:="Text4" atName{5}:="Text5" - // 配列の選択要素を要素ゼロに設定します + // Position the array to element 0 atName:=0 End case ``` -(*) ひとつだけ例外があります。配列タイプのリストボックスでは、編集中の元の値を保持するため、内部的に配列の要素ゼロが使用されます。この特別なケースでは、開発者は 0番目の要素を利用できません。 +(*) However, there is one exception: in an array type List Box, the zero element is used internally to store the previous value of an element being edited, so it is not possible to use it in this particular context. -## 二次元配列 +## Two-dimensional Arrays -配列宣言コマンドはそれぞれ、1次元および 2次元の配列を作成、またはサイズ変更ができます。 例: +Each of the array declaration commands can create or resize one-dimensional or two-dimensional arrays. Example: ```4d - ARRAY TEXT(atTopics;100;50) // 100行と 50列からなるテキスト配列を作成します + ARRAY TEXT(atTopics;100;50) // Creates a text array composed of 100 rows of 50 columns ``` -2次元配列は、本質的にはランゲージオブジェクトであり、表示や印刷することはできません。 +Two-dimensional arrays are essentially language objects; you can neither display nor print them. -上のコードで作成した atTopics 配列について、次のことが言えます: +In the previous example: -- atTopics は、2次元配列です。 -- atTopics{8}{5} は、8行5列目の要素です。 -- atTopics{20} は 20行目を指し、それ自体が 1次元の配列です。 -- `Size of array(atTopics)` は、行数の 100を返します。 -- `Size of array(atTopics{17})` は、17行目の列数である50を返します。 +- atTopics is a two-dimensional array +- atTopics{8}{5} is the 5th element (5th column...) of the 8th row +- atTopics{20} is the 20th row and is itself a one-dimensional array +- `Size of array(atTopics)` returns 100, which is the number of rows +- `Size of array(atTopics{17})` returns 50, which the number of columns for the 17th row -以下の例では、データベースの各テーブルの各フィールドへのポインターが 2次元配列に格納されます: +In the following example, a pointer to each field of each table in the database is stored in a two-dimensional array: ```4d C_LONGINT($vlLastTable;$vlLastField) C_LONGINT($vlFieldNumber) - // テーブルと同じ数の空行 (つまり、列なし) を持つ配列作成します + // Create as many rows (empty and without columns) as there are tables $vlLastTable:=Get last table number - ARRAY POINTER(<>apFields;$vlLastTable;0) // X行 0列の 2D配列 - // テーブル毎に + ARRAY POINTER(<>apFields;$vlLastTable;0) //2D array with X rows and zero columns + // For each table For($vlTable;1;$vlLastTable) If(Is table number valid($vlTable)) $vlLastField:=Get last field number($vlTable) - // 全フィールドをチェックします + // Give value of elements $vlColumnNumber:=0 For($vlField;1;$vlLastField) If(Is field number valid($vlTable;$vlField)) $vlColumnNumber:=$vlColumnNumber+1 - // 当該テーブルの行にフィールドに対応する列を挿入していきます + //Insert a column in a row of the table underway INSERT IN ARRAY(<>apFields{$vlTable};$vlColumnNumber;1) - // 作成した "セル" にポインターを割り当てます + //Assign the "cell" with the pointer <>apFields{$vlTable}{$vlColumnNumber}:=Field($vlTable;$vlField) End if End for @@ -127,12 +127,12 @@ atNames{$vlElem} というシンタックスに注目してください。 atNam End for ``` -このように初期化された 2次元配列を使って、以下の方法で特定のテーブルが持つ全フィールドへのポインターを取得できます: +Provided that this two-dimensional array has been initialized, you can obtain the pointers to the fields for a particular table in the following way: ```4d - // 現在選択されているテーブルの、フィールドへのポインターを取得します: + // Get the pointers to the fields for the table currently displayed at the screen: COPY ARRAY(◊apFields{Table(Current form table)};$apTheFieldsIamWorkingOn) - // ブールと日付フィールドを初期化します + // Initialize Boolean and Date fields For($vlElem;1;Size of array($apTheFieldsIamWorkingOn)) Case of :(Type($apTheFieldsIamWorkingOn{$vlElem}->)=Is date) @@ -143,40 +143,40 @@ atNames{$vlElem} というシンタックスに注目してください。 atNam End for ``` -**注:** この例でわかるように、2次元配列の行の列数はそれぞれが同じサイズでも異なるサイズでも構いません。 +**Note:** As this example suggests, rows of a two-dimensional arrays can be the same size or different sizes. -## 配列とメモリ +## Arrays and Memory -テーブルやレコードを使用してディスク上に格納するデータと異なり、配列は常に全体がメモリに保持されます。 +Unlike the data you store on disk using tables and records, an array is always held in memory in its entirety. -たとえば、米国内の郵便番号がすべて [Zip Codes] テーブルに入力されている場合、約100,000件のレコードになります。 加えて、そのテーブルには郵便番号のほかに、対応する市・郡・州という複数のフィールドがあるとします。 カリフォルニアの郵便番号を選択した場合、4D データベースエンジンは [Zip Codes] テーブルから該当するレコードセレクションを作成して、必要な場合にのみ各レコードをロードします (たとえば表示や印刷時)。 つまり、4Dのデータベースエンジンによってディスクからメモリに部分的にロードされた (フィールドごとに同じタイプの) 順序づけられた一連の値で作業するということです。 +For example, if all US zip codes were entered in the [Zip Codes] table, it would contain about 100,000 records. In addition, that table would include several fields: the zip code itself and the corresponding city, county, and state. If you select only the zip codes from California, the 4D database engine creates the corresponding selection of records within the [Zip Codes] table, and then loads the records only when they are needed (i.e., when they are displayed or printed). In order words, you work with an ordered series of values (of the same type for each field) that is partially loaded from the disk into the memory by the database engine of 4D. -同じことを配列で実行するのは、次の理由で禁止すべきです: +Doing the same thing with arrays would be prohibitive for the following reasons: -- 4つの情報タイプ (郵便番号、市、郡、州) を維持するためには、4つの大きな配列をメモリ内で維持する必要があります。 -- 配列は、常に全体がメモリ内に維持されるため、常時使用しない場合でも、作業セッションの間すべてのデータをメモリに置いておく必要があります。 -- 配列全体が常にメモリ内に維持されることから、アプリケーションが開始されるたびに 4つの配列をディスクからロードして、終了時にはディスクに保存する必要があります。当該データが作業セッション中に使用・変更されない場合もこれを省略することができません。 +- In order to maintain the four information types (zip code, city, county, state), you would have to maintain four large arrays in memory. +- Because an array is always held in memory in its entirety, you would have to keep all the zip codes information in memory throughout the whole working session, even though the data is not always in use. +- Again, because an array is always held in memory in its entirety, each time the application is started and then quit, the four arrays would have to be loaded and then saved on the disk, even though the data is not used or modified during the working session. -**結論:** 配列は、ほどよい量のデータを短時間維持するためのものです。 他方、配列はメモリ内に置かれるため、扱いやすく高速操作が可能です。 +**Conclusion:** Arrays are intended to hold reasonable amounts of data for a short period of time. On the other hand, because arrays are held in memory, they are easy to handle and quick to manipulate. -しかし、状況によっては何百、何千という要素を持った配列で作業する必要があります。 次の表に、各配列タイプがメモリ上に占めるバイト数を求めるための計算式を示します: +However, in some circumstances, you may need to work with arrays holding hundreds or thousands of elements. The following table lists the formulas used to calculate the amount of memory used for each array type: -| 配列タイプ | メモリ使用量の計算式 (バイト単位) | -| ------ | ---------------------------------- | -| BLOB | (1+要素数) * 12 + 全BLOB要素の合計サイズ | -| ブール | (31+要素数) \ 8 | -| 日付 | (1+要素数) * 6 | -| 整数 | (1+要素数) * 2 | -| 倍長整数 | (1+要素数) * 4 | -| オブジェクト | (1+要素数) * 8 + 全オブジェクトの合計サイズ | -| ピクチャー | (1+要素数) * 8 + 全ピクチャーの合計サイズ | -| ポインター | (1+要素数) * 8 + 全ポインターの合計サイズ | -| 実数 | (1+要素数) * 8 | -| テキスト | (1+要素数) * 20 + (全テキストの合計サイズ) * 2 | -| 時間 | (1+要素数) * 4 | -| 2次元 | (1+要素数) * 16 + 配列サイズの合計 | +| Array Type | Formula for determining Memory Usage in Bytes | +| --------------- | -------------------------------------------------------------------- | +| Blob | (1+number of elements) * 12 + Sum of the size of each blob | +| Boolean | (31+number of elements)\8 | +| Date | (1+number of elements) * 6 | +| Integer | (1+number of elements) * 2 | +| Long Integer | (1+number of elements) * 4 | +| Object | (1+number of elements) * 8 + Sum of the size of each object | +| Picture | (1+number of elements) * 8 + Sum of the size of each picture | +| Pointer | (1+number of elements) * 8 + Sum of the size of each pointer | +| Real | (1+number of elements) * 8 | +| Text | (1+number of elements) * 20 + (Sum of the length of each text) * 2 | +| Time | (1+number of elements) * 4 | +| Two-dimensional | (1+number of elements) * 16 + Sum of the size of each array | -**注:** +**Notes:** -- メモリ中のテキストサイズは以下の式で計算されます: ((Length + 1) * 2) -- 選択した要素や要素数、配列自体の情報を保持するため、さらに数バイトを要します。 \ No newline at end of file +- The size of a text in memory is calculated using this formula: ((Length + 1) * 2) +- A few additional bytes are required to keep track of the selected element, the number of elements, and the array itself. \ No newline at end of file From 154bf532e03a35191e49284d766a39c64d727cac Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:59:05 +0100 Subject: [PATCH 254/311] New translations cf_looping.md (Japanese) --- .../translated_docs/ja/Concepts/cf_looping.md | 284 +++++++++--------- 1 file changed, 142 insertions(+), 142 deletions(-) diff --git a/website/translated_docs/ja/Concepts/cf_looping.md b/website/translated_docs/ja/Concepts/cf_looping.md index 7f38dfeedb47d6..690d3d9879acad 100644 --- a/website/translated_docs/ja/Concepts/cf_looping.md +++ b/website/translated_docs/ja/Concepts/cf_looping.md @@ -1,58 +1,58 @@ --- id: looping -title: ループ構造 +title: Looping structures --- -ループ構造は、条件が満たされるまで、あるいは指定した回数まで、同じ処理を繰り返します。 +Looping structures repeat a sequence of statements until a condition is met or a number of times is reached. ## While...End while -`While...End while` による制御フロー構造の正式な構文は以下のようになります: +The formal syntax of the `While...End while` control flow structure is: ```4d While(Boolean_Expression) statement(s) End while ``` -`While...End while` ループは、ブール式が true である限り、ループ内のステートメントを実行し続けます。 ループの始めにブール式を評価し、ブール式が FALSE の場合にはループをおこないません。 +A `While...End while` loop executes the statements inside the loop as long as the Boolean expression is TRUE. It tests the Boolean expression at the beginning of the loop and does not enter the loop at all if the expression is FALSE. -一般に、`While...End while` ループに入る手前で、ブール式で判定する値を初期化しておきます。 通常はブール式が true になるように設定してからループに入ります。 +It is common to initialize the value tested in the Boolean expression immediately before entering the `While...End while` loop. Initializing the value means setting it to something appropriate, usually so that the Boolean expression will be TRUE and `While...End while` executes the loop. -ブール式は、ループ内の要素を使って設定されなければなりません。そうでなければ、ループは永久に続くでしょう。 以下の例では、_NeverStop_ がいつも true であるので、ループは永久に続きます。 +The Boolean expression must be set by something inside the loop or else the loop will continue forever. The following loop continues forever because _NeverStop_ is always TRUE: ```4d NeverStop:=True While(NeverStop) End while ``` -このようにメソッドの実行が制御不能になった場合には、トレース機能を使用し、ループを止めて、問題点を追跡することができます。 メソッドのトレース方法については、[エラー処理](error-handling.md) の章を見てください。 +If you find yourself in such a situation, where a method is executing uncontrolled, you can use the trace facilities to stop the loop and track down the problem. For more information about tracing a method, see the [Error handling](error-handling.md) page. -### 例題 +### Example ```4d - CONFIRM("新規レコードを追加しますか?") // ユーザーに確認します - While(OK=1) // 利用者が望む限りループします - ADD RECORD([aTable]) // 新規にレコードを追加します - End while // ループは必ず End while によって終わります + CONFIRM("Add a new record?") //The user wants to add a record? + While(OK=1) //Loop as long as the user wants to + ADD RECORD([aTable]) //Add a new record + End while //The loop always ends with End while ``` -この例では、まずループに入る前に `CONFIRM` コマンドによりシステム変数 `OK` がセットされます。 ユーザーがダイアログボックスで **OK** ボタンをクリックすると、システム変数 `OK` に1がセットされ、ループを開始します。 それ以外の場合はシステム変数 `OK` に0が設定され、ループをスキップします。 ループに入ると、`ADD RECORD` コマンドはループを続けます。これは、ユーザーがレコードを保存した時点で、システム変数 `OK` に1が設定されるからです。 ユーザーが最後のレコードを取り消した (保存しない) 時点で、システム変数 `OK` に0がセットされ、ループは終了します。 +In this example, the `OK` system variable is set by the `CONFIRM` command before the loop starts. If the user clicks the **OK** button in the confirmation dialog box, the `OK` system variable is set to 1 and the loop starts. Otherwise, the `OK` system variable is set to 0 and the loop is skipped. Once the loop starts, the `ADD RECORD` command keeps the loop going because it sets the `OK` system variable to 1 when the user saves the record. When the user cancels (does not save) the last record, the `OK` system variable is set to 0 and the loop stops. ## Repeat...Until -`Repeat...Until` による制御フロー構造の正式な構文は以下のようになります: +The formal syntax of the `Repeat...Until` control flow structure is: ```4d Repeat statement(s) Until(Boolean_Expression) ``` -`Repeat...Until` ループは、[While...End while](flow-control#whileend-while) ループと似ていますが、まずループの後でブール式を判定する点が異なります。 つまり、`Repeat...Until` ループは最低でも1回は必ずループを実行しますが、`While...End while` ループは最初のブール式が FALSE である場合には、ループを1回も実行しません。 +A `Repeat...Until` loop is similar to a [While...End while](flow-control#whileend-while) loop, except that it tests the Boolean expression after the loop rather than before. Thus, a `Repeat...Until` loop always executes the loop once, whereas if the Boolean expression is initially False, a `While...End while` loop does not execute the loop at all. -もう一つの `While...End while` ループとの相違点は、 `Repeat...Until` はブール式が true になるまでループを続行することです。 +The other difference with a `Repeat...Until` loop is that the loop continues until the Boolean expression is TRUE. -### 例題 +### Example -以下の例を、`While...End while` ループの例と比較してください。 ブール式を、初期化しておく必要がない点に注目してください。システム変数 `OK` を初期化する `CONFIRM` コマンドはありません。 +Compare the following example with the example for the `While...End while` loop. Note that the Boolean expression does not need to be initialized—there is no `CONFIRM` command to initialize the `OK` variable. ```4d Repeat @@ -62,7 +62,7 @@ title: ループ構造 ## For...End for -`For...End for` による制御フロー構造の正式な構文は以下のようになります: +The formal syntax of the `For...End for` control flow structure is: ```4d For(Counter_Variable;Start_Expression;End_Expression{;Increment_Expression}) @@ -70,186 +70,186 @@ title: ループ構造 End for ``` -`For...End for` ループは、カウンター変数によりループを制御します: +The `For...End for` loop is a loop controlled by a counter variable: -- カウンター変数 *Counter_Variable* は、数値変数 (実数または倍長整数) で、*Start_Expression* に指定した値に初期化されます。 -- ループを実行するたびに、任意の引数である *Increment_Expression* の値がカウンター変数に加算されます。 *Increment_Expression* を指定しない場合、増分値は1になります。 -- カウンターが *End_Expression* の値を超えた時点で、ループを停止します。 +- The counter variable *Counter_Variable* is a numeric variable (Real or Long Integer) that the `For...End for` loop initializes to the value specified by *Start_Expression*. +- Each time the loop is executed, the counter variable is incremented by the value specified in the optional value *Increment_Expression*. If you do not specify *Increment_Expression*, the counter variable is incremented by one (1), which is the default. +- When the counter variable passes the *End_Expression* value, the loop stops. -**重要:** *Start_Expression*、*End_Expression*、*Increment_Expression* の値は、ループの始めに一度だけ評価されます。 これらの数値が変数で指定されている場合、ループ内でその変数の値を変更してもループは影響を受けません。 +**Important:** The numeric expressions *Start_Expression*, *End_Expression* and *Increment_Expression* are evaluated once at the beginning of the loop. If these expressions are variables, changing one of these variables within the loop will not affect the loop. -**Tip:** 特別な目的のために、カウンター変数 *Counter_Variable* の値を変更することができます。ループ内でカウンター変数を変更すると、ループはその影響を受けます。 +**Tip:** However, for special purposes, you can change the value of the counter variable *Counter_Variable* within the loop; this will affect the loop. -- 通常、*Start_Expression* は *End_Expression* より小さい。 -- *Start_Expression* と *End_Expression* が等しい場合、1回だけループがおこなわれます。 -- *Start_Expression* が *End_Expression* より大きい場合、*Increment_Expression* に負の値を指定しない限り、ループはおこなわれません。 次に例を示します。 +- Usually *Start_Expression* is less than *End_Expression*. +- If *Start_Expression* and *End_Expression* are equal, the loop will execute only once. +- If *Start_Expression* is greater than *End_Expression*, the loop will not execute at all unless you specify a negative *Increment_Expression*. See the examples. -### 基本的な使用例 +### Basic examples -1. 以下の例は、100回の繰り返しをおこないます: +1. The following example executes 100 iterations: ```4d For(vCounter;1;100) - // なんらかの処理 + //Do something End for ``` -2. 以下の例は、配列 anArray の全要素に対して処理をおこないます: +2. The following example goes through all elements of the array anArray: ```4d For($vlElem;1;Size of array(anArray)) - // 各配列要素に対する処理 + //Do something with the element anArray{$vlElem}:=... End for ``` -3. テキスト変数 vtSomeText の文字を一つ一つループ処理します: +3. The following example goes through all the characters of the text vtSomeText: ```4d For($vlChar;1;Length(vtSomeText)) - // 文字がタブであれば + //Do something with the character if it is a TAB If(Character code(vtSomeText[[$vlChar]])=Tab) - // なんらかの処理をします + //... End if End for ``` -4. 以下の例は、テーブル [aTable] のカレントセクションの各レコードについて処理をおこないます: +4. The following example goes through the selected records for the table [aTable]: ```4d FIRST RECORD([aTable]) For($vlRecord;1;Records in selection([aTable])) - // 各レコードに対する処理 + //Do something with the record SEND RECORD([aTable]) //... - // 次レコードへ移動します + //Go to the next record NEXT RECORD([aTable]) End for ``` -プロジェクトで作成する大部分の `For...End for` ループは、上記例題のいずれかの形式になるでしょう。 +Most of the `For...End for` loops you will write in your projects will look like the ones listed in these examples. -### カウンター変数の減算 +### Decrementing variable counter -ループに際してカウンター変数を増加させるのではなく、減少させたい場合があります。 その場合、*Start_Expression* に *End_Expression* より大きい値を設定し、*Increment_Expression* に負の数を指定する必要があります。 次に挙げる例題は、前述の例と同じ処理を逆の順序でおこないます: +In some cases, you may want to have a loop whose counter variable is decreasing rather than increasing. To do so, you must specify *Start_Expression* greater than *End_Expression* and a negative *Increment_Expression*. The following examples do the same thing as the previous examples, but in reverse order: -5. 以下の例は、100回の繰り返しをおこないます: +5. The following example executes 100 iterations: ```4d For(vCounter;100;1;-1) - // なんらかの処理 + //Do something End for ``` -6. 以下の例は、配列 anArray の全要素に対して処理をおこないます: +6. The following example goes through all elements of the array anArray: ```4d For($vlElem;Size of array(anArray);1;-1) - // 各配列要素に対する処理 + //Do something with the element anArray{$vlElem}:=... End for ``` -7. テキスト変数 vtSomeText の文字を一つ一つループ処理します: +7. The following example goes through all the characters of the text vtSomeText: ```4d For($vlChar;Length(vtSomeText);1;-1) - // 文字がタブであれば + //Do something with the character if it is a TAB If(Character code(vtSomeText[[$vlChar]])=Tab) - // なんらかの処理をします + //... End if End for ``` -8. 以下の例は、テーブル [aTable] のカレントセクションの各レコードについて処理をおこないます: +8. The following example goes through the selected records for the table [aTable]: ```4d - FIRST RECORD([aTable]) + LAST RECORD([aTable]) For($vlRecord;Records in selection([aTable]);1;-1) - // 各レコードに対する処理 + //Do something with the record SEND RECORD([aTable]) //... - // 前レコードへ移動します + //Go to the previous record PREVIOUS RECORD([aTable]) End for ``` -### 1より大きな値によるカウンター変数の増加 +### Incrementing the counter variable by more than one -必要に応じて、*Increment_Expression* (正または負の値) に、その絶対値が1より大きな値を指定できます。 +If you need to, you can use an *Increment_Expression* (positive or negative) whose absolute value is greater than one. -9. 以下の例は、配列 anArray の偶数要素について処理を行います: +9. The following loop addresses only the even elements of the array anArray: ```4d For($vlElem;2;Size of array(anArray);2) - // 偶数要素 #2,#4...#2n に対する処理 + //Do something with the element #2,#4...#2n anArray{$vlElem}:=... End for ``` -### ループ構造の比較 +### Comparing looping structures -`For...End for` ループの例をもう一度見てみましょう。 以下の例は、100回の繰り返しをおこないます: +Let's go back to the first `For...End for` example. The following example executes 100 iterations: ```4d For(vCounter;1;100) - // なんらかの処理 + //Do something End for ``` -`While...End while` ループと `Repeat...Until` ループで、同じ処理を実行する方法を調べてみましょう。 以下は、同じ処理を実行する `While...End while` ループです: +It is interesting to see how the `While...End while` loop and `Repeat...Until` loop would perform the same action. Here is the equivalent `While...End while` loop: ```4d - $i:=1 // カウンターの初期化 - While($i<=100) // 100回のループ - // なんらかの処理 - $i:=$i+1 // カウンターの増分が必要 + $i:=1 //Initialize the counter + While($i<=100) //Loop 100 times + //Do something + $i:=$i+1 //Need to increment the counter End while ``` -同じことを `Repeat...Until` ループで記述すると以下のようになります: +Here is the equivalent `Repeat...Until` loop: ```4d - $i:=1 // カウンターの初期化 + $i:=1 //Initialize the counter Repeat - // なんらかの処理 - $i:=$i+1 // カウンターの増分が必要 - Until($i=100) // 100回のループ + //Do something + $i:=$i+1 //Need to increment the counter + Until($i=100) //Loop 100 times ``` -**Tip:** `For...End for` ループは、`While...End while` や `Repeat...Until` ループよりも高速です。これは4Dが内部的にカウンター変数のテストおよび増加を行うからです。 したがって、可能な限り `For...End for` ループの使用が推奨されます。 +**Tip:** The `For...End for` loop is usually faster than the `While...End while` and `Repeat...Until` loops, because 4D tests the condition internally for each cycle of the loop and increments the counter. Therefore, use the `For...End for` loop whenever possible. -### For...End for ループの最適化 +### Optimizing the execution of the For...End for loops -カウンター変数 (インタープロセス、プロセス、ローカル変数) には実数、または倍長整数タイプを使用します。 数多く繰り返されるループの場合、とくにコンパイルモードでは、倍長整数タイプのローカル変数を使用してください。 +You can use Real and Long Integer variables as well as interprocess, process, and local variable counters. For lengthy repetitive loops, especially in compiled mode, use local Long Integer variables. -10. 次に例を示します: +10. Here is an example: ```4d - C_LONGINT($vlCounter) // 倍長整数型のローカル変数を使用します + C_LONGINT($vlCounter) //use local Long Integer variables For($vlCounter;1;10000) - // なんらかの処理 + //Do something End for ``` -### For...End for の入れ子構造 +### Nested For...End for looping structures -制御構造は、必要に応じて入れ子にする (ネストする) ことができます。 `For...End for` ループも同じです。 誤りを避けるため、各ループ構造ごとに別のカウンター変数を使用してください。 +You can nest as many control structures as you (reasonably) need. This includes nesting `For...End for` loops. To avoid mistakes, make sure to use different counter variables for each looping structure. -次に例を示します: +Here are two examples: -11. 以下の例は二次元配列の全要素への処理です: +11. The following example goes through all the elements of a two-dimensional array: ```4d For($vlElem;1;Size of array(anArray)) //... - // 各行に対する処理 + //Do something with the row //... For($vlSubElem;1;Size of array(anArray{$vlElem})) - // 各要素に対する処理 + //Do something with the element anArray{$vlElem}{$vlSubElem}:=... End for End for ``` -12. 以下の例は、データベースのすべての日付フィールドに対するポインターの配列を作成します: +12. The following example builds an array of pointers to all the date fields present in the database: ```4d ARRAY POINTER($apDateFields;0) @@ -272,7 +272,7 @@ title: ループ構造 ## For each...End for each -`For each...End for each` による制御フロー構造の正式な構文は以下のようになります: +The formal syntax of the `For each...End for each` control flow structure is: ```4d For each(Current_Item;Expression{;begin{;end}}){Until|While}(Boolean_Expression)} @@ -280,43 +280,43 @@ title: ループ構造 End for each ``` -`For each...End for each` 構造は、*Expression* に含まれるすべての*Current_item* に対して処理を繰り返します。 *Current_item* の型は *Expression* の型に依存します。 `For each...End for each` ループは3種類の *Expression * を対象に反復処理をおこなうことができます: +The `For each...End for each` structure iterates a specified *Current_item* over all values of the *Expression*. The *Current_item* type depends on the *Expression* type. The `For each...End for each` loop can iterate through three *Expression* types: -- コレクション: コレクションの各要素をループします -- エンティティセレクション: 各エンティティをループします -- オブジェクト: 各オブジェクトプロパティをループします +- collections: loop through each element of the collection, +- entity selections: loop through each entity, +- objects: loop through each object property. -以下の表は、`For each...End for each` の3つのタイプを比較したものです: +The following table compares the three types of `For each...End for each`: -| | コレクション内のループ | エンティティセレクション内のループ | オブジェクト内のループ | -| ----------------------- | ------------------ | ----------------- | ------------- | -| Current_Item の型 | コレクション要素と同じ型の変数 | エンティティ | テキスト変数 | -| Expression の型 | (同じ型の要素を持つ) コレクション | エンティティセレクション | オブジェクト | -| ループ数 (デフォルト) | コレクションの要素数 | セレクション内のエンティティ数 | オブジェクトのプロパティ数 | -| begin / end パラメーターのサポート | ◯ | ◯ | × | +| | Loop through collections | Loop through entity selections | Loop through objects | +| --------------------------------- | ------------------------------------------------ | ----------------------------------- | --------------------------- | +| Current_Item type | Variable of the same type as collection elements | Entity | Text variable | +| Expression type | Collection (with elements of the same type) | Entity selection | Object | +| Number of loops (by default) | Number of collection elements | Number of entities in the selection | Number of object properties | +| Support of begin / end parameters | Yes | Yes | No | -- ループの数は開始時に評価され、処理中に変化することはありません。 ループ中に項目を追加・削除することは、繰り返しの不足・重複を引き起こすことがあるため、一般的には推奨されません。 -- デフォルトでは、内部の _statement(s)_ 部の処理は、*Expression* の各項目に対して実行されます。 しかしながら、ループの先頭 (`While`) あるいはループの終わり (`Until`) で条件をテストすることで、ループを抜け出すことは可能です。 -- 任意の *begin* および *end* パラメーターを指定することで、コレクションおよびエンティティセレクションに対してループの範囲を定義することができます。 -- `For each...End for each` ループは **共有コレクション** や **共有オブジェクト** に対して使用することもできます。 コレクションの要素またはオブジェクトのプロパティを変更する場合は、`Use...End use` 構文も追加で必要です。 `Use...End use` 構文の使い方は、つぎのように状況に応じて異なります: - - 整合性のため要素やプロパティを一括で処理しなくてはならない場合には、ループに入る前 (外側) に使います。 - - 要素やプロパティを個々に変更して差し支えない場合は、ループの中で使います。 +- The number of loops is evaluated at startup and will not change during the processing. Adding or removing items during the loop is usually not recommended since it may result in missing or redundant iterations. +- By default, the enclosed _statement(s)_ are executed for each value in *Expression*. It is, however, possible to exit the loop by testing a condition either at the begining of the loop (`While`) or at the end of the loop (`Until`). +- The *begin* and *end* optional parameters can be used with collections and entity selections to define boundaries for the loop. +- The `For each...End for each` loop can be used on a **shared collection** or a **shared object**. If your code needs to modify one or more element(s) of the collection or object properties, you need to use the `Use...End use` keywords. Depending on your needs, you can call the `Use...End use` keywords: + - before entering the loop, if items should be modified together for integrity reasons, or + - within the loop when only some elements/properties need to be modified and no integrity management is required. -### コレクション内のループ +### Loop through collections -`For each...End for each` が _Collection_ 型の _Expression_ に対して使用された場合、_Current_Item_ はコレクション要素と同じ型の変数です。 デフォルトでは、ループの回数はコレクションの要素数に基づいています。 +When `For each...End for each` is used with an _Expression_ of the _Collection_ type, the _Current_Item_ parameter is a variable of the same type as the collection elements. By default, the number of loops is based on the number of items of the collection. -コレクションの要素はすべて同じ型でなくてはなりません。そうでない場合には、_Current_Item_ 変数に別の型の値が代入されたときにエラーが生成されます。 +The collection must contain only elements of the same type, otherwise an error will be returned as soon as the _Current_Item_ variable is assigned the first mismatched value type. -各ループの繰り返しにおいて、_Current_Item_ 変数には、合致するコレクションの要素が自動的に代入されます。 このとき、以下の点に注意する必要があります: +At each loop iteration, the _Current_Item_ variable is automatically filled with the matching element of the collection. The following points must be taken into account: -- _Current_Item_ 変数がオブジェクト型あるいはコレクション型であった場合 (つまり _Expression_ がオブジェクトのコレクション、あるいはコレクションのコレクションであった場合)、この変数を変更すると自動的にコレクションの対応する要素も変更されます (オブジェクトとコレクションは同じ参照を共有しているからです)。 変数がスカラー型である場合、変数のみが変更されます。 -- _Current_Item_ 変数は、コレクション要素の型と合致している必要があります。 コレクション要素のどれか一つでも、変数と異なる型のものがあった場合、エラーが生成され、ループは停止します。 -- コレクションが **Null** 値の要素を格納していたとき、_Current_Item_ 変数の型が **Null** 値をサポートしない型 (倍長整数変数など) であった場合にはエラーが生成されます。 +- If the _Current_Item_ variable is of the object type or collection type (i.e. if _Expression_ is a collection of objects or of collections), modifying this variable will automatically modify the matching element of the collection (because objects and collections share the same references). If the variable is of a scalar type, only the variable will be modified. +- The _Current_Item_ variable must be of the same type as the collection elements. If any collection item is not of the same type as the variable, an error is generated and the loop stops. +- If the collection contains elements with a **Null** value, an error will be generated if the _Current_Item_ variable type does not support **Null** values (such as longint variables). -#### 例題 +#### Example -数値のコレクションを対象に、統計情報を計算します: +You want to compute some statistics for a collection of numbers: ```4d C_COLLECTION($nums) $nums:=New collection(10;5001;6665;33;1;42;7850) @@ -338,19 +338,19 @@ title: ループ構造 //$vUnder=4,$vOver=2 ``` -### エンティティセレクション内のループ +### Loop through entity selections -`For each...End for each` が _Entity selection_ 型の _Expression_ に対して使用された場合、_Current_Item_ は現在処理中のエンティティです。 +When `For each...End for each` is used with an _Expression_ of the _Entity selection_ type, the _Current_Item_ parameter is the entity that is currently processed. -ループの回数はエンティティセレクション内のエンティティの数に基づきます。 各ループの繰り返しにおいて、*Current_Item* には、処理の対象であるエンティティセレクション内のエンティティが自動的に代入されます。 +The number of loops is based on the number of entities in the entity selection. On each loop iteration, the *Current_Item* parameter is automatically filled with the entity of the entity selection that is currently processed. -**注:** エンティティセレクション内のエンティティが、途中で他のプロセスによって削除された場合、そのエンティティはループにおいて自動的にスキップされます。 +**Note:** If the entity selection contains an entity that was removed meanwhile by another process, it is automatically skipped during the loop. -カレントエンティティに対して適用された変更は、`entity.save( )` で明示的に保存する必要があることに注意してください。 +Keep in mind that any modifications applied on the current entity must be saved explicitly using `entity.save( )`. -#### 例題 +#### Example -Employees データクラスの中から、英国の従業員の給与を引き上げます: +You want to raise the salary of all British employees in an entity selection: ```4d C_OBJECT(emp) For each(emp;ds.Employees.query("country='UK'")) @@ -359,15 +359,15 @@ Employees データクラスの中から、英国の従業員の給与を引き End for each ``` -### オブジェクト内のループ +### Loop through object properties -`For each...End for each` が Object 型の *Expression* に対して使用された場合、*Current_Item* は現在処理中のプロパティ名が自動代入されたテキスト変数です。 +When `For each...End for each` is used with an *Expression* of the Object type, the *Current_Item* parameter is a text variable automatically filled with the name of the currently processed property. -オブジェクトのプロパティは作成順に処理されていきます。 ループ中、プロパティをオブジェクトに追加/削除することが可能ですが、その場合でも残りのループ回数は、オブジェクトの元のプロパティ数に基づいているため、変化しません。 +The properties of the object are processed according to their order of creation. During the loop, properties can be added to or removed from the object, without modifying the number of loops that will remain based on the original number of properties of the object. -#### 例題 +#### Example -下のオブジェクトに格納されている名前に関したプロパティの値をすべて大文字に変えます: +You want to switch the names to uppercase in the following object: ```4d { "firstname": "gregory", @@ -375,7 +375,7 @@ Employees データクラスの中から、英国の従業員の給与を引き "age": 20 } ``` -以下のように書くことができます: +You can write: ```4d For each(property;vObject) If(Value type(vObject[property])=Is text) @@ -390,23 +390,23 @@ Employees データクラスの中から、英国の従業員の給与を引き "age": 20 } ``` -### begin / end パラメーター +### begin / end parameters -任意の begin と end パラメーターを指定することで、繰り返しの範囲を定義することができます。 +You can define bounds to the iteration using the optional begin and end parameters. -**注:** *begin* と *end* パラメーターは、コレクションおよびエンティティセレクション型に対するループにおいてのみ使用することができます (オブジェクト型のときは無視されます)。 +**Note:** The *begin* and *end* parameters can only be used in iterations through collections and entity selections (they are ignored on object properties). -- *begin* には、*Expression* においてループを開始したい要素位置を渡します (このとき *begin* の値が指す要素はループに含まれます)。 -- *end* には、*Expression* においてループを終了する要素位置を渡します (このとき *end* の値が指す要素はループに含まれません)。 +- In the *begin* parameter, pass the element position in *Expression* at which to start the iteration (*begin* is included). +- In the *end* parameter, you can also pass the element position in *Expression* at which to stop the iteration (*end* is excluded). -*end* が省略されている、あるいは *end* が *Expression* の要素数より大きい場合、*begin* 引数の位置から最後の要素まで (含まれる) をループします。 *begin* と *end* が正の値の場合、それらは *Expression* 内の要素の実際の位置を表します。 *begin* 引数が負の値の場合、それは `begin:=begin+Expression のサイズ` として再計算されます (つまり、*Expression* の終端からのオフセットであるとみなされます)。 再計算された値も負の値だった場合、*begin* は0に設定されます。 **注:** *begin* が負の値だったとしても、繰り返しそのものは標準の順番で実行されます。 *end* が負の値だった場合、それは `end:=end+Expression のサイズ` として再計算されます。 +If *end* is omitted or if *end* is greater than the number of elements in *Expression*, elements are iterated from *begin* until the last one (included). If the *begin* and *end* parameters are positive values, they represent actual positions of elements in *Expression*. If *begin* is a negative value, it is recalculed as `begin:=begin+Expression size` (it is considered as the offset from the end of *Expression*). If the calculated value is negative, *begin* is set to 0. **Note:** Even if begin is negative, the iteration is still performed in the standard order. If *end* is a negative value, it is recalculed as `end:=end+Expression size` -たとえば: -- コレクションには 10の要素が格納されています (ナンバリングは #0から#9) -- begin=-4 -> begin=-4+10=6 -> ループは6番目の要素 (#5) から開始されます -- end=-2 -> end=-2+10=8 -> 繰り返しは8番目の要素 (#7) の前に終了します、つまり7番目 (#6) の要素の処理が最後のループとなります。 +For example: +- a collection contains 10 elements (numbered from 0 to 9) +- begin=-4 -> begin=-4+10=6 -> iteration starts at the 6th element (#5) +- end=-2 -> end=-2+10=8 -> iteration stops before the 8th element (#7), i.e. at the 7th element. -#### 例題 +#### Example ```4d C_COLLECTION($col;$col2) @@ -423,28 +423,28 @@ Employees データクラスの中から、英国の従業員の給与を引き //$col2=[1,2,3,"a","b","c","d"] ``` -### Until と While 条件 +### Until and While conditions -`For each...End for each` の実行は、`Until` あるいは `While` 条件を追加することでコントロールすることができます。 `Until(condition)` 条件がループに組み込まれた場合、condition の式が true に評価されるとループは停止します。`While(condition)` 条件の場合は逆に、condition の式が false になるとループが停止します。 +You can control the `For each...End for each` execution by adding an `Until` or a `While` condition to the loop. When an `Until(condition)` statement is associated to the loop, the iteration will stop as soon as the condition is evaluated to `True`, whereas when is case of a `While(condition)` statement, the iteration will stop when the condition is first evaluated to `False`. -使用する条件は状況に応じて選べます: +You can pass either keyword depending on your needs: -- `Until` 条件は各ループの終わりにテストされます。そのため、*Expression* が空あるいは null でないかぎり、ループは少なくとも1回は実行されます。 -- `While` 条件は各ループの始めにテストされます。そのため、評価の結果次第では、ループは一度も実行されないこともありえます。 +- The `Until` condition is tested at the end of each iteration, so if the *Expression* is not empty or null, the loop will be executed at least once. +- The `While` condition is tested at the beginning of each iteration, so according to the condition result, the loop may not be executed at all. -#### 例題 +#### Example ```4d $colNum:=New collection(1;2;3;4;5;6;7;8;9;10) $total:=0 - For each($num;$colNum)While($total<30) // 最初にテストされます + For each($num;$colNum)While($total<30) //tested at the beginning $total:=$total+$num End for each ALERT(String($total)) //$total = 36 (1+2+3+4+5+6+7+8) $total:=1000 - For each($num;$colNum)Until($total>30) // 最後にテストされます + For each($num;$colNum)Until($total>30) //tested at the end $total:=$total+$num End for each ALERT(String($total)) //$total = 1001 (1000+1) From f0e6fe10958c68e5f35209517bf38927c0900a2c Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:59:08 +0100 Subject: [PATCH 255/311] New translations dt_number.md (Japanese) --- .../translated_docs/ja/Concepts/dt_number.md | 170 +++++++++--------- 1 file changed, 85 insertions(+), 85 deletions(-) diff --git a/website/translated_docs/ja/Concepts/dt_number.md b/website/translated_docs/ja/Concepts/dt_number.md index 05724d14541126..bc06230b8a7019 100644 --- a/website/translated_docs/ja/Concepts/dt_number.md +++ b/website/translated_docs/ja/Concepts/dt_number.md @@ -1,24 +1,24 @@ --- id: number -title: 数値 (実数、倍長整数、整数) +title: Number (Real, Longint, Integer) --- -数値とは、以下を示す総称です: +Number is a generic term that stands for: -- 実数のフィールド、変数、または式。 実数データタイプの範囲は、±1.7e±308 (有効数字13桁) です。 -- 倍長整数のフィールド、変数、または式。 倍長整数 (4バイト整数) データタイプの範囲は、-2^31..(2^31)-1です。 -- 整数のフィールド、変数、または式。 整数 (2バイト整数) データタイプの範囲は、-32,768..32,767 (2^15..(2^15)-1)です。 +- Real field, variable or expression. The range for the Real data type is ±1.7e±308 (13 significant digits). +- Long Integer field, variable or expression. The range for the Long Integer data type (4-byte Integer) is -2^31..(2^31)-1. +- Integer field, array or expression. The range for the Integer data type (2-byte Integer) is -32,768..32,767 (2^15..(2^15)-1). -**注:** 整数フィールドの値は、4D ランゲージで使用される際には自動的に倍長整数に変換されます。 +**Note:** Integer field values are automatically converted in Long integers when used in the 4D Language. -数値データタイプは、異なる数値データタイプに代入することができます。このとき、4Dが必要に応じて変換、切り捨て、丸め処理をおこないます。 ただし、値が範囲外の場合には、変換は正しい値を返しません。 数値データタイプは式の中に混在させて使用することができます。 +You can assign any Number data type to another; 4D does the conversion, truncating or rounding if necessary. However, when values are out of range, the conversion will not return a valid value. You can mix Number data types in expressions. -**注:** 4D ランゲージリファレンスでは、実際のデータタイプに関わらず、コマンド説明における実数、整数、倍長整数の引数はとくに明記されていない限り、数値と表記されています。 +**Note:** In the 4D Language Reference manual, no matter the actual data type, the Real, Integer, and Long Integer parameters in command descriptions are denoted as number, except when marked otherwise. -## 数値リテラル +## Number literals -数値リテラル定数は、実数として記述します。 下記に数値定数の例をいくつか示します: +A numeric literal constant is written as a real number. Here are some examples of numeric constants: ```4d 27 @@ -26,9 +26,9 @@ title: 数値 (実数、倍長整数、整数) 0.0076 ``` -> デフォルトの小数点はシステム言語に関係なくピリオド (.) です。 "地域特有のシステム設定を使う" オプション ([メソッドページ](https://doc.4d.com/4Dv18/4D/18/Methods-Page.300-4575690.ja.html) 参照) にチェックがされている場合、システムで定義されている小数点を使用する必要があります。 +> The default decimal separator is a period (.), regardless of the system language. If you have checked the "Use regional system settings" option in the Methods Page of the Preferences, you must use the separator defined in your system. -負の数値は、マイナス記号 (-) を付けて指定します。 たとえば: +Negative numbers are specified with the minus sign (-). For example: ```4d -27 @@ -36,107 +36,107 @@ title: 数値 (実数、倍長整数、整数) -0.0076 ``` -## 数値演算子 - -| 演算子 | シンタックス | 戻り値 | 式 | 結果 | -| --------- | -------- | --- | -------- | ----- | -| 加算 (足し算) | 数値 + 数値 | 数値 | 2 + 3 | 5 | -| 減算 (引き算) | 数値 - 数値 | 数値 | 3 – 2 | 1 | -| 乗算 (かけ算) | 数値 * 数値 | 数値 | 5 * 2 | 10 | -| 除算 (割り算) | 数値 / 数値 | 数値 | 5 / 2 | 2.5 | -| 倍長整数を返す除算 | 数値 \ 数値 | 数値 | 5 \ 2 | 2 | -| モジューロ | 数値 % 数値 | 数値 | 5 % 2 | 1 | -| 指数 | 数値 ^ 数値 | 数値 | 2 ^ 3 | 8 | -| 等しい | 数値 = 数値 | ブール | 10 = 10 | True | -| | | | 10 = 11 | False | -| 異なる | 数値 # 数値 | ブール | 10 # 11 | True | -| | | | 10 # 10 | False | -| 大きい | 数値 > 数値 | ブール | 11 > 10 | True | -| | | | 10 > 11 | False | -| 小さい | 数値 < 数値 | ブール | 10 < 11 | True | -| | | | 11 < 10 | False | -| 以上 | 数値 >= 数値 | ブール | 11 >= 10 | True | -| | | | 10 >= 11 | False | -| 以下 | 数値 <= 数値 | ブール | 10 <= 11 | True | -| | | | 11 <= 10 | False | - -モジューロ演算子 % は最初の数値を 2番目の数値で除算し、その余りの整数を返します。 次に例を示します: - -- 10 % 2は、0を返します。10 は 2 で割り切れるからです。 -- 10 % 3は、1を返します。余りが 1 だからです。 -- 10.5 % 2は、0を返します。余りが整数ではない (0.25) からです。 - -**警告:** -- モジューロ演算子 % は倍長整数の範囲内 (-2^31 から (2^31)-1 まで) の数値に対して有効な値を返します。 この範囲外の数値のモジューロ演算を実行するには、`Mod` コマンドを使用します。 -- 倍長整数を返す除算演算子 \ は、整数値の有効値を返します。 - -### 優先順位 - -式を評価する順番を優先順位と呼びます。 4D における優先順位は厳密に左から右で、代数的順序は採用されていません。 たとえば: +## Number operators + +| Operation | Syntax | Returns | Expression | Value | +| ------------------------ | ---------------- | ------- | ---------- | ----- | +| Addition | Number + Number | Number | 2 + 3 | 5 | +| 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 | +| Modulo | Number % Number | Number | 5 % 2 | 1 | +| Exponentiation | Number ^ Number | Number | 2 ^ 3 | 8 | +| Equality | Number = Number | Boolean | 10 = 10 | True | +| | | | 10 = 11 | False | +| Inequality | Number # Number | Boolean | 10 #11 | True | +| | | | 10 # 10 | False | +| Greater than | Number > Number | Boolean | 11 > 10 | True | +| | | | 10 > 11 | False | +| Less than | Number < Number | Boolean | 10 < 11 | True | +| | | | 11 < 10 | False | +| Greater than or equal to | Number >= Number | Boolean | 11 >= 10 | True | +| | | | 10 >= 11 | False | +| Less than or equal to | Number <= Number | Boolean | 10 <= 11 | True | +| | | | 11 <= 10 | False | + +The modulo operator % divides the first number by the second number and returns a whole number remainder. Here are some examples: + +- 10 % 2 returns 0 because 10 is evenly divided by 2. +- 10 % 3 returns 1 because the remainder is 1. +- 10.5 % 2 returns 0 because the remainder is not a whole number. + +**WARNING:** +- The modulo operator % returns significant values with numbers that are in the Long Integer range (from minus 2^31 to 2^31 minus one). To calculate the modulo with numbers outside of this range, use the `Mod` command. +- The longint division operator \ returns significant values with integer numbers only. + +### Precedence + +The order in which an expression is evaluated is called precedence. 4D has a strict left-to-right precedence, in which algebraic order is not observed. For example: ```4d 3+4*5 ``` -これは 35 を返します。最初に式 3+4 の結果 7 を求め、それに 5 を乗じるので、結果は 35 になります。 +returns 35, because the expression is evaluated as 3 + 4, yielding 7, which is then multiplied by 5, with the final result of 35. -左から右の優先順位を変更するには、必ずカッコを使用します。 たとえば: +To override the left-to-right precedence, you MUST use parentheses. For example: ```4d 3+(4*5) ``` -この式は、23 を返します。カッコがあるため、最初に式 (4*5) の結果 20 を求め、 それに 3 を加えて、結果は 23 になります。 +returns 23 because the expression (4 * 5) is evaluated first, because of the parentheses. The result is 20, which is then added to 3 for the final result of 23. -カッコは、他のカッコの組の内側にネストすることができます。 式の評価が正しくおこなわれるように、必ず各左カッコに対応する右カッコを指定してください。 カッコの不足または誤用は、予測できない結果や、式の無効化につながります。 またコンパイルする場合は、左カッコと右カッコは同じ数でなければなりません。組になっていないカッコはシンタックスエラーとして検出されます。 +Parentheses can be nested inside other sets of parentheses. Be sure that each left parenthesis has a matching right parenthesis to ensure proper evaluation of expressions. Lack of, or incorrect use of parentheses can cause unexpected results or invalid expressions. Furthermore, if you intend to compile your applications, you must have matching parentheses—the compiler detects a missing parenthesis as a syntax error. -## ビットワイズ演算子 +## Bitwise operators -ビットワイズ演算子は、**倍長整数** 式や値に対して演算をおこないます。 +The bitwise operators operates on **Long Integer** expressions or values. -> ビットワイズ演算子に整数値または実数値を渡すと、4Dは値を倍長整数値として評価してから、ビットワイズ演算子を使用した式を計算します。 +> If you pass an Integer or a Real value to a bitwise operator, 4D evaluates the value as a Long Integer value before calculating the expression that uses the bitwise operator. -ビットワイズ演算子を使用する場合、倍長整数値を32ビットの配列と考える必要があります。 これらのビットには、右から左に0~31の番号が付けられます。 +While using the bitwise operators, you must think about a Long Integer value as an array of 32 bits. The bits are numbered from 0 to 31, from right to left. -それぞれのビットは0か1なので、倍長整数値は32のブール値を格納できる値と考えることもできます。 1に等しいビットは **true**、0に等しいビットは **false** を意味します。 +Because each bit can equal 0 or 1, you can also think about a Long Integer value as a value where you can store 32 Boolean values. A bit equal to 1 means **True** and a bit equal to 0 means **False**. -ビットワイズ演算子を使用する式は倍長整数値を返します。Bit Test 演算子の場合、式は例外的にブール値を返します。 次の表にビットワイズ演算子とそのシンタックスを示します: +An expression that uses a bitwise operator returns a Long Integer value, except for the Bit Test operator, where the expression returns a Boolean value. The following table lists the bitwise operators and their syntax: -| 演算子 | 演算子 | シンタックス | 戻り値 | -| ---------------------- | --------- | ------------------- | ---------------- | -| 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 参照) | +| Operation | Operator | Syntax | Returns | +| ---------------------- | --------- | ------------------- | -------------------- | +| Bitwise AND | & | Long & Long | Long | +| Bitwise OR (inclusive) | | | Long | Long | Long | +| Bitwise OR (exclusive) | \^| | Long \^| Long | Long | +| Left Bit Shift | << | Long << Long | Long (see note 1) | +| Right Bit Shift | >> | Long >> Long | Long (see note 1) | +| Bit Set | ?+ | Long ?+ Long | Long (see note 2) | +| Bit Clear | ?- | Long ?- Long | Long (see note 2) | +| Bit Test | ?? | Long ?? Long | Boolean (see note 2) | -#### 注記 +#### Notes -1. `Left Bit Shift` および `Right Bit Shift` 演算では、2番目のオペランドは、結果値において1番目のオペランドのビットがシフトされるビット数を示します。 したがって、この2番目のオペランドは、0~31の間でなければなりません。 0ビットシフトするとその値がそのまま返されます。また、31ビットより多くシフトするとすべてのビットがなくなるので、0x00000000が返されます。 それ以外の値を2番目のオペランドとして渡した場合、結果は意味のない値になります。 -2. `Bit Set`、`Bit Clear`、`Bit Test` 演算では、2番目のオペランドは、作用の対象となるビット番号を示します。 したがって、この2番目のオペランドは0 ~ 31の間です。そうでない場合、式の結果は意味のないものになります。 +1. For the `Left Bit Shift` and `Right Bit Shift` operations, the second operand indicates the number of positions by which the bits of the first operand will be shifted in the resulting value. Therefore, this second operand should be between 0 and 31. Note however, that shifting by 0 returns an unchanged value and shifting by more than 31 bits returns 0x00000000 because all the bits are lost. If you pass another value as second operand, the result is non-significant. +2. For the `Bit Set`, `Bit Clear` and `Bit Test` operations , the second operand indicates the number of the bit on which to act. Therefore, this second operand must be between 0 and 31; otherwise, the result of the expression is non-significant. -次の表は、ビットワイズ演算子とその効果を示します: +The following table lists the bitwise operators and their effects: -| 演算子 | 説明 | -| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Bitwise AND | それぞれの結果ビットは2つのオペランドのビットの論理ANDです。

    下記は、論理ANDの真偽表です:

  • 1 & 1 --> 1
  • 0 & 1 --> 0
  • 1 & 0 --> 0
  • 0 & 0 --> 0

    すなわち、両オペランドのビットが 1 の場合、結果ビットが 1 になり、その他の場合は結果ビットが 0 になります。 | -| Bitwise OR (inclusive) | それぞれの結果ビットは2つのオペランドのビットの論理ORです。

    下記は、論理ORの真偽表です:

  • 1 | 1 --> 1
  • 0 | 1 --> 1
  • 1 | 0 --> 1
  • 0 | 0 --> 0

    すなわち、いずれかのオペランドのビットが 1 の場合、結果ビットが 1 になり、その他の場合は結果ビットが 0 になります。 | -| Bitwise OR (exclusive) | それぞれの結果ビットは2つのオペランドのビットの排他的論理ORです。

    下記は、排他的論理ORの真偽表です:

  • 1 \^| 1 --> 0
  • 0 \^| 1 --> 1
  • 1 \^| 0 --> 1
  • 0 \^| 0 --> 0

    すなわち、オペランドのビットのいずれか一方だけが 1 の場合、結果ビットが 1 になり、その他の場合は結果ビットが 0 になります。 | -| Left Bit Shift | 最初のオペランド値が結果値に設定され、次に結果ビットが2番目のオペランドで示されたビット数だけ左にシフトします。 左側のビットがなくなり、右側の新しいビットは0に設定されます。

    **注記:** 正の数だけを考えると、Nビット左にシフトすることは、2^Nを掛けることと同じです。 | -| Right Bit Shift | 最初のオペランド値が結果値に設定され、次に結果ビットが2番目のオペランドで示されたビット数だけ右にシフトします。 右側のビットがなくなり、左側の新しいビットは0に設定されます。

    **注記:** 正の数だけを考えると、Nビット右にシフトすることは、2^Nで割ることと同じです。 | -| Bit Set | 最初のオペランド値が結果値に設定され、次に結果ビットのうち2番目のオペランドで示されたビットが1に設定されます。 他のビットはそのままです。 | -| Bit Clear | 最初のオペランド値が結果値に設定され、次に結果ビットのうち2番目のオペランドで示されたビットが0に設定されます。 他のビットはそのままです。 | -| Bit Test | 最初のオペランドのうち、2番目のビットで示されたビットが1の場合、trueが返されます。 最初のオペランドのうち、2番目のビットで示されたビットが0の場合、falseが返されます。 | +| Operation | Description | +| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Bitwise AND | Each resulting bit is the logical AND of the bits in the two operands.

    Here is the logical AND table:

  • 1 & 1 --> 1
  • 0 & 1 --> 0
  • 1 & 0 --> 0
  • 0 & 0 --> 0

    In other words, the resulting bit is 1 if the two operand bits are 1; otherwise the resulting bit is 0. | +| Bitwise OR (inclusive) | Each resulting bit is the logical OR of the bits in the two operands.

    Here is the logical OR table:

  • 1 | 1 --> 1
  • 0 | 1 --> 1
  • 1 | 0 --> 1
  • 0 | 0 --> 0

    In other words, the resulting bit is 1 if at least one of the two operand bits is 1; otherwise the resulting bit is 0. | +| Bitwise OR (exclusive) | Each resulting bit is the logical XOR of the bits in the two operands.

    Here is the logical XOR table:

  • 1 \^| 1 --> 0
  • 0 \^| 1 --> 1
  • 1 \^| 0 --> 1
  • 0 \^| 0 --> 0

    In other words, the resulting bit is 1 if only one of the two operand bits is 1; otherwise the resulting bit is 0. | +| Left Bit Shift | The resulting value is set to the first operand value, then the resulting bits are shifted to the left by the number of positions indicated by the second operand. The bits on the left are lost and the new bits on the right are set to 0.

    **Note:** Taking into account only positive values, shifting to the left by N bits is the same as multiplying by 2^N. | +| Right Bit Shift | The resulting value is set to the first operand value, then the resulting bits are shifted to the right by the number of position indicated by the second operand. The bits on the right are lost and the new bits on the left are set to 0.

    **Note:** Taking into account only positive values, shifting to the right by N bits is the same as dividing by 2^N. | +| Bit Set | The resulting value is set to the first operand value, then the resulting bit, whose number is indicated by the second operand, is set to 1. The other bits are left unchanged. | +| Bit Clear | The resulting value is set to the first operand value, then the resulting bit, whose number is indicated by the second operand, is set to 0. The other bits are left unchanged. | +| Bit Test | Returns True if, in the first operand, the bit whose number is indicated by the second operand is equal to 1. Returns False if, in the first operand, the bit whose number is indicated by the second operand is equal to 0. | -### 例題 +### Examples -| 演算子 | 例題 | 戻り値 | +| Operation | Example | Result | | ---------------------- | ------------------------------- | ---------- | | Bitwise AND | 0x0000FFFF & 0xFF00FF00 | 0x0000FF00 | | Bitwise OR (inclusive) | 0x0000FFFF | 0xFF00FF00 | 0xFF00FFFF | From e8a99b00b00111928e45846275b8ba6040b52d9e Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:59:10 +0100 Subject: [PATCH 256/311] New translations classes.md (Japanese) --- .../translated_docs/ja/Concepts/classes.md | 362 +++++++++--------- 1 file changed, 181 insertions(+), 181 deletions(-) diff --git a/website/translated_docs/ja/Concepts/classes.md b/website/translated_docs/ja/Concepts/classes.md index 51dc4c296ba0cf..2bba6eff1a6482 100644 --- a/website/translated_docs/ja/Concepts/classes.md +++ b/website/translated_docs/ja/Concepts/classes.md @@ -4,113 +4,113 @@ title: Classes --- -## 概要 +## Overview -4D ランゲージでは **クラス** の概念がサポートされています。 プログラミング言語では、クラスを利用することによって、属性やメソッドなどを持つ特定のオブジェクト種を定義することができます。 +The 4D language supports the concept of **classes**. In a programming language, using a class allows you to define an object behaviour with associated properties and functions. -ユーザークラスが定義されていれば、そのクラスのオブジェクトをコード内で **インスタンス化** することができます。 各オブジェクトは、それ自身が属するクラスのインスタンスです。 クラスは、別のクラスを [継承](#class-extends-classname) することで、その [関数](#function) を受け継ぐことができます。 +Once a user class is defined, you can **instantiate** objects of this class anywhere in your code. Each object is an instance of its class. A class can [`extend`](#class-extends-classname) another class, and then inherits from its [functions](#function). -> 4D におけるクラスモデルは JavaScript のクラスに類似しており、プロトタイプチェーンに基づきます。 +> The class model in 4D is similar to classes in JavaScript, and based on a chain of prototypes. -たとえば、次のように `Person` クラスを定義した場合: +For example, you could create a `Person` class with the following definition: ```4d -// クラス: Person.4dm +//Class: Person.4dm Class constructor($firstname : Text; $lastname : Text) This.firstName:=$firstname This.lastName:=$lastname ``` -この "Person" のインスタンスをメソッド内で作成するには、以下のように書けます: +In a method, creating a "Person": ``` -var $o : cs.Person // Person クラスのオブジェクト +var $o : cs.Person //object of Person class $o:=cs.Person.new("John";"Doe") // $o:{firstName: "John"; lastName: "Doe" } ``` -## クラスの管理 +## Managing classes -### クラス定義 +### Class definition -4D においてユーザークラスとは、`/Project/Sources/Classes/` フォルダーに保存された専用のメソッドファイル (.4dm) によって定義されます。 ファイル名がクラス名になります。 +A user class in 4D is defined by a specific method file (.4dm), stored in the `/Project/Sources/Classes/` folder. The name of the file is the class name. -クラスを命名する際には、次のルールに留意してください: +When naming classes, you should keep in mind the following rules: -- クラス名は [プロパティ名の命名規則](Concepts/dt_object.md#オブジェクトプロパティ識別子) に準拠している必要があります。 -- 大文字と小文字が区別されること -- 競合防止のため、データベースのテーブルと同じ名前のクラスを作成するのは推奨されないこと +- A class name must be compliant with [property naming rules](Concepts/dt_object.md#object-property-identifiers). +- Class names are case sensitive. +- Giving the same name to a class and a database table is not recommended, in order to prevent any conflict. -たとえば、"Polygon" という名前のクラスを定義するには、次のファイルを作成する必要があります: +For example, if you want to define a class named "Polygon", you need to create the following file: -- Project フォルダー +- Project folder + Project * Sources - Classes + Polygon.4dm -### クラスの削除 +### Deleting a class -既存のクラスを削除するには: +To delete an existing class, you can: -- ディスク上で "Classes" フォルダーより .4dm クラスファイルを削除します。 -- 4D エクスプローラーでは、クラスを選択した状態で ![](assets/en/Users/MinussNew.png) をクリックするか、コンテキストメニューより **移動 > ゴミ箱** を選択します。 +- on your disk, remove the .4dm class file from the "Classes" folder, +- in the 4D Explorer, select the class and click ![](assets/en/Users/MinussNew.png) or choose **Move to Trash** from the contextual menu. -### 4D インターフェースの使用 +### Using 4D interface -**ファイル** メニューまたはエクスプローラーなど、4D インターフェースを介してクラスを作成した場合には、クラスファイルは自動的に適切な場所に保存されます。 +Class files are automatically stored at the appropriate location when created through the 4D interface, either via the **File** menu or the Explorer. -#### ファイルメニューとツールバー +#### File menu and toolbar -4D 開発の **ファイル** メニューまたはツールバーより **新規 > クラス...** を選択することで、開いているプロジェクトにクラスファイルを新規作成することができます。 +You can create a new class file for the project by selecting **New > Class...** in the 4D Developer **File** menu or from the toolbar. -**Ctrl+Shift+Alt+k** ショートカットも使用できます。 +You can also use the **Ctrl+Shift+Alt+k** shortcut. -#### エクスプローラー +#### Explorer -エクスプローラーの **メソッド** ページにおいて、クラスは **クラス** カテゴリに分類されています。 +In the **Methods** page of the Explorer, classes are grouped in the **Classes** category. -クラスを新規作成するには次の方法があります: +To create a new class, you can: -- **クラス** カテゴリを選択し、![](assets/en/Users/PlussNew.png) ボタンをクリックします。 -- エクスプローラーウィンドウの下部にあるアクションメニュー、またはクラスグループのコンテキストメニューから **新規クラス...** を選択します。 ![](assets/en/Concepts/newClass.png) -- エクスプローラーのホームページのコンテキストメニューより **新規 > クラス...** を選択します。 +- select the **Classes** category and click on the ![](assets/en/Users/PlussNew.png) button. +- select **New Class...** from the action menu at the bottom of the Explorer window, or from the contexual menu of the Classes group. ![](assets/en/Concepts/newClass.png) +- select **New > Class...** from the contexual menu of the Explorer's Home page. -#### クラスのコードサポート +#### Class code support -各種 4D 開発ウィンドウ (コードエディター、コンパイラー、デバッガー、ランタイムエクスプローラー) において、クラスコードは "特殊なプロジェクトメソッド" のように扱われます: +In the various 4D Developer windows (code editor, compiler, debugger, runtime explorer), class code is basically handled like a project method with some specificities: -- コードエディター: - - クラスは実行できません - - クラスメソッドはコードのブロックです - - オブジェクトメンバーに対する **定義に移動** 操作はクラスの Function 宣言を探します。例: "$o.f()" の場合、"Function f" を見つけます。 - - クラスのメソッド宣言に対する **参照箇所を検索** 操作は、そのメソッドがオブジェクトメンバーとして使われている箇所を探します。例: "Function f" の場合 "$o.f()" を見つけます。 -- ランタイムエクスプローラーおよびデバッガーにおいて、クラスメソッドは \ コンストラクターまたは \.\ 形式で表示されます。 +- In the code editor: + - a class cannot be run + - a class function is a code block + - **Goto definition** on an object member searches for class Function declarations; for example, "$o.f()" will find "Function f". + - **Search references** on class function declaration searches for the function used as object member; for example, "Function f" will find "$o.f()". +- In the Runtime explorer and Debugger, class functions are displayed with the \ constructor or \.\ format. -## クラスストア +## Class stores -定義されたクラスには、クラスストアよりアクセスすることができます。 クラスストアには次の二つが存在します: +Available classes are accessible from their class stores. Two class stores are available: -- `cs` - ユーザークラスストア -- `4D` - ビルトインクラスストア +- `cs` for user class store +- `4D` for built-in class store ### cs #### cs -> classStore -| 参照 | タイプ | | 説明 | -| ---------- | ------ | -- | --------------------------- | -| classStore | object | <- | プロジェクトまたはコンポーネントのユーザークラスストア | +| Parameter | Type | | Description | +| ---------- | ------ | -- | --------------------------------------------- | +| classStore | object | <- | User class store for the project or component | -`cs` コマンドは、カレントプロジェクトまたはコンポーネントのユーザークラスストアを返します。 これには、プロジェクトまたはコンポーネントにて [定義](#クラス定義) されている、すべてのユーザークラスが含まれます。 デフォルトでは、 [ORDAクラス](ORDA/ordaClasses.md) のみ利用可能です。 +The `cs` command returns the user class store for the current project or component. It returns all user classes [defined](#class-definition) in the opened project or component. By default, only project [ORDA classes](ORDA/ordaClasses.md) are available. -#### 例題 +#### Example -`myClass` オブジェクトの新規インスタンスを作成するには、次のように書きます: +You want to create a new instance of an object of `myClass`: ```4d $instance:=cs.myClass.new() @@ -120,15 +120,15 @@ $instance:=cs.myClass.new() #### 4D -> classStore -| 参照 | タイプ | | 説明 | -| ---------- | ------ | -- | -------- | -| classStore | object | <- | 4Dクラスストア | +| Parameter | Type | | Description | +| ---------- | ------ | -- | -------------- | +| classStore | object | <- | 4D class store | -`4D` コマンドは、ビルトイン 4Dクラスのクラスストアを返します。 [CryptoKey](API/cryptoKeyClass.md) などの専用 API へのアクセスを提供します。 +The `4D` command returns the class store for available built-in 4D classes. It provides access to specific APIs such as [CryptoKey](API/cryptoKeyClass.md). -#### 例題 +#### Example -`CryptoKey` クラスに新規キーを作成するには、次のように書きます: +You want to create a new key in the `CryptoKey` class: ```4d $key:=4D.CryptoKey.new(New object("type";"ECDSA";"curve";"prime256v1")) @@ -136,34 +136,34 @@ $key:=4D.CryptoKey.new(New object("type";"ECDSA";"curve";"prime256v1")) -## コード内のクラスの使用 +## Using classes in your code -### Class オブジェクト +### Class object -プロジェクトにおいてクラスが [定義](#クラス定義) されていれば、それは 4Dランゲージ環境に読み込まれます。 クラスとは、それ自身が ["Class" クラス](API/classClass.md) のオブジェクトです。 Class オブジェクトは次のプロパティや関数を持ちます: +When a class is [defined](#class-definition) in the project, it is loaded in the 4D language environment. A class is an object itself, of ["Class" class](API/classClass.md). A class object has the following properties and function: -- [`name`](API/classClass.md#name) 文字列 -- [`superclass`](API/classClass.md#superclass) オブジェクト (無い場合は null) -- [`new()`](API/classClass.md#new) 関数 (クラスオブジェクトをインスタンス化します) +- [`name`](API/classClass.md#name) string +- [`superclass`](API/classClass.md#superclass) object (null if none) +- [`new()`](API/classClass.md#new) function, allowing to instantiate class objects. -さらに、Class オブジェクトは次を参照できます: +In addition, a class object can reference: -- [`constructor`](#class-constructor) オブジェクト (任意), -- `prototype` オブジェクト: 名前付きの [関数](#function) オブジェクトを格納します (任意) +- a [`constructor`](#class-constructor) object (optional), +- a `prototype` object, containing named [function](#function) objects (optional). -Class オブジェクトは [共有オブジェクト](shared.md) です。したがって、異なる 4Dプロセスから同時にアクセスすることができます。 +A class object is a [shared object](shared.md) and can therefore be accessed from different 4D processes simultaneously. -### プロパティ検索とプロトタイプ +### Property lookup and prototype -4D のすべてのオブジェクトは、なんらかの Class オブジェクトに内部的にリンクしています。 あるプロパティがオブジェクト内で見つからない場合、4D はそのクラスのプロトタイプオブジェクト内を検索します。見つからない場合、4D はそのクラスのスーパークラスのプロトタイプオブジェクト内を探します。これは、スーパークラスが存在しなくなるまで続きます。 +All objects in 4D are internally linked to a class object. When 4D does not find a property in an object, it searches in the prototype object of its class; if not found, 4D continues searching in the prototype object of its superclass, and so on until there is no more superclass. -すべてのオブジェクトは、継承ツリーの頂点である "Object" クラスを継承します。 +All objects inherit from the class "Object" as their inheritance tree top class. ```4d -// クラス: Polygon +//Class: Polygon Class constructor($width : Integer; $height : Integer) This.area:=$width*$height @@ -177,41 +177,41 @@ Class constructor($width : Integer; $height : Integer) // true ``` -オブジェクトのプロパティを列挙する際には、当該クラスのプロトタイプは列挙されません。 したがって、`For each` ステートメントや `JSON Stringify` コマンドは、クラスプロトタイプオブジェクトのプロパティを返しません。 クラスのプロトタイプオブジェクトプロパティは、内部的な隠れプロパティです。 +When enumerating properties of an object, its class prototype is not enumerated. As a consequence, `For each` statement and `JSON Stringify` command do not return properties of the class prototype object. The prototype object property of a class is an internal hidden property. -## クラスキーワード +## Class keywords -クラス定義内では、専用の 4Dキーワードが使用できます: +Specific 4D keywords can be used in class definitions: -- `Function `: オブジェクトのメンバーメソッドを定義します。 -- `Class constructor`: オブジェクトのプロパティを定義します (プロトタイプ定義)。 -- `Class extends `: 継承を定義します。 +- `Function ` to define member methods of the objects. +- `Class constructor` to define the properties of the objects (i.e. the prototype). +- `Class extends ` to define inheritance. ### Function -#### シンタックス +#### Syntax ```4d Function ({$parameterName : type; ...}){->$parameterName : type} -// コード +// code ``` -クラス関数とは、当該クラスのプロトタイプオブジェクトのプロパティです。 また、クラス関数は "Function" クラスのオブジェクトでもあります。 +Class functions are properties of the prototype object of the owner class. They are objects of the "Function" class. -クラス定義ファイルでは、`Function` キーワードと関数名を使用して宣言をおこないます。 関数名は [プロパティ名の命名規則](Concepts/dt_object.md#オブジェクトプロパティ識別子) に準拠している必要があります。 +In the class definition file, function declarations use the `Function` keyword, and the name of the function. The function name must be compliant with [property naming rules](Concepts/dt_object.md#object-property-identifiers). -> **Tip:** アンダースコア ("_") 文字で関数名を開始すると、その関数は 4Dコードエディターの自動補完機能から除外されます。 たとえば、`MyClass` に `Function _myPrivateFunction` を宣言した場合、コードエディターにおいて `"cs.MyClass "` とタイプしても、この関数は候補として提示されません。 +> **Tip:** Starting the function name with an underscore character ("_") will exclude the function from the autocompletion features in the 4D code editor. For example, if you declare `Function _myPrivateFunction` in `MyClass`, it will not be proposed in the code editor when you type in `"cs.MyClass. "`. -関数名のすぐ後に、名前とデータ型を指定して [引数](#引数) を宣言します (戻り値の宣言も可)。 たとえば: +Immediately following the function name, [parameters](#parameters) for the function can be declared with an assigned name and data type, including the return parameter (optional). For example: ```4d Function computeArea($width : Integer; $height : Integer)->$area : Integer ``` -クラスメソッド内でオブジェクトインスタンスを参照するには `This` コマンドを使います。 たとえば: +Within a class function, the `This` command is used as the object instance. For example: ```4d Function setFullname($firstname : Text; $lastname : Text) @@ -222,42 +222,42 @@ Function getFullname()->$fullname : Text $fullname:=This.firstName+" "+Uppercase(This.lastName) ``` -クラス関数の場合には、`Current method name` コマンドは次を返します: "*\.\*" (例: "MyClass.myMethod")。 +For a class function, the `Current method name` command returns: "*\.\*", for example "MyClass.myMethod". -アプリケーションのコード内では、クラス関数はオブジェクトインスタンスのメンバーメソッドとして呼び出され、 **スレッドセーフに関する警告:** クラス関数がスレッドセーフではないのに、"プリエンプティブプロセスで実行可能" なメソッドから呼び出された場合: - 普通のメソッドの場合とは異なり、コンパイラーはエラーを生成しません。 - ランタイムにおいてのみ、4D はエラーを生成します。 +> **Thread-safety warning:** If a class function is not thread-safe and called by a method with the "Can be run in preemptive process" attribute: - the compiler does not generate any error (which is different compared to regular methods), - an error is thrown by 4D only at runtime. -#### 引数 +#### Parameters -関数の引数は、引数の名称とデータ型をコロンで区切って宣言します。 引数名は [プロパティ名の命名規則](Concepts/dt_object.md#オブジェクトプロパティ識別子) に準拠している必要があります。 複数のパラメーター (およびその型) を宣言する場合は、それらをセミコロン (;) で区切ります。 +Function parameters are declared using the parameter name and the parameter type, separated by a colon. The parameter name must be compliant with [property naming rules](Concepts/dt_object.md#object-property-identifiers). Multiple parameters (and types) are separated by semicolons (;). ```4d Function add($x; $y : Variant; $z : Integer; $xy : Object) ``` -> パラメーターの型が宣言されていない場合には、`バリアント型` として定義されます。 +> If the type is not stated, the parameter will be defined as `Variant`. -関数の戻り値を宣言するには (任意)、入力パラメーターリストに矢印 (->) と戻り値の定義を追加します。 XPath: /ul[5]/li[2]/ClassName/ClassName/FunctionName/p[22] たとえば: +You declare the return parameter (optional) by adding an arrow (->) and the return parameter definition after the input parameter(s) list. For example: ```4d Function add($x : Variant; $y : Integer)->$result : Integer ``` -戻り値は、コロン (:) 記号の後に戻り値のデータ型だけを指定して宣言することもできます。その場合は、自動的に $0 が使用されます。 たとえば: +You can also declare the return parameter only by adding `: type`, in which case it will automatically be available through $0. For example: ```4d Function add($x : Variant; $y : Integer): Integer $0:=$x+$y ``` -> メソッド内の引数宣言に使用される [従来の 4D シンタックス](parameters.md#sequential-parameters) を、クラス関数の引数宣言に使うこともできます。 両方のシンタックスは併用することができます。 たとえば: +> The [classic 4D syntax](parameters.md#sequential-parameters) for method parameters can be used to declare class function parameters. Both syntaxes can be mixed. For example: > > ```4d Function add($x : Integer) @@ -269,22 +269,22 @@ Function add($x : Integer) -#### 例題 +#### Example ```4d -// クラス: Rectangle -Class Constructor($width : Integer; $height : Integer) +// Class: Rectangle +Class constructor($width : Integer; $height : Integer) This.name:="Rectangle" This.height:=$height This.width:=$width -// 関数定義 +// Function definition Function getArea()->$result : Integer $result:=(This.height)*(This.width) ``` ```4d -// プロジェクトメソッドにて +// In a project method var $rect : cs.Rectangle var $area : Real @@ -294,36 +294,36 @@ $area:=$rect.getArea() //5000 -### Class Constructor +### Class constructor -#### シンタックス +#### Syntax ```4d -// クラス: MyClass +// Class: MyClass Class Constructor({$parameterName : type; ...}) -// コード +// code ``` -クラスコンストラクター関数を使って、ユーザークラスを定義することができます。このコンストラクターは [引数](#引数) を受け取ることができます。 +A class constructor function, which can accept [parameters](#parameters), can be used to define a user class. -クラスコンストラクターが定義されていると、`new()` クラスメンバーメソッドを呼び出したときに、当該コンストラクターが呼び出されます (引数を指定している場合は `new()` 関数に渡します)。 +In that case, when you call the `new()` class member method, the class constructor is called with the parameters optionally passed to the `new()` function. -クラスコンストラクターメソッドの場合には、`Current method name` コマンドは次を返します: "*\.constructor*" (例: "MyClass.constructor")。 +For a class constructor function, the `Current method name` command returns: "*\.constructor*", for example "MyClass.constructor". -#### 例題: +#### Example: ```4d -// クラス: MyClass -// MyClass のクラスコンストラクター +// Class: MyClass +// Class constructor of MyClass Class Constructor ($name : Text) This.name:=$name ``` ```4d -// プロジェクトメソッドにて -// オブジェクトをインスタンス化します +// In a project method +// You can instantiate an object var $o : cs.MyClass $o:=cs.MyClass.new("HelloWorld") // $o = {"name":"HelloWorld"} @@ -334,43 +334,43 @@ $o:=cs.MyClass.new("HelloWorld") ### Class extends \ -#### シンタックス +#### Syntax ```4d -// クラス: ChildClass +// Class: ChildClass Class extends ``` -クラス宣言において `Class extends` キーワードを使うと、別のユーザークラスの子ユーザークラスを作成することができます。 この子クラスは、親クラスのすべての機能を継承します。 +The `Class extends` keyword is used in class declaration to create a user class which is a child of another user class. The child class inherits all functions of the parent class. -クラス継承は次のルールに沿っている必要があります: +Class extension must respect the following rules: -- ユーザークラスはビルトインクラスを継承できません (例外は 4D.Object で、すべてのユーザークラスにデフォルトで継承されます) -- ユーザークラスは、別のプロジェクトやコンポーネントのユーザークラスを継承できません。 -- ユーザークラスは、自身を継承することはできません。 -- 間接的にも、自身を継承することはできません (例: "a" extends "b" かつ "b" extends "a")。 +- A user class cannot extend a built-in class (except 4D.Object which is extended by default for user classes) +- A user class cannot extend a user class from another project or component. +- A user class cannot extend itself. +- It is not possible to extend classes in a circular way (i.e. "a" extends "b" that extends "a"). -コードエディターやインタープリターは、これらのルールが破られていても検知することはできません。コンパイラーおよび "シンタックスチェック" のみがエラーを生成します。 +Breaking such a rule is not detected by the code editor or the interpreter, only the compiler and `check syntax` will throw an error in this case. -派生クラスは、[`Super`](#super) コマンドを使って親クラスのコンストラクターを呼び出すことができます。. +An extended class can call the constructor of its parent class using the [`Super`](#super) command. -#### 例題 +#### Example -`Polygon` クラスを継承した `Square` クラスを作成します。 +This example creates a class called `Square` from a class called `Polygon`. ```4d -// クラス: Square -// パス: Classes/Square.4dm +//Class: Square +//path: Classes/Square.4dm Class extends Polygon Class constructor ($side : Integer) - // 親クラスのコンストラクターを呼び出します - // 長方形の高さ・幅パラメーターに正方形の一辺の長さを引数として渡します + // It calls the parent class's constructor with lengths + // provided for the Polygon's width and height Super($side;$side) - // 派生クラスにおいては、'This' を使用するより先に - // Super を呼び出しておく必要があります + // In derived classes, Super must be called before you + // can use 'This' This.name:="Square" Function getArea() @@ -383,41 +383,41 @@ Class constructor ($side : Integer) #### Super {( param{;...;paramN} )} {-> Object} -| 引数 | 型 | | 説明 | -| ----- | ------ | -- | ---------------- | -| param | mixed | -> | 親コンストラクターに受け渡す引数 | -| 戻り値 | object | <- | 親オブジェクト | +| Parameter | Type | | Description | +| --------- | ------ | -- | ---------------------------------------------- | +| param | mixed | -> | Parameter(s) to pass to the parent constructor | +| Result | object | <- | Object's parent | -`Super` キーワードによってスーパークラス (親クラス) を呼び出すことができます。 +The `Super` keyword allows calls to the `superclass`, i.e. the parent class. -`Super` は次の2つの目的のために使います: +`Super` serves two different purposes: -- [コンストラクターコード](#class-constructor) 内において、 `Super` はスーパークラスのコンストラクターを呼び出すコマンドです。 コンストラクター内で使用する際には、`Super` コマンドは単独で使用され、また `This` キーワードよりも先に使用される必要があります。 - - 継承ツリーにおいて、すべてのクラスコンストラクターが正しく呼び出されていない場合には、エラー -10748 が生成されます。 呼び出しが有効であることを確認するのは、開発者の役目となります。 - - スーパークラスがコンストラクトされるより先に、`This` コマンドを使った場合には、エラー -10743 が生成されます。 +- inside a [constructor code](#class-constructor), `Super` is a command that allows to call the constructor of the superclass. When used in a constructor, the `Super` command appears alone and must be used before the `This` keyword is used. + - If all class constructors in the inheritance tree are not properly called, error -10748 is generated. It's 4D developer to make sure calls are valid. + - If the `This` command is called on an object whose superclasses have not been constructed, error -10743 is generated. - - `Super` を、オブジェクトのスコープ外で呼び出した場合、または、スーパークラスコンストラクターがすでに呼び出されたオブジェクトを対象に呼び出した場合には、エラー -10746 が生成されます。 + - If `Super` is called out of an object scope, or on an object whose superclass constructor has already been called, error -10746 is generated. ```4d -// myClass コンストラクター +// inside myClass constructor var $text1; $text2 : Text -Super($text1) // テキスト型引数をスーパークラスコンストラクターに渡します -This.param:=$text2 // 2番目の引数を使用します +Super($text1) //calls superclass constructor with a text param +This.param:=$text2 // use second param ``` -- [クラスメンバー関数](#function) 内において、`Super` はスーパークラスのプロトタイプを指し、スーパークラス階層のメンバーメソッドの呼び出しを可能にします。 +- inside a [class member function](#class-function), `Super` designates the prototype of the superclass and allows to call a function of the superclass hierarchy. ```4d -Super.doSomething(42) // スーパークラスにて宣言されている -// "doSomething" メンバーメソッドを呼び出します +Super.doSomething(42) //calls "doSomething" function +//declared in superclasses ``` -#### 例題 1 +#### Example 1 -クラスコンストレクター内で `Super` を使う例です。 `Rectangle` と `Square` クラス の共通要素がコンストラクター内で重複しないよう、このコマンドを呼び出します。 +This example illustrates the use of `Super` in a class constructor. The command is called to avoid duplicating the constructor parts that are common between `Rectangle` and `Square` classes. ```4d -// クラス: Rectangle +// Class: Rectangle Class constructor($width : Integer; $height : Integer) This.name:="Rectangle" This.height:=$height @@ -427,24 +427,24 @@ Class constructor($width : Integer; $height : Integer) Function sayName() ALERT("Hi, I am a "+This.name+".") -// 関数定義 +// Function definition Function getArea() var $0 : Integer $0:=(This.height)*(This.width) ``` ```4d -// クラス: Square +//Class: Square Class extends Rectangle Class constructor ($side : Integer) - // 親クラスのコンストラクターを呼び出します - // 長方形の高さ・幅パラメーターに正方形の一辺の長さを引数として渡します + // It calls the parent class's constructor with lengths + // provided for the Rectangle's width and height Super($side;$side) - // 派生クラスにおいては、'This' を使用するより先に - // Super を呼び出しておく必要があります + // In derived classes, Super must be called before you + // can use 'This' This.name:="Square" Function getArea() @@ -452,22 +452,22 @@ Function getArea() $0:=This.height*This.width ``` -#### 例題 2 +#### Example 2 -クラスメンバーメソッド内で `Super` を使う例です。 メンバーメソッドを持つ `Rectangle` クラスを作成します: +This example illustrates the use of `Super` in a class member method. You created the `Rectangle` class with a function: ```4d -// クラス: Rectangle +//Class: Rectangle Function nbSides() var $0 : Text $0:="I have 4 sides" ``` -`Square` クラスには、スーパークラスメソッドを呼び出すメンバーメソッドを定義します: +You also created the `Square` class with a function calling the superclass function: ```4d -// クラス: Square +//Class: Square Class extends Rectangle @@ -476,65 +476,65 @@ Function description() $0:=Super.nbSides()+" which are all equal" ``` -すると、プロジェクトメソッド内には次のように書けます: +Then you can write in a project method: ```4d var $square : Object var $message : Text $square:=cs.Square.new() -$message:=$square.description() // "I have 4 sides which are all equal" +$message:=$square.description() //I have 4 sides which are all equal ``` ### This #### This -> Object -| 引数 | 型 | | 説明 | -| --- | ------ | -- | ---------- | -| 戻り値 | object | <- | カレントオブジェクト | +| Parameter | Type | | Description | +| --------- | ------ | -- | -------------- | +| Result | object | <- | Current object | -`This` キーワードは、現在処理中のオブジェクトへの参照を返します。 `This` は、4Dにおいて [様々なコンテキスト](https://doc.4d.com/4Dv18/4D/18/This.301-4504875.ja.html) で使用することができます。 +The `This` keyword returns a reference to the currently processed object. In 4D, it can be used in [different contexts](https://doc.4d.com/4Dv18/4D/18/This.301-4504875.en.html). -`This` の値は、呼ばれ方によって決まります。 `This` の値は実行時に代入により設定することはできません。また、呼び出されるたびに違う値となりえます。 +In most cases, the value of `This` is determined by how a function is called. It can't be set by assignment during execution, and it may be different each time the function is called. -オブジェクトのメンバーメソッドとしてフォーミュラが呼び出された場合、`This` はメソッドの呼び出し元であるオブジェクトを指します。 たとえば: +When a formula is called as a member method of an object, its `This` is set to the object the method is called on. For example: ```4d $o:=New object("prop";42;"f";Formula(This.prop)) $val:=$o.f() //42 ``` -[クラスコンストラクター](#class-constructor) 関数が `new()` キーワードにより使用された場合、その内部の `This` はインスタンス化される新規オブジェクトを指します。 +When a [class constructor](#class-constructor) function is used (with the `new()` keyword), its `This` is bound to the new object being constructed. ```4d -// クラス: ob +//Class: ob Class Constructor - // This のプロパティを - // 代入によって作成します + // Create properties on This as + // desired by assigning to them This.a:=42 ``` ```4d -// 4Dメソッドにて +// in a 4D method $o:=cs.ob.new() $val:=$o.a //42 ``` -> コンストラクター内で [Super](#super) キーワードを使ってスーパークラスのコンストラクターを呼び出す場合、必ず `This` よりも先にスーパークラスのコンストラクターを呼ぶ必要があることに留意してください。順番を違えるとエラーが生成されます。 こちらの [例題](#例題-1) を参照ください。 +> When calling the superclass constructor in a constructor using the [Super](#super) keyword, keep in mind that `This` must not be called before the superclass constructor, otherwise an error is generated. See [this example](#example-1). -基本的に、`This` はメソッドの呼び出し元のオブジェクトを指します。 +In any cases, `This` refers to the object the method was called on, as if the method were on the object. ```4d -// クラス: ob +//Class: ob Function f() $0:=This.a+This.b ``` -この場合、プロジェクトメソッドには次のように書けます: +Then you can write in a project method: ```4d $o:=cs.ob.new() @@ -542,23 +542,23 @@ $o.a:=5 $o.b:=3 $val:=$o.f() //8 ``` -この例では、変数 $o に代入されたオブジェクトは *f* プロパティを持たないため、これをクラスより継承します。 *f* は $o のメソッドとして呼び出されるため、メソッド内の `This` は $o を指します。 +In this example, the object assigned to the variable $o doesn't have its own *f* property, it inherits it from its class. Since *f* is called as a method of $o, its `This` refers to $o. -## クラスコマンド +## Class commands -4D ランゲージには、クラス機能を扱う複数のコマンドがあります。 +Several commands of the 4D language allows you to handle class features. ### OB Class #### OB Class ( object ) -> Object | Null -`OB Class` は引数として渡したオブジェクトのクラスを返します。 +`OB Class` returns the class of the object passed in parameter. ### OB Instance of #### OB Instance of ( object ; class ) -> Boolean -`object` が `class`、またはその子クラスに属していれば、`OB Instance of` は `true` を返します。それ以外の場合は `false` を返します。 +`OB Instance of` returns `true` if `object` belongs to `class` or to one of its inherited classes, and `false` otherwise. From e91ffc142aabdfd03a47eff5b22af148c527b864 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:59:12 +0100 Subject: [PATCH 257/311] New translations data-types.md (Japanese) --- .../translated_docs/ja/Concepts/data-types.md | 160 +++++++++--------- 1 file changed, 80 insertions(+), 80 deletions(-) diff --git a/website/translated_docs/ja/Concepts/data-types.md b/website/translated_docs/ja/Concepts/data-types.md index 82494a94ede6c6..fc193816671011 100644 --- a/website/translated_docs/ja/Concepts/data-types.md +++ b/website/translated_docs/ja/Concepts/data-types.md @@ -1,84 +1,84 @@ --- id: data-types -title: データタイプの概要 +title: Data types overview --- -4D においてデータは、主にデータベースフィールドと 4D ランゲージという2つの場所で、そのタイプに応じて扱われます。 - -この2つはおおよそ同じものですが、データベースレベルで提供されているいくつかのデータタイプはランゲージにおいては直接利用可能ではなく、自動的に適宜変換されます。 同様に、いくつかのデータタイプはランゲージでしか利用できません。 各場所で利用可能なデータタイプと、ランゲージでの宣言の仕方の一覧です: - -| データタイプ | データベース | ランゲージ | [`var` 宣言](variables.md#using-the-var-keyword) | [`C_` または `ARRAY` 宣言](variables.md#using-a-c_-directive) | -| ------------------------------------- | ------- | ------- | ---------------------------------------------- | -------------------------------------------------------- | -| [文字列](dt_string.md) | ◯ | テキストに変換 | - | - | -| [テキスト](Concepts/dt_string.md) | ◯ | ◯ | テキスト | `C_TEXT`, `ARRAY TEXT` | -| [日付](Concepts/dt_date.md) | ◯ | ◯ | 日付 | `C_DATE`, `ARRAY DATE` | -| [時間](Concepts/dt_time.md) | ◯ | ◯ | 時間 | `C_TIME`, `ARRAY TIME` | -| [ブール](Concepts/dt_boolean.md) | ◯ | ◯ | ブール | `C_BOOLEAN`, `ARRAY BOOLEAN` | -| [整数](Concepts/dt_number.md) | ◯ | 倍長整数に変換 | 整数 | `ARRAY INTEGER` | -| [倍長整数](Concepts/dt_number.md) | ◯ | ◯ | 整数 | `C_LONGINT`, `ARRAY LONGINT` | -| [64ビット整数](Concepts/dt_number.md) | ◯ (SQL) | 実数に変換 | - | - | -| [実数](Concepts/dt_number.md) | ◯ | ◯ | 実数 | `C_REAL`, `ARRAY REAL` | -| [未定義](Concepts/dt_null_undefined.md) | - | ◯ | - | - | -| [Null](Concepts/dt_null_undefined.md) | - | ◯ | - | - | -| [ポインター](Concepts/dt_pointer.md) | - | ◯ | ポインター | `C_POINTER`, `ARRAY POINTER` | -| [ピクチャー](Concepts/dt_picture.md) | ◯ | ◯ | ピクチャー | `C_PICTURE`, `ARRAY PICTURE` | -| [BLOB](Concepts/dt_blob.md) | ◯ | ◯ | BLOB | `C_BLOB`, `ARRAY BLOB` | -| [オブジェクト](Concepts/dt_object.md) | ◯ | ◯ | オブジェクト | `C_OBJECT`, `ARRAY OBJECT` | -| [コレクション](Concepts/dt_collection.md) | - | ◯ | コレクション | `C_COLLECTION` | -| [バリアント](Concepts/dt_variant.md)(2) | - | ◯ | バリアント | `C_VARIANT` | - -(1) ORDA では、オブジェクト (エンティティ) を介してデータベースフィールドを扱うため、オブジェクトにおいて利用可能なデータタイプのみがサポートされます。 詳細については [オブジェクト](Concepts/dt_object.md) のデータタイプの説明を参照ください。 - -(2) バリアントは実際のところ *データ* タイプではなく、あらゆるデータタイプの値を格納することのできる *変数* タイプです。 - -## デフォルト値 - -コンパイラ支持子によって変数の型が決まるとき、変数はデフォルトの値を受け取り、割り当てがされない限りセッションの間はその値を保ち続けます。 - -デフォルトの値は、変数の型とカテゴリ、その実行コンテキスト (インタープリターかコンパイルか) に加え、コンパイルモードではデータベース設定のコンパイラーページで定義されたコンパイルオプションによって決まります: - -- プロセス変数およびインタープロセス変数は常に "ゼロにする" に設定されます。つまり、型によって、"0"、空の文字列、空のBlob、Nilポインター、空の日付 (00-00-00)、ということです。 -- ローカル変数は以下の様に設定されます: - - インタープリタモード: ゼロにする - - コンパイルモードにおいては、データベース設定の**ローカル変数初期化オプション**によって異なります: - - "ゼロにする" が選択されている場合にはゼロになります。 - - "ランダム値にする" が選択されている場合には、数値と時間については0x72677267、ブールについては常に true、他のものについては "ゼロにする" の場合と同じです。 - - "なし" が選択されている場合には、変数は初期化されず、メモリにある値が採用されます。それは、別の変数に以前使われた値かもしれません。 **注:** 4D では "ゼロにする" の設定を推奨しています。 - -以下の表はこれらのデフォルトの値をあらわしたものです: - -| タイプ | インタープロセス変数 / プロセス変数 / インタープリターモードのローカル変数 / コンパイルモードで "ゼロにする" のローカル変数 | コンパイルモードで "ランダム値にする" のローカル変数 | コンパイルモードで "なし" のローカル変数 | -| ------ | -------------------------------------------------------------------- | ---------------------------- | --------------------------- | -| ブール | False | True | True (場合による) | -| 日付 | 00-00-00 | 00-00-00 | 00-00-00 | -| 倍長整数 | 0 | 1919382119 | 909540880 (場合による) | -| 時間 | 00:00:00 | 533161:41:59 | 249345:34:24 (場合による) | -| ピクチャー | ピクチャーサイズ=0 | ピクチャーサイズ=0 | ピクチャーサイズ=0 | -| 実数 | 0 | 1.250753659382e+243 | 1.972748538022e-217 (場合による) | -| ポインター | Nil=true | Nil=true | Nil=true | -| テキスト | "" | "" | "" | -| BLOB | Blob サイズ=0 | Blob サイズ=0 | Blob サイズ=0 | -| オブジェクト | null | null | null | -| コレクション | null | null | null | -| バリアント | 未定義 | 未定義 | 未定義 | - - -## データタイプの変換 - -4D ランゲージには、データタイプ間の変換をおこなう演算子やコマンドがあります。 4D ランゲージはデータタイプをチェックします。 たとえば、"abc"+0.5+!12/25/96!-?00:30:45?のように記述することはできません。 これは、シンタックス (構文) エラーになります。 - -次の表は、基本のデータタイプ、変換できるデータタイプ、それを実行する際に使用するコマンドを示しています: - -| データタイプ | 文字列に変換 | 数値に変換 | 日付に変換 | 時間に変換 | ブールに変換 | -| ------- | ------ | ----- | ----- | ----- | ------ | -| 文字列 (1) | | Num | 日付 | 時間 | Bool | -| 数値 (2) | String | | | | Bool | -| 日付 | String | | | | Bool | -| 時間 | String | | | | Bool | -| ブール | | Num | | | | - -(1) JSON形式の文字列は `JSON Parse` コマンドを使ってスカラーデータ、オブジェクト、あるいはコレクションに変換することができます。 - -(2) 時間は数値として扱うことができます。 - -**注:** この表に示すデータ変換の他に、演算子と他のコマンドを組み合せることで、より洗練されたデータ変換を実行することができます。 +In 4D, data are handled according to their type in two places: database fields and the 4D language. + +Although they are usually equivalent, some data types available at the database level are not directly available in the language and are automatically converted. Conversely, some data types can only be handled through the language. The following table lists all available data types and how they are supported/declared: + +| Data Types | Database support(1) | Language support | [`var` declaration](variables.md#using-the-var-keyword) | [`C_` or `ARRAY` declaration](variables.md#using-a-c_-directive) | +| ------------------------------------------ | ------------------- | -------------------- | ------------------------------------------------------- | ---------------------------------------------------------------- | +| [Alphanumeric](dt_string.md) | Yes | Converted to text | - | - | +| [Text](Concepts/dt_string.md) | Yes | Yes | Text | `C_TEXT`, `ARRAY TEXT` | +| [Date](Concepts/dt_date.md) | Yes | Yes | Date | `C_DATE`, `ARRAY DATE` | +| [Time](Concepts/dt_time.md) | Yes | Yes | Time | `C_TIME`, `ARRAY TIME` | +| [Boolean](Concepts/dt_boolean.md) | Yes | Yes | Boolean | `C_BOOLEAN`, `ARRAY BOOLEAN` | +| [Integer](Concepts/dt_number.md) | Yes | Converted to longint | Integer | `ARRAY INTEGER` | +| [Longint](Concepts/dt_number.md) | Yes | Yes | Integer | `C_LONGINT`, `ARRAY LONGINT` | +| [Longint 64 bits](Concepts/dt_number.md) | Yes (SQL) | Converted to real | - | - | +| [Real](Concepts/dt_number.md) | Yes | Yes | Real | `C_REAL`, `ARRAY REAL` | +| [Undefined](Concepts/dt_null_undefined.md) | - | Yes | - | - | +| [Null](Concepts/dt_null_undefined.md) | - | Yes | - | - | +| [Pointer](Concepts/dt_pointer.md) | - | Yes | Pointer | `C_POINTER`, `ARRAY POINTER` | +| [Picture](Concepts/dt_picture.md) | Yes | Yes | Picture | `C_PICTURE`, `ARRAY PICTURE` | +| [BLOB](Concepts/dt_blob.md) | Yes | Yes | Blob | `C_BLOB`, `ARRAY BLOB` | +| [Object](Concepts/dt_object.md) | Yes | Yes | Object | `C_OBJECT`, `ARRAY OBJECT` | +| [Collection](Concepts/dt_collection.md) | - | Yes | Collection | `C_COLLECTION` | +| [Variant](Concepts/dt_variant.md)(2) | - | Yes | Variant | `C_VARIANT` | + +(1) Note that ORDA handles database fields through objects (entities) and thus, only supports data types available to these objects. For more information, see the [Object](Concepts/dt_object.md) data type description. + +(2) Variant is actually not a *data* type but a *variable* type that can contain a value of any other data type. + +## Default values + +When variables are typed by means of a compiler directive, they receive a default value, which they will keep during the session as long as they have not been assigned. + +The default value depends on the variable type and category, its execution context (interpreted or compiled), as well as, for compiled mode, the compilation options defined on the Compiler page of the Database settings: + +- Process and interprocess variables are always set "to zero" (which means, depending on the case, "0", an empty string, an empty Blob, a Nil pointer, a blank date (00-00-00), etc.) +- Local variables are set: + - in interpreted mode: to zero + - in compiled mode, depending on the **Initialize local variables** option of the Database settings: + - "to zero": to zero (see above), + - "to a random value": 0x72677267 for numbers and times, always True for Booleans, the same as "to zero" for the others, + - "no": no initialization, meaning whatever is in RAM is used for the variables, like values used before for other variables. **Note:** 4D recommends to use "to zero". + +The following table illustrates these default values: + +| Type | Interprocess/Process (interpreted/compiled), Local (interpreted/compiled "to zero") | Local compiled "random" | Local compiled "no" | +| ---------- | ----------------------------------------------------------------------------------- | ----------------------- | ---------------------------- | +| Booleen | False | True | True (varies) | +| Date | 00-00-00 | 00-00-00 | 00-00-00 | +| Longint | 0 | 1919382119 | 909540880 (varies) | +| Time | 00:00:00 | 533161:41:59 | 249345:34:24 (varies) | +| Picture | picture size=0 | picture size=0 | picture size=0 | +| Real | 0 | 1.250753659382e+243 | 1.972748538022e-217 (varies) | +| Pointer | Nil=true | Nil=true | Nil=true | +| Text | "" | "" | "" | +| Blob | Blob size=0 | Blob size=0 | Blob size=0 | +| Object | null | null | null | +| Collection | null | null | null | +| Variant | undefined | undefined | undefined | + + +## Converting data types + +The 4D language contains operators and commands to convert between data types, where such conversions are meaningful. The 4D language enforces data type checking. For example, you cannot write: "abc"+0.5+!12/25/96!-?00:30:45?. This will generate syntax errors. + +The following table lists the basic data types, the data types to which they can be converted, and the commands used to do so: + +| Data Type to Convert | to String | to Number | to Date | to Time | to Boolean | +| -------------------- | --------- | --------- | ------- | ------- | ---------- | +| String (1) | | Num | Date | Time | Bool | +| Number (2) | String | | | | Bool | +| Date | String | | | | Bool | +| Time | String | | | | Bool | +| Boolean | | Num | | | | + +(1) Strings formatted in JSON can be converted into scalar data, objects, or collections, using the `JSON Parse` command. + +(2) Time values can be treated as numbers. + +**Note:** In addition to the data conversions listed in this table, more sophisticated data conversions can be obtained by combining operators and other commands. From 07f1f8cbd510e6b368de674b6d25b44f3713547d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:59:14 +0100 Subject: [PATCH 258/311] New translations dt_blob.md (Japanese) --- .../translated_docs/ja/Concepts/dt_blob.md | 56 +++++++++---------- 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/website/translated_docs/ja/Concepts/dt_blob.md b/website/translated_docs/ja/Concepts/dt_blob.md index 96e55978332032..37a7c3940c0df2 100644 --- a/website/translated_docs/ja/Concepts/dt_blob.md +++ b/website/translated_docs/ja/Concepts/dt_blob.md @@ -3,65 +3,61 @@ id: blob title: BLOB --- -BLOB (Binary Large OBjects) フィールド・変数・式とは、連続した可変長バイトであり、各バイトを個々にアドレス指定可能な 1つのまとまったオブジェクトとして取り扱うことができます。 サポートされている BLOB のサイズは空 (長さがNULL) から、最大 2,147,483,647 バイト (2GB) までです。 +A BLOB (Binary Large OBjects) field, variable or expression is a contiguous series of bytes which can be treated as one whole object or whose bytes can be addressed individually. A BLOB can be empty (null length) or can contain up to 2147483647 bytes (2 GB). -BLOB は全体がメモリにロードされます。 BLOB 変数はメモリ内にだけ保持され、存在します。 BLOB フィールドは、レコードの他フィールドと同様に、ディスクからメモリにロードされます。 +A BLOB is loaded into memory in its entirety. A BLOB variable is held and exists in memory only. A BLOB field is loaded into memory from the disk, like the rest of the record to which it belongs. -大量のデータを保持できる他のフィールドタイプ (ピクチャーなど) と同様に、レコードを更新してもBLOBフィールドはメモリに複製されません。 したがって、`Old` および `Modified` コマンドをBLOBフィールドに適用しても、返される結果は意味を持ちません。 +Like the other field types that can retain a large amount of data (such as the Picture field type), BLOB fields are not duplicated in memory when you modify a record. Consequently, the result returned by the `Old` and `Modified` commands is not significant when applied to a BLOB field. -## 引数渡し、ポインター、および戻り値 +## Parameter passing, Pointers and function results -4D の BLOB は、4D コマンドまたは 4D プラグインの引数として渡すことができます。 また、BLOB はユーザーメソッドのパラメーターに渡したり、関数の戻り値にすることもできます。 +4D BLOBs can be passed as parameters to 4D commands or plug-in routines that expect BLOB parameters. BLOBS can also be passed as parameters to a user method or be returned as a function result. -ポインターを使用して、BLOB をメソッドに渡すことも出来ます。その場合は BLOB へのポインターを定義し、そのポインターをパラメーターとして渡します。 +To pass a BLOB to your own methods, you can also define a pointer to the BLOB and pass the pointer as parameter. -**例: ** +**Examples:** ```4d - // BLOB タイプの変数を定義します + ` Declare a variable of type BLOB C_BLOB(anyBlobVar) - -// 4Dコマンドに引数として BLOB を渡します + ` The BLOB is passed as parameter to a 4D command SET BLOB SIZE(anyBlobVar;1024*1024) - -// プラグインに BLOB を引数として渡します + ` The BLOB is passed as parameter to an external routine $errCode:=Do Something With This BLOB(anyBlobVar) - -// BLOB を引数として渡し、戻り値をBLOBで受け取ります + ` The BLOB is passed as a parameter to a method that returns a BLOB C_BLOB(retrieveBlob) retrieveBlob:=Fill_Blob(anyBlobVar) - -// BLOB のポインターをメソッドに渡します + ` A pointer to the BLOB is passed as parameter to a user method COMPUTE BLOB(->anyBlobVar) ``` -**プラグイン開発にあたっての注意:** BLOB 引数は “&O” (数字の0ではなく、アルファベットの"O") として宣言します。 +**Note for Plug-in developers:** A BLOB parameter is declared as “&O” (the letter “O”, not the digit “0”). -## 代入 +## Assignment operator -BLOB は相互に代入することができます。 +You can assign BLOBs to each other. -**例: ** +**Example:** ```4d - // BLOB 型の変数を二つ宣言します + ` Declare two variables of type BLOB C_BLOB(vBlobA;vBlobB) -// 一つ目の BLOB に10K のサイズを割り当てます + ` Set the size of the first BLOB to 10K SET BLOB SIZE(vBlobA;10*1024) -// 一つ目の BLOB を二つ目の BLOB に代入します + ` Assign the first BLOB to the second one vBlobB:=vBlobA ``` -ただし、BLOB に演算子を適用することはできません。 +However, no operator can be applied to BLOBs. -## BLOB のアドレス指定 +## Addressing BLOB contents -中カッコ {...} を使用し、BLOB の各バイトを個別にアドレス指定することができます。 BLOB 内では、各バイトに 0 から N-1 の番号が割り当てられています。N は BLOB のサイズです。 例: +You can address each byte of a BLOB individually using the curly brackets symbols {...}. Within a BLOB, bytes are numbered from 0 to N-1, where N is the size of the BLOB. Example: ```4d - // BLOB を定義します + ` Declare a variable of type BLOB C_BLOB(vBlob) -// BLOB のサイズを 256バイトに設定します + ` Set the size of the BLOB to 256 bytes SET BLOB SIZE(vBlob;256) -// 次のループは、BLOB の 256バイトをゼロに初期化します + ` The loop below initializes the 256 bytes of the BLOB to zero For(vByte;0;BLOB size(vBlob)-1) vBlob{vByte}:=0 End for ``` -BLOB の各バイトはすべて個別にアドレス指定できるため、BLOB フィールドまたは変数には実際のところ何でも格納できます。 +Because you can address all the bytes of a BLOB individually, you can actually store whatever you want in a BLOB field or variable. From 198380facb8bb15048e8d0bdc31163ada7df4dc2 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:59:16 +0100 Subject: [PATCH 259/311] New translations dt_boolean.md (Japanese) --- .../translated_docs/ja/Concepts/dt_boolean.md | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/website/translated_docs/ja/Concepts/dt_boolean.md b/website/translated_docs/ja/Concepts/dt_boolean.md index 88f2af4ff272bb..e4c9e5e15c7902 100644 --- a/website/translated_docs/ja/Concepts/dt_boolean.md +++ b/website/translated_docs/ja/Concepts/dt_boolean.md @@ -1,46 +1,46 @@ --- id: boolean -title: ブール +title: Boolean --- -ブールのフィールド、変数、式は、true(真)またはfalse(偽)のいずれかになります。 +A boolean field, variable or expression can be either TRUE or FALSE. -## ブール関数 +## Boolean functions -4Dにはブール演算に使用することのできる、ブール関数があります: `True`, `False`, `Not`。 詳細については、これらのコマンドの説明を参照ください。 +4D provides the Boolean functions `True`, `False`, and `Not` in the dedicated **Boolean** theme. For more information, see the descriptions of these commands -### 例題 +### Example -ボタンの値に基づいて、ブール変数に値を設定します。 myButton ボタンがクリックされたら myBoolean に true を、クリックされていなければ false を設定します。 ボタンがクリックされるとボタン変数の値は1になります。 +This example sets a Boolean variable based on the value of a button. It returns True in myBoolean if the myButton button was clicked and False if the button was not clicked. When a button is clicked, the button variable is set to 1. ```4d - If(myButton=1) // ボタンがクリックされたら - myBoolean:=True // myBoolean を true に設定 - Else // ボタンがクリックされていなければ - myBoolean:=False // myBoolean を false に設定 + If(myButton=1) //If the button was clicked + myBoolean:=True //myBoolean is set to True + Else //If the button was not clicked, + myBoolean:=False //myBoolean is set to False End if ``` -上のコードは以下のように一行で書くこともできます。 +The previous example can be simplified into one line. ```4d myBoolean:=(myButton=1) ``` -## 論理演算子 +## Logical operators -4Dは、ブール式に対して機能する次の論理演算子をサポートしています: 論理積 (AND) と論理和 (OR)。 論理積 (AND) は両方の式が true である場合に true を返します。 論理和 (OR) は少なくとも一方の式が true の時に true を返します。 次の表に、論理演算子を示します: +4D supports two logical operators that work on Boolean expressions: conjunction (AND) and inclusive disjunction (OR). A logical AND returns TRUE if both expressions are TRUE. A logical OR returns TRUE if at least one of the expressions is TRUE. The following table shows the logical operators: -| 演算子 | シンタックス | 戻り値 | 式 | 結果 | -| --- | -------------- | --- | ---------------------------- | ----- | -| AND | ブール & ブール | ブール | ("A" = "A") & (15 # 3) | True | -| | | | ("A" = "B") & (15 # 3) | False | -| | | | ("A" = "B") & (15 = 3) | False | -| OR | ブール | ブール | ブール | ("A" = "A") | (15 # 3) | True | -| | | | ("A" = "B") | (15 # 3) | True | -| | | | ("A" = "B") | (15 = 3) | False | +| Operation | Syntax | Returns | Expression | Value | +| --------- | ----------------------- | ------- | ---------------------------- | ----- | +| AND | Boolean & Boolean | Boolean | ("A" = "A") & (15 # 3) | True | +| | | | ("A" = "B") & (15 # 3) | False | +| | | | ("A" = "B") & (15 = 3) | False | +| OR | Boolean | Boolean | Boolean | ("A" = "A") | (15 # 3) | True | +| | | | ("A" = "B") | (15 # 3) | True | +| | | | ("A" = "B") | (15 = 3) | False | -論理演算子 (AND) の真偽表を示します: +The following is the truth table for the AND logical operator: | Expr1 | Expr2 | Expr1 & Expr2 | | ----- | ----- | ------------- | @@ -49,7 +49,7 @@ myBoolean:=(myButton=1) | False | True | False | | False | False | False | -論理演算子 (OR) の真偽表を示します: +The following is the truth table for the OR logical operator: | Expr1 | Expr2 | Expr1 | Expr2 | | ----- | ----- | ------------------ | @@ -58,7 +58,7 @@ myBoolean:=(myButton=1) | False | True | True | | False | False | False | -**Tip:** 式1と式2の排他的結合子演算を実行する必要がある場合、次の評価式を使用します: +**Tip:** If you need to calculate the exclusive disjunction between Expr1 and Expr2, evaluate: ```4d (Expr1|Expr2) & Not(Expr1 & Expr2) From d593111d20005440c589f642530ef0ac8b2b9d37 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:59:19 +0100 Subject: [PATCH 260/311] New translations dt_collection.md (Japanese) --- .../ja/Concepts/dt_collection.md | 62 +++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/website/translated_docs/ja/Concepts/dt_collection.md b/website/translated_docs/ja/Concepts/dt_collection.md index cc909f40e2514b..38d7c194d5b9cb 100644 --- a/website/translated_docs/ja/Concepts/dt_collection.md +++ b/website/translated_docs/ja/Concepts/dt_collection.md @@ -1,35 +1,35 @@ --- id: collection -title: コレクション +title: Collection --- -コレクションとは、類似または混在した型 (テキスト、数値、日付、オブジェクト、ブール、コレクション、null) の値が順番に並べられたリストです。 +Collections are ordered lists of values of similar or mixed types (text, number, date, object, boolean, collection, or null). -コレクション型の変数を扱うには、オブジェクト記法を使用します ([オブジェクト記法の使用](Concepts/dt_object.md#オブジェクト記法の使用) 参照)。 +Collection type variables are managed using object notation (see [Syntax basics](Concepts/dt_object.md#syntax-basics)). -コレクション要素にアクセスするには、大カッコ内に要素番号を渡します: +To access a collection element, you need to pass the element number inside square brackets: ```4d collectionRef[expression] ``` -*expression* には正の整数を返す有効な 4D式であればどんなものでも渡すことができます。 例: +You can pass any valid 4D expression which returns a positive integer in *expression*. Examples: ```4d - myCollection[5] // コレクションの6番目の要素にアクセス + myCollection[5] //access to 6th element of the collection myCollection[$var] ``` -**注:** コレクション要素は0 番から始まるということに注意してください。 +**Warning:** Collection elements are numbered from 0. -コレクションの要素に値を代入したり、コレクション要素の値を取得したりすることができます: +You can assign a value to a collection element or get a collection element value: ```4d myCol[10]:="My new element" $myVar:=myCol[0] ``` -コレクションの最後の要素を超える要素番号 (インデックス) を指定した場合、コレクションは自動的にリサイズされ、途中のすべての値には null 値が割り当てられらます: +If you assign an element's index that surpasses the last existing element of the collection, the collection is automatically resized and all new intermediary elements are assigned a null value: ```4d var myCol : Collection @@ -40,56 +40,56 @@ collectionRef[expression] //myCol[4]=null ``` -## 初期化 +## Initialization -`New collection` コマンドを使うなどして、コレクションはあらかじめ初期化しておく必要があります。初期化しない場合、要素の取得や変更はシンタックスエラーとなります。 +Collections must have been initialized, for example using the `New collection` command, otherwise trying to read or modify their elements will generate a syntax error. -例: +Example: ```4d var $colVar : Collection //creation of collection type 4D variable $colVar:=New collection //initialization of the collection and assignment to the 4D variable ``` -### 通常コレクションと共有コレクション +### Regular or shared collection -二種類のコレクションを作成することができます: +You can create two types of collections: -- [`New collection`](API/collectionClass.md#new-collection) コマンドを使用して作成する通常 (非共有) コレクション。 通常のコレクションは特別なアクセスコントロールをせずに編集可能ですが、プロセス間で共有することはできません。 -- [`New shared collection`](API/collectionClass.md#new-shared-collection) コマンドを使用して作成する共有コレクション。 共有コレクションはプロセス間 (プリエンティブ・スレッド含む) で共有可能なコレクションです。 共有コレクションへのアクセスは [`Use...End use`](Concepts/shared.md#useend-use) 構造によって管理されています。 +- regular (non-shared) collections, using the [`New collection`](API/collectionClass.md#new-collection) command. These collections can be edited without any specific access control but cannot be shared between processes. +- shared collections, using the [`New shared collection`](API/collectionClass.md#new-shared-collection) command. These collections can be shared between processes, including preemptive threads. Access to these collections is controlled by [`Use...End use`](Concepts/shared.md#useend-use) structures. -詳細な情報については、[共有オブジェクトと共有コレクション](Concepts/shared.md) を参照ください。 +For more information, refer to the [Shared objects and collections](Concepts/shared.md) section. -## コレクション関数 +## Collection functions -4D コレクションへの参照は、コレクションの *メンバー関数* と呼ばれる特別なクラス関数を利用することができます。 コレクション関数は [クラス API リファレンス](API/collectionClass.md) にまとめられています。 +4D collection references benefit from special class functions (sometimes named *member functions*). Collection functions are listed in the [Class API Reference](API/collectionClass.md) section. -たとえば: +For example: ```4d -$newCol:=$col.copy() // $col を $newCol にディープ・コピー -$col.push(10;100) // 10 と 100 をコレクションに追加 +$newCol:=$col.copy() //deep copy of $col to $newCol +$col.push(10;100) //add 10 and 100 to the collection ``` -一部の関数は元のコレクションを変更して返すので、つぎのように連続して呼び出すことが可能です: +Some functions return the original collection after modification, so that you can run the calls in a sequence: ```4d $col:=New collection(5;20) - $col2:=$col.push(10;100).sort() // $col2=[5,10,20,100] + $col2:=$col.push(10;100).sort() //$col2=[5,10,20,100] ``` -### propertyPath 引数 +### propertyPath parameter -いくつかのコレクション関数は引数として _propertyPath_ を受け入れます。 この引数は以下のように用いることができます: +Several functions accept a _propertyPath_ as parameter. This parameter stands for: -- オブジェクトプロパティ名、 例えば "lastName" -- オブジェクトプロパティパス (ドット文字で繋げられたサブプロパティの階層シーケンスなど)。例: "employee.children.firstName" +- either an object property name, for example "lastName" +- or an object property path, i.e. a hierarchical sequence of sub-properties linked with dot characters, for example "employee.children.firstName". -**警告:** 関数に propertyPath 引数を渡す場合、そのプロパティ名には "." (ドット)、"[ ]" (大カッコ)、あるいは " " (スペース) を使えません。これらを使用するとパスを正しく解析できなくなります: +**Warning:** When using functions and propertyPath parameters, you cannot use ".", "[ ]", or spaces in property names since it will prevent 4D from correctly parsing the path: ```4d - $vmin:=$col.min("My.special.property") // undefined - $vmin:=$col.min(["My.special.property"]) // エラー + $vmin:=$col.min("My.special.property") //undefined + $vmin:=$col.min(["My.special.property"]) //error ``` \ No newline at end of file From 0587ffdcceefe43d0f0fafa06f063efddf80a2de Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:59:21 +0100 Subject: [PATCH 261/311] New translations dt_date.md (Japanese) --- .../translated_docs/ja/Concepts/dt_date.md | 68 +++++++++---------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/website/translated_docs/ja/Concepts/dt_date.md b/website/translated_docs/ja/Concepts/dt_date.md index f1247cc668ff27..8e6aa46d6587a5 100644 --- a/website/translated_docs/ja/Concepts/dt_date.md +++ b/website/translated_docs/ja/Concepts/dt_date.md @@ -1,17 +1,17 @@ --- id: date -title: 日付 +title: Date --- -日付フィールド、変数、式として認識できる範囲は、100/1/1 から 32,767/12/31 までです。(日本語版の 4D を使用した場合、日付の順序は年/月/日の順になります。) +A Date field, variable or expression can be in the range of 1/1/100 to 12/31/32,767. -C_DATE によって宣言された日付は 32767年までの範囲に対応していますが、システムを経由する処理によっては上限にさらなる制限が課せられます。 +Although the representation mode for dates by can work with dates up to the year 32 767, certain operations passing through the system impose a lower limit. -**注:** 4D ランゲージリファレンスでは、コマンド説明における日付引数はとくに明記されていない限り、「日付」と表記されています。 +**Note:** In the 4D Language Reference manual, Date parameters in command descriptions are denoted as Date, except when marked otherwise. -## 日付リテラル +## Date literals -日付リテラル定数は、エクスクラメーションマーク (! ... !) で囲んで表します。 日付は ISOフォーマット (!YYYY-MM-DD!) を使って記述します。 下記に、日付定数の例を示します: +A date literal constant is enclosed by exclamation marks (!…!). A date must be structured using the ISO format (!YYYY-MM-DD!). Here are some examples of date constants: ```4d !1976-01-01! @@ -19,31 +19,31 @@ C_DATE によって宣言された日付は 32767年までの範囲に対応し !2015-12-31! ``` -空の日付は、 _!00-00-00!_ のように指定します。 - -**Tip:** メソッドエディターでは空の日付を入力するためのショートカットが提供されています。 空の日付を入力するには、エクスクラメーションマーク (!) の入力後に Enterキーを押します。 - -**注:** - -- 互換性の理由から、4D は二桁の年次の入力を受け付けます。 数字が 30以上の場合は 20世紀 (1900年代)、30未満の場合は 21世紀 (2000年代) であると認識します (ただしデフォルト設定が `SET DEFAULT CENTURY` コマンドを使用して変更されていない場合に限ります)。 -- "地域特有のシステム設定を使う" オプション ([メソッドページ](https://doc.4d.com/4Dv18/4D/18/Methods-Page.300-4575690.ja.html) 参照) にチェックがされている場合、システムで定義されている日付フォーマットを使用する必要があります。 一般的に、US環境においては、日付は月/日/年の形式で入力され、値はスラッシュ "/" で区切られます。 - -## 日付演算子 - -| 演算子 | シンタックス | 戻り値 | 式 | 結果 | -| ----- | ---------- | --- | ---------------------------- | ------------ | -| 日付の差 | 日付 - 日付 | 数値 | !2017-01-20! - !2017-01-01! | 19 | -| 日付の加算 | 日付 + 数値 | 日付 | !2017-01-20! + 9 | !2017-01-29! | -| 日付の減算 | 日付 - 数値 | 日付 | !2017-01-20! - 9 | !2017-01-11! | -| 等しい | 日付 = 日付 | ブール | !2017-01-01! =!2017-01-01! | True | -| | | | !2017-01-20! = !2017-01-01! | False | -| 異なる | 日付 # 日付 | ブール | !2017-01-20! # !2017-01-01! | True | -| | | | !2017-01-20! # !2017-01-20! | False | -| 大きい | 日付 > 日付 | ブール | !2017-01-20! > !2017-01-01! | True | -| | | | !2017-01-20! > !2017-01-20! | False | -| 小さい | 日付 < 日付 | ブール | !2017-01-01! < !2017-01-20! | True | -| | | | !2017-01-20! < !2017-01-20! | False | -| 以上 | 日付 >= 日付 | ブール | !2017-01-20! >=!2017-01-01! | True | -| | | | !2017-01-01!>=!2017-01-20! | False | -| 以下 | 日付 \<= 日付 | ブール | !2017-01-01!\<=!2017-01-20! | True | -| | | | !2017-01-20!\<=!2017-01-01! | False | +A null date is specified by _!00-00-00!_. + +**Tip:** The Method Editor includes a shortcut for entering a null date. To type a null date, enter the exclamation (!) character and press Enter. + +**Notes:** + +- For compatibility reasons, 4D accepts two-digit years to be entered. A two-digit year is assumed to be in the 20th or 21st century based on whether it is greater or less than 30, unless this default setting has been changed using the `SET DEFAULT CENTURY` command. +- If you have checked the "Use regional system settings" option (see Methods Page), you must use the date format defined in your system. Generally, in a US environment, dates are entered in the form month/day/year, with a slash "/" separating the values. + +## Date operators + +| Operation | Syntax | Returns | Expression | Value | +| ------------------------ | -------------- | ------- | ---------------------------- | ------------ | +| Date difference | Date – Date | Number | !2017-01-20! - !2017-01-01! | 19 | +| Day addition | Date + Number | Date | !2017-01-20! + 9 | !2017-01-29! | +| Day subtraction | Date – Number | Date | !2017-01-20! - 9 | !2017-01-11! | +| Equality | Date = Date | Boolean | !2017-01-01! =!2017-01-01! | True | +| | | | !2017-01-20! = !2017-01-01! | False | +| Inequality | Date # Date | Boolean | !2017-01-20! # !2017-01-01! | True | +| | | | !2017-01-20! # !2017-01-20! | False | +| Greater than | Date > Date | Boolean | !2017-01-20! > !2017-01-01! | True | +| | | | !2017-01-20! > !2017-01-20! | False | +| Less than | Date < Date | Boolean | !2017-01-01! < !2017-01-20! | True | +| | | | !2017-01-20! < !2017-01-20! | False | +| Greater than or equal to | Date >= Date | Boolean | !2017-01-20! >=!2017-01-01! | True | +| | | | !2017-01-01!>=!2017-01-20! | False | +| Less than or equal to | Date \<= Date | Boolean | !2017-01-01!\<=!2017-01-20! | True | +| | | | !2017-01-20!\<=!2017-01-01! | False | From 3f590f09619c640471e03bdb0f18d878f205a86d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:59:23 +0100 Subject: [PATCH 262/311] New translations dt_null_undefined.md (Japanese) --- .../ja/Concepts/dt_null_undefined.md | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/website/translated_docs/ja/Concepts/dt_null_undefined.md b/website/translated_docs/ja/Concepts/dt_null_undefined.md index c55f08e4942d6e..e68c37206daaa5 100644 --- a/website/translated_docs/ja/Concepts/dt_null_undefined.md +++ b/website/translated_docs/ja/Concepts/dt_null_undefined.md @@ -1,27 +1,27 @@ --- id: null-undefined -title: Null と 未定義 +title: Null and Undefined --- -Null および未定義は、式の値が未知のケースを扱うデータ型です。 +Null and Undefined are data types that handle cases where the value of an expression is not known. ## Null -Null は **null** の値のみをとることのできる特殊なデータタイプです。 この値は、値を持たない式によって返されます。 +Null is a special data type with only one possible value: **null**. This value is returned by an expression that does not contain any value. -4D ランゲージやオブジェクトフィールド属性においては、`Null` 関数を使ってnull値を扱います。 この関数をつぎの式と組み合わせて使うことで、null値の設定や比較をおこなうことができます: +In the 4D language and for object field attributes, null values are managed through the `Null` function. This function can be used with the following expressions for setting or comparing the null value: -- オブジェクトの属性 -- コレクションの要素 -- オブジェクト型、コレクション型、ポインター型、ピクチャー型、バリアント型の変数 +- object attributes +- collection elements +- variables of the object, collection, pointer, picture, or variant type. -## 未定義 +## Undefined -未定義 (undefined) は、実際にはデータタイプではありません。 未定義は、まだ定義されていない変数を示します。 関数 (結果を返すプロジェクトメソッド) は、メソッド内で戻り値 ($0) に未定義式が代入されている場合、未定義値を返すことがあります。未定義式とは、未定義の変数を一つ以上使っている式のことです。 フィールドは、未定義にはできません (フィールドの場合、`Undefined` コマンドは常に False を返します)。 バリアント型変数は **undefined** がデフォルト値となっています。 +Undefined is not actually a data type. It denotes a variable that has not yet been defined. A function (a project method that returns a result) can return an undefined value if, within the method, the function result ($0) is assigned an undefined expression (an expression calculated with at least one undefined variable). A field cannot be undefined (the `Undefined` command always returns False for a field). A variant variable has **undefined** as default value. -## 例題 +## Examples -オブジェクトプロパティを対象に、`Undefined` および `Null` コマンドを使用した場合の結果の例です: +Here are the different results of the `Undefined` command as well as the `Null` command with object properties, depending on the context: ```4d C_OBJECT($vEmp) @@ -29,12 +29,12 @@ $vEmp:=New object $vEmp.name:="Smith" $vEmp.children:=Null -$undefined:=Undefined($vEmp.name) // false -$null:=($vEmp.name=Null) //false +$undefined:=Undefined($vEmp.name) // False +$null:=($vEmp.name=Null) //False -$undefined:=Undefined($vEmp.children) // false -$null:=($vEmp.children=Null) //true +$undefined:=Undefined($vEmp.children) // False +$null:=($vEmp.children=Null) //True -$undefined:=Undefined($vEmp.parent) // true -$null:=($vEmp.parent=Null) //true +$undefined:=Undefined($vEmp.parent) // True +$null:=($vEmp.parent=Null) //True ``` From 7dbf966258de6c5fe41dad824b2118a05d567fd3 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:11:05 +0100 Subject: [PATCH 263/311] New translations webServerClass.md (French) --- website/translated_docs/fr/API/webServerClass.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/API/webServerClass.md b/website/translated_docs/fr/API/webServerClass.md index c7e9234bacc8d9..181e67121018b4 100644 --- a/website/translated_docs/fr/API/webServerClass.md +++ b/website/translated_docs/fr/API/webServerClass.md @@ -561,7 +561,7 @@ Valeurs possibles : 500000 - 2147483648 **.maxSessions** : Number -The maximum number of simultaneous sessions. Lorsque vous atteignez la limite, la session la plus ancienne est fermée (et la méthode base `On Web Close Process` est appelée) si le serveur Web doit en créer une nouvelle. The number of simultaneous sessions cannot exceed the total number of web processes (maxConcurrentProcesses property, 100 by default) +The maximum number of simultaneous sessions. Lorsque vous atteignez la limite, la session la plus ancienne est fermée (et la méthode base `On Web Close Process` est appelée) si le serveur Web doit en créer une nouvelle. Lorsque vous atteignez la limite, la session la plus ancienne est fermée (et la méthode base `On Web Close Process` est appelée) si le serveur Web doit en créer une nouvelle. From 56899c55b9f640752aa6f6a43ce29d329df9ba71 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:15:36 +0100 Subject: [PATCH 264/311] New translations entities.md (French) --- website/translated_docs/fr/ORDA/entities.md | 119 +++++++++++++------- 1 file changed, 79 insertions(+), 40 deletions(-) diff --git a/website/translated_docs/fr/ORDA/entities.md b/website/translated_docs/fr/ORDA/entities.md index 85e38beff2777e..411244dc3f8734 100644 --- a/website/translated_docs/fr/ORDA/entities.md +++ b/website/translated_docs/fr/ORDA/entities.md @@ -184,71 +184,109 @@ You can create an object of type [entity selection](dsMapping.md#entity-selectio Vous pouvez créer et utiliser simultanément autant de sélections d'entités différentes que vous le souhaitez pour une dataclass. A noter qu'une sélection d'entité ne contient que des références à des entités. Différentes sélections d'entités peuvent contenir des références vers les mêmes entités. -### Shareable or non-shareable entity selections +### Shareable or alterable entity selections -An entity selection can be **shareable** (readable by multiple processes, but not modifiable after creation) or **non-shareable** (only usable by the current process, but modifiable afterwards): +An entity selection can be **shareable** (readable by multiple processes, but not alterable after creation) or **alterable** (supports the [`.add()`](API/entitySelectionClass.md#add) function, but only usable by the current process). -- a **shareable** entity selection has the following characteristics: - - it can be stored in a shared object or shared collection, and can be shared between several processes or workers; - - it can be stored in several shared objects or collections, or in a shared object or collection which already belongs to a group (it does not have a *locking identifier*); - - it does not allow the addition of new entities. Trying to add an entity to a shareable entity selection will trigger an error (1637 - This entity selection cannot be altered). To add an entity to a shareable entity selection, you must first transform it into a non-shareable entity selection using the [`.copy()`](API/entitySelectionClass.md#copy) function, before calling [`.add()`](API/entitySelectionClass.md#add). +#### Propriétés -- a **non-shareable** entity selection has the following characteristics: - + it cannot be shared between processes, nor be stored in a shared object or collection. Trying to store a non-shareable entity selection in a shared object or collection will trigger an error (-10721 - Not supported value type in a shared object or shared collection); - + it accepts the addition of new entities. +A **shareable** entity selection has the following characteristics: -In most cases, new entity selections are **shareable**, including: +- it can be stored in a shared object or shared collection, and can be passed as parameter between several processes or workers; +- it can be stored in several shared objects or collections, or in a shared object or collection which already belongs to a group (it does not have a *locking identifier*); +- it does not allow the addition of new entities. Trying to add an entity to a shareable entity selection will trigger an error (1637 - This entity selection cannot be altered). To add an entity to a shareable entity selection, you must first transform it into a non-shareable entity selection using the [`.copy()`](API/entitySelectionClass.md#copy) function, before calling [`.add()`](API/entitySelectionClass.md#add). -- entity selections resulting from various ORDA class functions ([`.query()`](API/entitySelectionClass.md#query), [`.query()`](API/dataclassClass.md#query), etc.), -- entity selections based upon relations (e.g. `company.employee`), -- entity selections resulting from projections of values (e.g. `ds.Employee.all().employer`), -- entity selections explicitely copied as shareable with [`.copy()`](API/entitySelectionClass.md#copy) or `OB Copy`. +> Most entity selection functions (such as [`.slice()`](API/entitySelectionClass.md#slice), [`.and()`](API/entitySelectionClass.md#and)...) support shareable entity selections since they do not need to alter the original entity selection (they return a new one). -New entity selections are **non-shareable** in the following cases: +An **alterable** entity selection has the following characteristics: -- blank entity selections created using the [`.newSelection()`](API/dataclassClass.md#newselection) function or `Create entity selection` command, -- entity selections explicitely copied as non-shareable with [`.copy()`](API/entitySelectionClass.md#copy) or `OB Copy`. +- it cannot be shared between processes, nor be stored in a shared object or collection. Trying to store a non-shareable entity selection in a shared object or collection will trigger an error (-10721 - Not supported value type in a shared object or shared collection); +- it accepts the addition of new entities, i.e. it is supports the [`.add()`](API/entitySelectionClass.md#add) function. -#### Exemple + +#### How are they defined? + +The **shareable** or **alterable** nature of an entity selection is defined when the entity selection is created (it cannot be modified afterwards). You can know the nature of an entity selection using the [.isAlterable()](API/entitySelectionClass.md#isalterable) function or the `OB Is shared` command. + + +A new entity selection is **shareable** in the following cases: + +- the new entity selection results from an ORDA class function applied to a dataClass: [dataClass.all()](API/dataclassClass.md#all), [dataClass.fromCollection()](API/dataclassClass.md#fromcollection), [dataClass.query()](API/dataclassClass.md#query), +- the new entity selection is based upon a relation [entity.*attributeName*](API/entityClass.md#attributename) (e.g. "company.employees") when *attributeName* is a one-to-many related attribute but the entity does not belong to an entity selection. +- the new entity selection is explicitely copied as shareable with [entitySelection.copy()](API/entitySelectionClass.md#copy) or `OB Copy` (i.e. with the `ck shared` option). + +Exemple : +```4d +$myComp:=ds.Company.get(2) //$myComp does not belong to an entity selection +$employees:=$myComp.employees //$employees is shareable +``` + +A new entity selection is **alterable** in the following cases: + +- the new entity selection created blank using the [dataClass.newSelection()](API/dataclassClass.md#newselection) function or `Create entity selection` command, +- the new entity selection is explicitely copied as alterable with [entitySelection.copy()](API/entitySelectionClass.md#copy) or `OB Copy` (i.e. without the `ck shared` option). + +Exemple : +```4d +$toModify:=ds.Company.all().copy() //$toModify is alterable +``` + + +A new entity selection **inherits** from the original entity selection nature in the following cases: + +- the new entity selection results from one of the various ORDA class functions applied to an existing entity selection ([.query()](API/entitySelectionClass.md#query), [.slice()](API/entitySelectionClass.md#slice), etc.) . +- the new entity selection is based upon a relation: + - [entity.*attributeName*](API/entityClass.md#attributename) (e.g. "company.employees") when *attributeName* is a one-to-many related attribute and the entity belongs to an entity selection (same nature as [.getSelection()](API/entityClass.md#getselection) entity selection), + - [entitySelection.*attributeName*](API/entitySelectionClass.md#attributename) (e.g. "employees.employer") when *attributeName* is a related attribute (same nature as the entity selection), + - [.extract()](API/entitySelectionClass.md#extract) when the resulting collection contains entity selections (same nature as the entity selection). + +Voici quelques exemples : + +```4d +$highSal:=ds.Employee.query("salary >= :1"; 1000000) + //$highSal is shareable because of the query on dataClass +$comp:=$highSal.employer //$comp is shareable because $highSal is shareable + +$lowSal:=ds.Employee.query("salary <= :1"; 10000).copy() + //$lowSal is alterable because of the copy() +$comp2:=$lowSal.employer //$comp2 is alterable because $lowSal is alterable +``` + + +#### Sharing an entity selection between processes (example) You work with two entity selections that you want to pass to a worker process so that it can send mails to appropriate persons: ```4d - If(Storage.info=Null) - Use(Storage) - Storage.info:=New shared object() - End use - End if - Use(Storage.info) - //Put entity selections in a shared object - Storage.info.paid:=ds.Invoices.query("status=:1";"Paid") - Storage.info.unpaid:=ds.Invoices.query("status=:1";"Unpaid") - End use +var $paid; $unpaid : cs.InvoicesSelection +//We get entity selections for paid and unpaid invoices +$paid:=ds.Invoices.query("status=:1"; "Paid") +$unpaid:=ds.Invoices.query("status=:1"; "Unpaid") + +//We pass entity selection references as parameters to the worker +CALL WORKER("mailing"; "sendMails"; $paid; $unpaid) + +``` - CALL WORKER("mailing";"sendMails";Storage.info) -The sendMails method: +The `sendMails` method: - var $info: ;$1Object - var $paid;$unpaid : cs.InvoicesSelection +```4d + + #DECLARE ($paid : cs.InvoicesSelection; $unpaid : cs.InvoicesSelection) var $invoice : cs.InvoicesEntity - var $server;$transporter;$email;$status : Object + var $server; $transporter; $email; $status : Object //Prepare emails - $server:=New object + $server:=New object() $server.host:="exchange.company.com" $server.user:="myName@company.com" $server.password:="my!!password" $transporter:=SMTP New transporter($server) - $email:=New object + $email:=New object() $email.from:="myName@company.com" - //Get entity selections - $info:=$1 - $paid:=$info.paid - $unpaid:=$info.unpaid - //Loops on entity selections For each($invoice;$paid) $email.to:=$invoice.customer.address // email address of the customer @@ -384,6 +422,7 @@ Les méthodes suivantes associent automatiquement le contexte d'optimisation de * `entitySelection.drop()` + **Exemple** Considérons le code suivant : From 6e9ab0fcfee3685d01348692afa5e7b8deddc29e Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:16:52 +0100 Subject: [PATCH 265/311] New translations properties_Action.md (French) --- website/translated_docs/fr/FormObjects/properties_Action.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_Action.md b/website/translated_docs/fr/FormObjects/properties_Action.md index 91b3efe5bf48d0..d7ebc5c0888179 100644 --- a/website/translated_docs/fr/FormObjects/properties_Action.md +++ b/website/translated_docs/fr/FormObjects/properties_Action.md @@ -117,9 +117,9 @@ Plusieurs types de références de méthode sont pris en charge : - un nom de méthode projet : nom d'une méthode projet existante sans extension de fichier, c'est-à-dire : `maMéthode` Dans ce cas, 4D ne prend pas en charge automatiquement les opérations objet. -- un chemin d'accès du fichier de méthode personnalisé comprenant l'extension .4dm, par exemple : - `ObjectMethods/objectName.4dm` Vous pouvez également utiliser un filesystem : - `/RESOURCES/Buttons/bOK.4dm` Dans ce cas, 4D ne prend pas en charge automatiquement les opérations sur les objets. +- a custom method file path including the .4dm extension, e.g.: + `../../CustomMethods/myMethod.4dm` You can also use a filesystem: + `/RESOURCES/Buttons/bOK.4dm` In this case, 4D does not provide automatic support for object operations. From 70ea715141fbba66e18d0a1f5d9324365c33b9a1 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:17:34 +0100 Subject: [PATCH 266/311] New translations properties_Text.md (French) --- website/translated_docs/fr/FormObjects/properties_Text.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_Text.md b/website/translated_docs/fr/FormObjects/properties_Text.md index ff9adc94a51d8e..50664c6400a275 100644 --- a/website/translated_docs/fr/FormObjects/properties_Text.md +++ b/website/translated_docs/fr/FormObjects/properties_Text.md @@ -560,7 +560,7 @@ Cette propriété permet d'utiliser des styles spécifiques dans la zone sélect

    - Permet de définir une couleur de police personnalisée à chaque ligne de list box ou de chaque cellule de la colonne. + Permet de définir un style de police personnalisé à chaque ligne de list box ou de chaque cellule de la colonne.

    @@ -623,7 +623,7 @@ Cette propriété permet d'utiliser des styles spécifiques dans la zone sélect

    - Permet de définir un style de police personnalisé à chaque ligne de list box ou de chaque cellule de la colonne. + List Box - Colonne List Box

    From 4cc515016cbcf53473fdfe64719c4a1bca3dd41a Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:17:50 +0100 Subject: [PATCH 267/311] New translations onRowResize.md (German) --- website/translated_docs/de/Events/onRowResize.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/Events/onRowResize.md b/website/translated_docs/de/Events/onRowResize.md index e1736dbb61f2eb..c90beb5f85ecb9 100644 --- a/website/translated_docs/de/Events/onRowResize.md +++ b/website/translated_docs/de/Events/onRowResize.md @@ -19,7 +19,7 @@ This event is generated when the height of a row is modified by a user in a 4D V | objectName | Text | 4D View Pro area name | | sheetName | Text | Name of the sheet of the event | | range | object | Cell range of the rows whose heights have changed | -| header | boolean | True if the column header row (first row) is resized, else false | +| header | Boolean | True if the column header row (first row) is resized, else false | #### Beispiel From b51219cf272c15d7bded8728f33aaf34cf337987 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:18:21 +0100 Subject: [PATCH 268/311] New translations listbox_overview.md (German) --- website/translated_docs/de/FormObjects/listbox_overview.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/de/FormObjects/listbox_overview.md b/website/translated_docs/de/FormObjects/listbox_overview.md index 6b7f6e894787a3..c32d939eb7f9e8 100644 --- a/website/translated_docs/de/FormObjects/listbox_overview.md +++ b/website/translated_docs/de/FormObjects/listbox_overview.md @@ -251,7 +251,7 @@ Form events on list box or list box column objects may return the following addi | footerName | Text | Name of the footer | | headerName | Text | Name of the header | | horizontalScroll | Lange Ganzzahl | Positive if scroll is towards the right, negative if towards the left | -| isRowSelected | boolean | True if row is selected, else False | +| isRowSelected | Boolean | True if row is selected, else False | | newPosition | Lange Ganzzahl | New position of the column or row | | newSize | Lange Ganzzahl | New size (in pixels) of the column or row | | oldPosition | Lange Ganzzahl | Previous position of the column or row | @@ -868,7 +868,7 @@ When a list box column is associated with an object array, the way a cell is dis | Text | text input | drop-down menu (required list) or combo box (choice list) | | Zahl | controlled text input (numbers and separators) | drop-down menu (required list) or combo box (choice list) | | integer | controlled text input (numbers only) | drop-down menu (required list) or combo box (choice list) or three-states check box | -| boolean | check box | drop-down menu (required list) | +| Boolean | check box | drop-down menu (required list) | | color | background color | Text | | event | button with label | | | | | All widgets can have an additional unit toggle button or ellipsis button attached to the cell. | @@ -896,7 +896,7 @@ Each element of the object array is an object that can contain one or more attri The only mandatory attribute is "valueType" and its supported values are "text", "real", "integer", "boolean", "color", and "event". The following table lists all the attributes supported in list box object arrays, depending on the "valueType" value (any other attributes are ignored). Display formats are detailed and examples are provided below. -| | valueType | Text | Zahl | integer | boolean | color | event | +| | valueType | Text | Zahl | integer | Boolean | color | event | | --------------------- | --------------------------------------- | ---- | ---- | ------- | ------- | ----- | ----- | | *Attributes* | *Beschreibung* | | | | | | | | value | cell value (input or output) | x | x | x | | | | From 2a493e7b7f72afb6b68a6915be78a61e0dda8cdf Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:18:41 +0100 Subject: [PATCH 269/311] New translations properties_FormProperties.md (German) --- .../de/FormEditor/properties_FormProperties.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/de/FormEditor/properties_FormProperties.md b/website/translated_docs/de/FormEditor/properties_FormProperties.md index d45736c5d8449a..3fbf7d0f374c1b 100644 --- a/website/translated_docs/de/FormEditor/properties_FormProperties.md +++ b/website/translated_docs/de/FormEditor/properties_FormProperties.md @@ -112,7 +112,7 @@ Only project forms can be specified as published subforms. | Name | Datentyp | Possible Values | | ------ | -------- | --------------- | -| shared | boolean | true, false | +| shared | Boolean | true, false | --- @@ -131,7 +131,7 @@ When this option is selected, the [Save Value](FormObjects/properties_Object.md# | Name | Datentyp | Possible Values | | ---------------- | -------- | --------------- | -| memorizeGeometry | boolean | true, false | +| memorizeGeometry | Boolean | true, false | #### See also [**Save Value**](FormObjects/properties_Object.md#save-value) From ffc994aeb14a03c377401a8041a4490186a6b77e Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:19:04 +0100 Subject: [PATCH 270/311] New translations dt_variant.md (German) --- website/translated_docs/de/Concepts/dt_variant.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/de/Concepts/dt_variant.md b/website/translated_docs/de/Concepts/dt_variant.md index 8208d7ba14d523..bf49f63c4ac3df 100644 --- a/website/translated_docs/de/Concepts/dt_variant.md +++ b/website/translated_docs/de/Concepts/dt_variant.md @@ -8,7 +8,7 @@ Variant ist ein Variablentyp, um Daten von beliebigem regulären Typ in eine Var Eine Variable vom Typ Variant kann einen Wert in folgenden Datentypen enthalten: - BLOB -- boolean +- Boolean - collection - date - Lange Ganzzahl @@ -23,7 +23,7 @@ Eine Variable vom Typ Variant kann einen Wert in folgenden Datentypen enthalten: > Arrays lassen sich nicht in Variablen vom Typ Variant speichern. -Im interpretierten und im kompilierten Modus kann derselben Variablen vom Typ Variant Inhalt mit unterschiedlichen Typen zugewiesen werden. Im Gegensatz zu festen Variablentypen ist der Inhaltstyp von Variant unterschiedlich von der Variable selbst. Beispiel: +Sowohl im interpretierten als auch im kompilierten Modus kann derselben Variablen vom Typ Variant Inhalt mit unterschiedlichen Typen zugewiesen werden. Im Gegensatz zu festen Variablentypen ist der Inhaltstyp von Variant unterschiedlich von der Variable selbst. Beispiel: ```4d C_VARIANT($variant) From c614e56642de7d803b6dd1699fa94225e67f5f06 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:19:18 +0100 Subject: [PATCH 271/311] New translations dt_boolean.md (German) --- website/translated_docs/de/Concepts/dt_boolean.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/Concepts/dt_boolean.md b/website/translated_docs/de/Concepts/dt_boolean.md index 1fc3baf05d1289..1230a8e151aaaa 100644 --- a/website/translated_docs/de/Concepts/dt_boolean.md +++ b/website/translated_docs/de/Concepts/dt_boolean.md @@ -1,5 +1,5 @@ --- -id: boolean +id: Boolean title: Boolean --- From dc8c8549143194ed529a202df13c9dcc8a015008 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:19:51 +0100 Subject: [PATCH 272/311] New translations onColumnResize.md (German) --- website/translated_docs/de/Events/onColumnResize.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/Events/onColumnResize.md b/website/translated_docs/de/Events/onColumnResize.md index 3bef6134bd5eb2..33b5e1092406b9 100644 --- a/website/translated_docs/de/Events/onColumnResize.md +++ b/website/translated_docs/de/Events/onColumnResize.md @@ -27,7 +27,7 @@ This event is generated when the width of a column is modified by a user. On thi | objectName | Text | 4D View Pro area name | | sheetName | Text | Name of the sheet of the event | | range | object | Cell range of the columns whose widths have changed | -| header | boolean | True if the row header column (first column) is resized, else false | +| header | Boolean | True if the row header column (first column) is resized, else false | #### Beispiel From 12dc5b481843e8f8183e4b4736d5812c023086b1 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:20:10 +0100 Subject: [PATCH 273/311] New translations onAfterEdit.md (German) --- website/translated_docs/de/Events/onAfterEdit.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/de/Events/onAfterEdit.md b/website/translated_docs/de/Events/onAfterEdit.md index 3cb655b025174d..1dc38d396cf1a0 100644 --- a/website/translated_docs/de/Events/onAfterEdit.md +++ b/website/translated_docs/de/Events/onAfterEdit.md @@ -57,8 +57,8 @@ Depending on the `action` property value, the [event object](overview.md#event-o | --------- | ------- | --------------------------------------------------- | | fromRange | object | Range of source cell range (being dragged) | | toRange | object | Range of the destination cell range (drop location) | -| copy | boolean | Specifies if the source range is copied or not | -| insert | boolean | Specifies if the source range is inserted or not | +| copy | Boolean | Specifies if the source range is copied or not | +| insert | Boolean | Specifies if the source range is inserted or not | #### action = DragFillBlock From 69873afc07650f080f93c24b178369585408417d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:21:20 +0100 Subject: [PATCH 274/311] New translations properties_Action.md (German) --- .../translated_docs/de/FormObjects/properties_Action.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/website/translated_docs/de/FormObjects/properties_Action.md b/website/translated_docs/de/FormObjects/properties_Action.md index 8a5e520a5a29c4..8bd91479357631 100644 --- a/website/translated_docs/de/FormObjects/properties_Action.md +++ b/website/translated_docs/de/FormObjects/properties_Action.md @@ -74,7 +74,7 @@ When this option is enabled, the object method is executed with the `On Data Cha | Name | Datentyp | Possible Values | | ------------------- | -------- | --------------- | -| continuousExecution | boolean | true, false | +| continuousExecution | Boolean | true, false | #### Objects Supported @@ -99,7 +99,7 @@ Several types of method references are supported: - a project method name: name of an existing project method without file extension, i.e.: `myMethod` In this case, 4D does not provide automatic support for object operations. - a custom method file path including the .4dm extension, e.g.: - `ObjectMethods/objectName.4dm` You can also use a filesystem: + `../../CustomMethods/myMethod.4dm` You can also use a filesystem: `/RESOURCES/Buttons/bOK.4dm` In this case, 4D does not provide automatic support for object operations. @@ -127,7 +127,7 @@ Authorizes the movement of rows during execution. This option is selected by def | Name | Datentyp | Possible Values | | ----------- | -------- | --------------- | -| movableRows | boolean | true, false | +| movableRows | Boolean | true, false | #### Objects Supported @@ -170,7 +170,7 @@ In other cases (list boxes based on named selections, columns associated with ex | Name | Datentyp | Possible Values | | -------- | -------- | --------------- | -| sortable | boolean | true, false | +| sortable | Boolean | true, false | #### Objects Supported [List Box](listbox_overview.md) From fee84d94b4e2fd64ed5f09d6f07af3b470fbb2a3 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:21:22 +0100 Subject: [PATCH 275/311] New translations properties_Object.md (German) --- website/translated_docs/de/FormObjects/properties_Object.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/FormObjects/properties_Object.md b/website/translated_docs/de/FormObjects/properties_Object.md index 274104dadc26e0..0d0f44e948ac6f 100644 --- a/website/translated_docs/de/FormObjects/properties_Object.md +++ b/website/translated_docs/de/FormObjects/properties_Object.md @@ -67,7 +67,7 @@ Here is the list of objects whose value can be saved: | Name | Datentyp | Possible Values | | ------------- | -------- | --------------- | -| memorizeValue | boolean | true, false | +| memorizeValue | Boolean | true, false | #### Objects Supported From 94a54e306ed706639496ce026b79b40c6f749398 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:21:28 +0100 Subject: [PATCH 276/311] New translations properties_Text.md (German) --- .../translated_docs/de/FormObjects/properties_Text.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/website/translated_docs/de/FormObjects/properties_Text.md b/website/translated_docs/de/FormObjects/properties_Text.md index 3809ab5a03cdc3..1bb658192044f6 100644 --- a/website/translated_docs/de/FormObjects/properties_Text.md +++ b/website/translated_docs/de/FormObjects/properties_Text.md @@ -13,7 +13,7 @@ When this property is enabled, the [OPEN FONT PICKER](https://doc.4d.com/4Dv18/4 | Property | Datentyp | Possible Values | | -------------------- | -------- | --------------------- | -| allowFontColorPicker | boolean | false (default), true | +| allowFontColorPicker | Boolean | false (default), true | #### Objects Supported @@ -310,8 +310,8 @@ Specifies an expression or a variable which will be evaluated for each row displ | fontStyle | string | "normal","italic" | | fontWeight | string | "normal","bold" | | textDecoration | string | "normal","underline" | -| unselectable | boolean | Designates the corresponding row as not being selectable (*i.e.*, highlighting is not possible). Enterable areas are no longer enterable if this option is enabled unless the "Single-Click Edit" option is also enabled. Controls such as checkboxes and lists remain functional. This setting is ignored if the list box selection mode is "None". Default value: False. | -| disabled | boolean | Disables the corresponding row. Enterable areas are no longer enterable if this option is enabled. Text and controls (checkboxes, lists, etc.) appear dimmed or grayed out. Default value: False. | +| unselectable | Boolean | Designates the corresponding row as not being selectable (*i.e.*, highlighting is not possible). Enterable areas are no longer enterable if this option is enabled unless the "Single-Click Edit" option is also enabled. Controls such as checkboxes and lists remain functional. This setting is ignored if the list box selection mode is "None". Default value: False. | +| disabled | Boolean | Disables the corresponding row. Enterable areas are no longer enterable if this option is enabled. Text and controls (checkboxes, lists, etc.) appear dimmed or grayed out. Default value: False. | | cell.\ | object | Allows applying the property to a single column. Pass in \ the object name of the list box column. **Note**: "unselectable" and "disabled" properties can only be defined at row level. They are ignored if passed in the "cell" object | > Style settings made with this property are ignored if other style settings are already defined through expressions (*i.e.*, [Style Expression](#style-expression), [Font Color Expression](#font-color-expression), [Background Color Expression](#background-color-expression)). @@ -412,7 +412,7 @@ This property enables the possibility of using specific styles in the selected a - boolean + Boolean @@ -731,7 +731,7 @@ This property enables the possibility of using specific styles in the selected a - boolean + Boolean From 512adc4669ddc600921edab506d55f2762e27b5c Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:21:31 +0100 Subject: [PATCH 277/311] New translations properties_Subform.md (German) --- website/translated_docs/de/FormObjects/properties_Subform.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/de/FormObjects/properties_Subform.md b/website/translated_docs/de/FormObjects/properties_Subform.md index 1124af19db9163..da8bf8fa5963a2 100644 --- a/website/translated_docs/de/FormObjects/properties_Subform.md +++ b/website/translated_docs/de/FormObjects/properties_Subform.md @@ -12,7 +12,7 @@ Specifies if the user can delete subrecords in a list subform. | Name | Datentyp | Possible Values | | --------------- | -------- | --------------------------- | -| deletableInList | boolean | true, false (default: true) | +| deletableInList | Boolean | true, false (default: true) | #### Objects Supported @@ -103,7 +103,7 @@ When a list subform has this property enabled, the user can modify record data d | Name | Datentyp | Possible Values | | --------------- | -------- | --------------- | -| enterableInList | boolean | true, false | +| enterableInList | Boolean | true, false | #### Objects Supported From 56a3ddf8d57ec264562b5abd63f66df95bed8757 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:21:33 +0100 Subject: [PATCH 278/311] New translations properties_Scale.md (German) --- website/translated_docs/de/FormObjects/properties_Scale.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/FormObjects/properties_Scale.md b/website/translated_docs/de/FormObjects/properties_Scale.md index 16e4cb04cc409d..6eaa16d7f59ebe 100644 --- a/website/translated_docs/de/FormObjects/properties_Scale.md +++ b/website/translated_docs/de/FormObjects/properties_Scale.md @@ -29,7 +29,7 @@ Displays/Hides the graduations next to the labels. | Name | Datentyp | Possible Values | |:---------------:|:--------:| --------------- | -| showGraduations | boolean | "true", "false" | +| showGraduations | Boolean | "true", "false" | #### Objects Supported From 3731000587fb665e62bd3c1c99165482a5e6eb1e Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:21:34 +0100 Subject: [PATCH 279/311] New translations properties_ResizingOptions.md (German) --- .../de/FormObjects/properties_ResizingOptions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/FormObjects/properties_ResizingOptions.md b/website/translated_docs/de/FormObjects/properties_ResizingOptions.md index fef720021f3d61..8fcc6c74ab4ce7 100644 --- a/website/translated_docs/de/FormObjects/properties_ResizingOptions.md +++ b/website/translated_docs/de/FormObjects/properties_ResizingOptions.md @@ -131,7 +131,7 @@ Designates if the size of the column can be modified by the user. | Name | Datentyp | Possible Values | |:--------- |:--------:|:---------------:| -| resizable | boolean | "true", "false" | +| resizable | Boolean | "true", "false" | #### Objects Supported From d10cc14f48760f0bd419cfb50d992629ed151e2d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:21:38 +0100 Subject: [PATCH 280/311] New translations properties_Reference.md (German) --- website/translated_docs/de/FormObjects/properties_Reference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/FormObjects/properties_Reference.md b/website/translated_docs/de/FormObjects/properties_Reference.md index 3ba48fc0e83ffe..877b6bd4f289f3 100644 --- a/website/translated_docs/de/FormObjects/properties_Reference.md +++ b/website/translated_docs/de/FormObjects/properties_Reference.md @@ -125,7 +125,7 @@ You will find in this page a comprehensive list of all object properties sorted | [rowCount](properties_Crop.md#rows) | Sets the number of rows. | minimum: 1 | | [rowFillSource](properties_BackgroundAndBorder.md#row-background-color-array) (array list box)
    [rowFillSource](properties_BackgroundAndBorder.md#background-color-expression) (selection or collection list box) | The name of an array or expression to apply a custom background color to each row of a list box. | The name of an array or expression. | | [rowHeight](properties_CoordinatesAndSizing.md#row-height) | Sets the height of list box rows. | CSS value unit "em" or "px" (default) | -| [rowHeightAuto](properties_CoordinatesAndSizing.md#automatic-row-height) | boolean | "true", "false" | +| [rowHeightAuto](properties_CoordinatesAndSizing.md#automatic-row-height) | Boolean | "true", "false" | | [rowHeightAutoMax](properties_CoordinatesAndSizing.md#maximum-width) | Designates the largest height allowed for list box rows. | CSS value unit "em" or "px" (default). minimum: 0 | | [rowHeightAutoMin](properties_CoordinatesAndSizing.md#minimum-width) | Designates the smallest height allowed for list box rows. | CSS value unit "em" or "px" (default). minimum: 0 | | [rowHeightSource](properties_CoordinatesAndSizing.md#row-height-array) | An array defining different heights for the rows in a list box. | Name of a 4D array variable. | From 0689189c932b9c929101c8ee036a52286f9ad937 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:21:40 +0100 Subject: [PATCH 281/311] New translations properties_RangeOfValues.md (German) --- .../translated_docs/de/FormObjects/properties_RangeOfValues.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/FormObjects/properties_RangeOfValues.md b/website/translated_docs/de/FormObjects/properties_RangeOfValues.md index 36a2a8b768c5bf..adbe4162823dca 100644 --- a/website/translated_docs/de/FormObjects/properties_RangeOfValues.md +++ b/website/translated_docs/de/FormObjects/properties_RangeOfValues.md @@ -13,7 +13,7 @@ The default value can only be used if the [data source type](properties_Object.m - number/integer - date - time -- boolean +- Boolean 4D provides stamps for generating default values for the date, time, and sequence number. The date and time are taken from the system date and time. 4D automatically generates any sequence numbers needed. The table below shows the stamp to use to generate default values automatically: From 0d6e4181e89daae0065f6d062e81a1c4c76a111d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:21:51 +0100 Subject: [PATCH 282/311] New translations properties_Headers.md (German) --- website/translated_docs/de/FormObjects/properties_Headers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/FormObjects/properties_Headers.md b/website/translated_docs/de/FormObjects/properties_Headers.md index 2249b48ef5777c..67cf374a0a12ac 100644 --- a/website/translated_docs/de/FormObjects/properties_Headers.md +++ b/website/translated_docs/de/FormObjects/properties_Headers.md @@ -12,7 +12,7 @@ This property is used to display or hide [list box column headers](listbox_overv | Name | Datentyp | Possible Values | | ----------- | -------- | --------------- | -| showHeaders | boolean | true, false | +| showHeaders | Boolean | true, false | #### Objects Supported From 5c4078b99d3342b5375ceeedbe549f6ea4ee82b9 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:21:54 +0100 Subject: [PATCH 283/311] New translations properties_Footers.md (German) --- website/translated_docs/de/FormObjects/properties_Footers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/FormObjects/properties_Footers.md b/website/translated_docs/de/FormObjects/properties_Footers.md index e7a92b80d44073..1ccf29434e163b 100644 --- a/website/translated_docs/de/FormObjects/properties_Footers.md +++ b/website/translated_docs/de/FormObjects/properties_Footers.md @@ -12,7 +12,7 @@ This property is used to display or hide [list box column footers](listbox_overv | Name | Datentyp | Possible Values | | ----------- | -------- | --------------- | -| showFooters | boolean | true, false | +| showFooters | Boolean | true, false | #### Objects Supported From 82a3d81550299953de82e6113e377e4f0eeab498 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:21:57 +0100 Subject: [PATCH 284/311] New translations properties_Entry.md (German) --- .../de/FormObjects/properties_Entry.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/website/translated_docs/de/FormObjects/properties_Entry.md b/website/translated_docs/de/FormObjects/properties_Entry.md index 5d0308e35336cb..06dcd401370410 100644 --- a/website/translated_docs/de/FormObjects/properties_Entry.md +++ b/website/translated_docs/de/FormObjects/properties_Entry.md @@ -15,7 +15,7 @@ The Auto Spellcheck property activates the spell-check for each object. When use | Name | Datentyp | Possible Values | | ---------- | -------- | --------------- | -| spellcheck | boolean | true, false | +| spellcheck | Boolean | true, false | #### Objects Supported @@ -67,7 +67,7 @@ When this property is disabled, any pop-up menus associated with a list box colu | Name | Datentyp | Possible Values | | --------- | -------- | --------------- | -| enterable | boolean | true, false | +| enterable | Boolean | true, false | #### Objects Supported @@ -157,7 +157,7 @@ When the **Focusable** property is selected for a non-enterable object, the user | Name | Datentyp | Possible Values | | --------- | -------- | --------------- | -| focusable | boolean | true, false | +| focusable | Boolean | true, false | #### Objects Supported @@ -271,7 +271,7 @@ This property keeps the selection visible within the object after it has lost th | Name | Datentyp | Possible Values | | ------------- | -------- | --------------- | -| showSelection | boolean | true, false | +| showSelection | Boolean | true, false | #### Objects Supported @@ -297,11 +297,11 @@ To view a list of all the shortcuts used in the 4D Design environment, see the [ | Name | Datentyp | Possible Values | | --------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| shortcutAccel | boolean | true, false (Ctrl Windows/Command macOS) | -| shortcutAlt | boolean | true, false | -| shortcutCommand | boolean | true, false | -| shortcutControl | boolean | true, false (macOS Control) | -| shortcutShift | boolean | true, false | +| shortcutAccel | Boolean | true, false (Ctrl Windows/Command macOS) | +| shortcutAlt | Boolean | true, false | +| shortcutCommand | Boolean | true, false | +| shortcutControl | Boolean | true, false (macOS Control) | +| shortcutShift | Boolean | true, false | | | | | | shortcutKey | string |

  • any character key: "a", "b"...
  • [F1]" -> "[F15]", "[Return]", "[Enter]", "[Backspace]", "[Tab]", "[Esc]", "[Del]", "[Home]", "[End]", "[Help]", "[Page up]", "[Page down]", "[left arrow]", "[right arrow]", "[up arrow]", "[down arrow]" | @@ -327,7 +327,7 @@ When this option is not enabled, users must first select the cell row and then c | Name | Datentyp | Possible Values | | --------------- | -------- | --------------- | -| singleClickEdit | boolean | true, false | +| singleClickEdit | Boolean | true, false | #### Objects Supported From 534174abc388cf9826315ef510379f50e00b8d99 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:22:00 +0100 Subject: [PATCH 285/311] New translations properties_Display.md (German) --- website/translated_docs/de/FormObjects/properties_Display.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/de/FormObjects/properties_Display.md b/website/translated_docs/de/FormObjects/properties_Display.md index 3650204ac3ebe7..cfa9faa33b4beb 100644 --- a/website/translated_docs/de/FormObjects/properties_Display.md +++ b/website/translated_docs/de/FormObjects/properties_Display.md @@ -418,7 +418,7 @@ In particular, this property allows implementing "invisible" buttons. Non-rende | Name | Datentyp | Possible Values | | ------- | -------- | --------------- | -| display | boolean | true, false | +| display | Boolean | true, false | #### Objects Supported @@ -455,7 +455,7 @@ In this case as well, the [Title](#title) property is also available so that the | Name | Datentyp | Possible Values | | ---------- | -------- | --------------- | -| threeState | boolean | true, false | +| threeState | Boolean | true, false | #### Objects Supported From 7b99de97500a40dcfbc8524b62926a708ec2a0cd Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:22:03 +0100 Subject: [PATCH 286/311] New translations properties_DataSource.md (German) --- website/translated_docs/de/FormObjects/properties_DataSource.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/FormObjects/properties_DataSource.md b/website/translated_docs/de/FormObjects/properties_DataSource.md index 07f5237424cb6d..d1edc72fae1728 100644 --- a/website/translated_docs/de/FormObjects/properties_DataSource.md +++ b/website/translated_docs/de/FormObjects/properties_DataSource.md @@ -24,7 +24,7 @@ When the **automatic insertion** option is not selected (default), the value ent | Name | Datentyp | Possible Values | | ------------------ | -------- | --------------- | -| automaticInsertion | boolean | true, false | +| automaticInsertion | Boolean | true, false | #### Objects Supported From 28a83c5e28f2b20caa778b4ae5d6f2745b3e733c Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:22:05 +0100 Subject: [PATCH 287/311] New translations properties_CoordinatesAndSizing.md (German) --- .../de/FormObjects/properties_CoordinatesAndSizing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/FormObjects/properties_CoordinatesAndSizing.md b/website/translated_docs/de/FormObjects/properties_CoordinatesAndSizing.md index 67ea05707ff9e7..31f97d72514dfa 100644 --- a/website/translated_docs/de/FormObjects/properties_CoordinatesAndSizing.md +++ b/website/translated_docs/de/FormObjects/properties_CoordinatesAndSizing.md @@ -31,7 +31,7 @@ When this property is enabled, the height of every row is automatically calculat | Name | Datentyp | Possible Values | | ------------- | -------- | --------------- | -| rowHeightAuto | boolean | true, false | +| rowHeightAuto | Boolean | true, false | #### Objects Supported From 615737abbbb4e22ea06df78640d1922ecf288840 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:22:07 +0100 Subject: [PATCH 288/311] New translations properties_BackgroundAndBorder.md (German) --- .../de/FormObjects/properties_BackgroundAndBorder.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/FormObjects/properties_BackgroundAndBorder.md b/website/translated_docs/de/FormObjects/properties_BackgroundAndBorder.md index 188882b254edf0..24c3eba3f0c71c 100644 --- a/website/translated_docs/de/FormObjects/properties_BackgroundAndBorder.md +++ b/website/translated_docs/de/FormObjects/properties_BackgroundAndBorder.md @@ -115,7 +115,7 @@ You can remove these empty rows by selecting this option. The bottom of the list | Name | Datentyp | Possible Values | | ------------------ | -------- | --------------- | -| hideExtraBlankRows | boolean | true, false | +| hideExtraBlankRows | Boolean | true, false | #### Objects Supported From bf6832e7875578ba3072ddd4ac4f6ee020089f9d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:22:10 +0100 Subject: [PATCH 289/311] New translations properties_Appearance.md (German) --- .../translated_docs/de/FormObjects/properties_Appearance.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/de/FormObjects/properties_Appearance.md b/website/translated_docs/de/FormObjects/properties_Appearance.md index d88f70c4bff28d..b7b6d168fa9cf6 100644 --- a/website/translated_docs/de/FormObjects/properties_Appearance.md +++ b/website/translated_docs/de/FormObjects/properties_Appearance.md @@ -44,7 +44,7 @@ During execution, a field or any enterable area is outlined by a selection recta | Name | Datentyp | Possible Values | | ------------- | -------- | --------------- | -| hideFocusRing | boolean | true, false | +| hideFocusRing | Boolean | true, false | #### Objects Supported @@ -67,7 +67,7 @@ By default, this option is not enabled. | Name | Datentyp | Possible Values | | ------------------- | -------- | --------------- | -| hideSystemHighlight | boolean | true, false | +| hideSystemHighlight | Boolean | true, false | #### Objects Supported From 2ed55524e835f1bd2e261f0266df0b0577daa869 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:22:12 +0100 Subject: [PATCH 290/311] New translations properties_Animation.md (German) --- .../de/FormObjects/properties_Animation.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/website/translated_docs/de/FormObjects/properties_Animation.md b/website/translated_docs/de/FormObjects/properties_Animation.md index a33e2c846cf2b8..4b910a9231dfc7 100644 --- a/website/translated_docs/de/FormObjects/properties_Animation.md +++ b/website/translated_docs/de/FormObjects/properties_Animation.md @@ -13,7 +13,7 @@ Pictures are displayed in a continuous loop. When the user reaches the last pict | Name | Datentyp | Possible Values | | -------------------- | -------- | --------------- | -| loopBackToFirstFrame | boolean | true, false | +| loopBackToFirstFrame | Boolean | true, false | #### Objects Supported @@ -31,7 +31,7 @@ Displays the first picture all the time except when the user clicks the button. | Name | Datentyp | Possible Values | | ---------------------- | -------- | --------------- | -| switchBackWhenReleased | boolean | true, false | +| switchBackWhenReleased | Boolean | true, false | #### Objects Supported @@ -50,7 +50,7 @@ Allows the user to hold down the mouse button to display the pictures continuous | Name | Datentyp | Possible Values | | ------------------ | -------- | --------------- | -| switchContinuously | boolean | true, false | +| switchContinuously | Boolean | true, false | #### Objects Supported @@ -87,7 +87,7 @@ Modifies the contents of the picture button when the mouse cursor passes over it | Name | Datentyp | Possible Values | | ------------------ | -------- | --------------- | -| switchWhenRollover | boolean | true, false | +| switchWhenRollover | Boolean | true, false | #### Objects Supported @@ -108,7 +108,7 @@ Enables setting the last thumbnail as the one to display when the button is disa | Name | Datentyp | Possible Values | |:---------------------- | -------- | --------------- | -| useLastFrameAsDisabled | boolean | true, false | +| useLastFrameAsDisabled | Boolean | true, false | #### Objects Supported From ab5f57612a93da11756d15d4e9b5becf71818bf6 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:22:55 +0100 Subject: [PATCH 291/311] New translations zipArchiveClass.md (Spanish) --- website/translated_docs/es/API/zipArchiveClass.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/es/API/zipArchiveClass.md b/website/translated_docs/es/API/zipArchiveClass.md index d31e4972f79caf..cccf42b7959584 100644 --- a/website/translated_docs/es/API/zipArchiveClass.md +++ b/website/translated_docs/es/API/zipArchiveClass.md @@ -63,7 +63,7 @@ End if #### Description -The `ZIP Create archive` command creates a compressed ZIP archive object and returns the status of the operation. +The `ZIP Create archive` commandcreates a compressed ZIP archive object and returns the status of the operation. You can pass a 4D.File, a 4D.Folder, or a zip structure object as first parameter: @@ -285,7 +285,7 @@ You want to pass a collection of folders and files to compress to the *zipStruct #### Description -The `ZIP Read archive` command retrieves the contents of *zipFile* and returns it as a `4D.ZipArchive` object. +The `ZIP Read archive` commandretrieves the contents of *zipFile* and returns it as a `4D.ZipArchive` object. From fc8441183056ce108488b17072a35e293f63bbd4 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:22:58 +0100 Subject: [PATCH 292/311] New translations webServerClass.md (Spanish) --- website/translated_docs/es/API/webServerClass.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/es/API/webServerClass.md b/website/translated_docs/es/API/webServerClass.md index b86aa4a1d4776e..f3c251474b9fb5 100644 --- a/website/translated_docs/es/API/webServerClass.md +++ b/website/translated_docs/es/API/webServerClass.md @@ -77,7 +77,7 @@ They provide the following properties and functions: -The `WEB Server` command returns the default Web server object, or the Web server object defined through the option parameter. +The `WEB Server` commandreturns the default Web server object, or the Web server object defined through the option parameter. By default, if the *option* parameter is omitted, the command returns a reference to the Web server of the database, i.e. the default Web server. To designate the Web server to return, you can pass one of the following constants in the *option* parameter: @@ -122,7 +122,7 @@ From your component, you want to know if the Web server of the host database is -The `WEB Server list` command returns a collection of all Web server objects available in the 4D application. +The `WEB Server list` commandreturns a collection of all Web server objects available in the 4D application. A 4D application can contain anywhere from one to several Web servers: @@ -561,7 +561,7 @@ Possible values: 500000 - 2147483648 **.maxSessions** : Number -The maximum number of simultaneous sessions. When you reach the limit, the oldest session is closed (and `On Web Close Process` database method is called) if the web server needs to create a new one. The number of simultaneous sessions cannot exceed the total number of web processes (maxConcurrentProcesses property, 100 by default) +The maximum number of simultaneous sessions. When you reach the limit, the oldest session is closed (and `On Web Close Process` database method is called) if the web server needs to create a new one. When you reach the limit, the oldest session is closed (and `On Web Close Process` database method is called) if the web server needs to create a new one. From 45323e2c2437aca814f9dfafc18a8acdbabc18e6 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:23:12 +0100 Subject: [PATCH 293/311] New translations manData.md (Spanish) --- website/translated_docs/es/REST/manData.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/es/REST/manData.md b/website/translated_docs/es/REST/manData.md index 6aa983fc269635..175b3de414697e 100644 --- a/website/translated_docs/es/REST/manData.md +++ b/website/translated_docs/es/REST/manData.md @@ -18,7 +18,7 @@ To query data directly, you can do so using the [`$filter`]($filter.md) function With the REST API, you can perform all the manipulations to data as you can in 4D. -To add and modify entities, you can call [`$method=update`]($method.md#methodupdate). Before saving data, you can also validate it beforehand by calling [`$method=validate`]($method.md#methodvalidate). If you want to delete one or more entities, you can use [`$method=delete`]($method.md#methoddelete). +To add and modify entities, you can call [`$method=update`]($method.md#methodupdate). If you want to delete one or more entities, you can use [`$method=delete`]($method.md#methoddelete). Besides retrieving a single entity in a dataclass using [{dataClass}({key})](%7BdataClass%7D_%7Bkey%7D.html), you can also write a [class function](classFunctions.md#function-calls) that returns an entity selection (or a collection). From ac0f4a3930c3287aa6aa034d943c649e5dd20e0d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:24:34 +0100 Subject: [PATCH 294/311] New translations parameters.md (Spanish) --- website/translated_docs/es/Concepts/parameters.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/website/translated_docs/es/Concepts/parameters.md b/website/translated_docs/es/Concepts/parameters.md index c85bf2f4891c87..529341f7ae0e66 100644 --- a/website/translated_docs/es/Concepts/parameters.md +++ b/website/translated_docs/es/Concepts/parameters.md @@ -53,9 +53,10 @@ Input and output values are [evaluated](#values-or-references) at the moment of > Both [named](#named-parameters) and [sequential](#sequential-parameters) variables syntaxes can be mixed with no restriction to declare parameters. For example: > > ```4d -Function add($x : Integer) - var $0;$2 : Integer - $0:=$x+$2 +```4d + Function add($x : Integer) + var $0;$2 : Integer + $0:=$x+$2 ``` @@ -63,7 +64,7 @@ Function add($x : Integer) ## Named parameters -Inside called methods or class functions, parameter values are assigned to local variables. You can declare parameters using a **parameter name** along with a **parameter type**, separated by colon. +Input and output values are [evaluated](#values-or-references) at the moment of the call and copied into local variables within the called class function or method. Two syntaxes are proposed to declare variable parameters in the called code: - For class functions, parameters are declared along with the `Function` keyword. - 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. @@ -465,7 +466,7 @@ APPEND TEXT(vtSomeText;"";$wpArea) //Displays text message and writes it to $wpA ## Values or references -When you pass a parameter, 4D always evaluates the parameter expression in the context of the calling method and sets the **resulting value** to the local variables in the class function or subroutine. The local variables/parameters are not the actual fields, variables, or expressions passed by the calling method; they only contain the values that have been passed. Since its scope is local, if the value of a parameter is modified in the class function/subroutine, it does not change the value in the calling method. For example: +When you pass a parameter, 4D always evaluates the parameter expression in the context of the calling method and sets the **resulting value** to the local variables in the class function or subroutine. The local variables/parameters are not the actual fields, variables, or expressions passed by the calling method; they only contain the values that have been passed. The local variables/parameters are not the actual fields, variables, or expressions passed by the calling method; they only contain the values that have been passed. For example: ```4d //Here is some code from the method MY_METHOD From 3db8f405976477fdfcc2fe66db87a0d7b4ace2ba Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:25:35 +0100 Subject: [PATCH 295/311] New translations entityClass.md (German) --- website/translated_docs/de/API/entityClass.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/website/translated_docs/de/API/entityClass.md b/website/translated_docs/de/API/entityClass.md index f8bd7692a2e65f..d10079d0f7377e 100644 --- a/website/translated_docs/de/API/entityClass.md +++ b/website/translated_docs/de/API/entityClass.md @@ -363,7 +363,7 @@ The object returned by `.drop( )` contains the following properties: | Property | | Typ | Beschreibung | | ------------- | ------------------- | --------------------- | --------------------------------------------------------------------------------------------------------------------- | -| success | | boolean | true if the drop action is successful, false otherwise. | +| success | | Boolean | true if the drop action is successful, false otherwise. | | | | | ***Available only in case of error:*** | | status(*) | | number | Error code, see below | | statusText(*) | | Text | Description of the error, see below | @@ -920,9 +920,9 @@ The object returned by `.lock( )` contains the following properties: | Property | | Typ | Beschreibung | | ---------------- | ------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------- | -| success | | boolean | true if the lock action is successful (or if the entity is already locked in the current process), false otherwise. | +| success | | Boolean | true if the lock action is successful (or if the entity is already locked in the current process), false otherwise. | | | | | ***Available only if `dk reload if stamp changed` option is used:*** | -| **wasReloaded** | | boolean | true if the entity was reloaded with success, false otherwise. | +| **wasReloaded** | | Boolean | true if the entity was reloaded with success, false otherwise. | | | | | ***Available only in case of error:*** | | status(\*) | | number | Error code, see below | | statusText(\*) | | Text | Description of the error, see below | @@ -1105,7 +1105,7 @@ The object returned by `.reload( )` contains the following properties: | Property | Typ | Beschreibung | | ---------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | -| success | boolean | True if the reload action is successful, False otherwise.

    ***Available only in case of error***: | +| success | Boolean | True if the reload action is successful, False otherwise.

    ***Available only in case of error***: | | status(\*) | number | Error code, see below | | statusText(\*) | Text | Description of the error, see below | @@ -1178,9 +1178,9 @@ The object returned by `.save()` contains the following properties: | Property | | Typ | Beschreibung | | ---------------- | | ------- | ------------------------------------------------------- | -| success | | boolean | True if the save action is successful, False otherwise. | +| success | | Boolean | True if the save action is successful, False otherwise. | | | | | ***Available only if `dk auto merge` option is used***: | -| autoMerged | | boolean | True if an auto merge was done, False otherwise. | +| autoMerged | | Boolean | True if an auto merge was done, False otherwise. | | | | | ***Available only in case of error***: | | status(\*) | | number | Error code, see below | | statusText(\*) | | Text | Description of the error, see below | From 4e3bf41d9d9a49514c1d0776899bf72fbcb301c6 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:25:40 +0100 Subject: [PATCH 296/311] New translations transporter.md (German) --- website/translated_docs/de/API/transporter.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/API/transporter.md b/website/translated_docs/de/API/transporter.md index c924d0bb425ca2..bb9311b791177e 100644 --- a/website/translated_docs/de/API/transporter.md +++ b/website/translated_docs/de/API/transporter.md @@ -318,7 +318,7 @@ The function sends a request to the mail server and returns an object describing | Property | | Typ | Beschreibung | | ---------- | ------------------------ | ---------- | ------------------------------------------------------------------------------------------------------------ | -| success | | boolean | True if the check is successful, False otherwise | +| success | | Boolean | True if the check is successful, False otherwise | | status | | number | (SMTP only) Status code returned by the mail server (0 in case of an issue unrelated to the mail processing) | | statusText | | Text | Status message returned by the mail server, or last error returned in the 4D error stack | | errors | | collection | 4D error stack (not returned if a mail server response is received) | From c060ac3310764e001e357e6acba2c120c7a271cd Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:25:50 +0100 Subject: [PATCH 297/311] New translations imapTransporterClass.md (German) --- website/translated_docs/de/API/imapTransporterClass.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/website/translated_docs/de/API/imapTransporterClass.md b/website/translated_docs/de/API/imapTransporterClass.md index fb989abadd41f1..3196d18ea2b2ea 100644 --- a/website/translated_docs/de/API/imapTransporterClass.md +++ b/website/translated_docs/de/API/imapTransporterClass.md @@ -433,9 +433,9 @@ Each object of the returned collection contains the following properties: | Property | Typ | Beschreibung | | ---------------- | ------- | ------------------------------------------------------------------------------------------------------------------- | | \[].name | Text | Name of the mailbox | -| \[].selectable | boolean | Indicates whether or not the access rights allow the mailbox to be selected:

    • true - the mailbox can be selected
    • false - the mailbox can not be selected
    | -| \[].inferior | boolean | Indicates whether or not the access rights allow creating a lower hierachy in the mailbox:
    • true - a lower level can be created
    • false - a lower level can not be created
    | -| \[].interesting | boolean | Indicates if the mailbox has been marked "interesting" by the server:
    • true - The mailbox has been marked "interesting" by the server. For example, it may contain new messages.
    • false - The mailbox has not been marked "interesting" by the server.
    | +| \[].selectable | Boolean | Indicates whether or not the access rights allow the mailbox to be selected:
    • true - the mailbox can be selected
    • false - the mailbox can not be selected
    | +| \[].inferior | Boolean | Indicates whether or not the access rights allow creating a lower hierachy in the mailbox:
    • true - a lower level can be created
    • false - a lower level can not be created
    | +| \[].interesting | Boolean | Indicates if the mailbox has been marked "interesting" by the server:
    • true - The mailbox has been marked "interesting" by the server. For example, it may contain new messages.
    • false - The mailbox has not been marked "interesting" by the server.
    | If the account does not contain any mailboxes, an empty collection is returned. @@ -557,8 +557,8 @@ The optional *options* parameter allows you pass an object defining additional i | Property | Typ | Beschreibung | | ---------- | ------- | --------------------------------------------------------------------------------------------------------------------------- | -| updateSeen | boolean | If True, the message is marked as "seen" in the mailbox. If False, the message is not marked as "seen". Default value: True | -| withBody | boolean | Pass True to return the body of the message. If False, only the message header is returned. Default value: True | +| updateSeen | Boolean | If True, the message is marked as "seen" in the mailbox. If False, the message is not marked as "seen". Default value: True | +| withBody | Boolean | Pass True to return the body of the message. If False, only the message header is returned. Default value: True | > * The function generates an error and returns **Null** if *msgID* designates a non-existing message, > * If no mailbox is selected with the [`.selectBox()`](#selectbox) function, an error is generated, > * If there is no open connection, `.getMail()` will open a connection the last mailbox specified with [`.selectBox()`](#selectbox)`. From 1c263b9f2e93b0d75637b088e97f3f057052d891 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:26:00 +0100 Subject: [PATCH 298/311] New translations entitySelectionClass.md (German) --- .../de/API/entitySelectionClass.md | 100 ++++++++++++++++-- 1 file changed, 93 insertions(+), 7 deletions(-) diff --git a/website/translated_docs/de/API/entitySelectionClass.md b/website/translated_docs/de/API/entitySelectionClass.md index e7faa39ff600cd..1cf545d5fce8c8 100644 --- a/website/translated_docs/de/API/entitySelectionClass.md +++ b/website/translated_docs/de/API/entitySelectionClass.md @@ -23,6 +23,7 @@ An entity selection is an object containing one or more reference(s) to [entitie | [](#extract)

        | | [](#first)

        | | [](#getdataclass)

        | +| [](#isalterable)

        | | [](#isordered)

        | | [](#last)

        | | [](#length)

        | @@ -43,6 +44,46 @@ An entity selection is an object containing one or more reference(s) to [entitie + +**Create entity selection** ( *dsTable* : Table { ; *settings* : Object } ) : 4D.EntitySelection + + +| Parameter | Typ | | Beschreibung | +| --------- | ------------------ |:--:| ------------------------------------------------------------------------------------------- | +| dsTable | Tabelle | -> | Table in the 4D database whose current selection will be used to build the entity selection | +| settings | Objekt | -> | Build option: context | +| Ergebnis | 4D.EntitySelection | <- | Entity selection matching the dataclass related to the given table | + + + +#### Beschreibung + +The `Create entity selection` command builds and returns a new, [alterable](ORDA/entities.md#shareable-or-alterable-entity-selections) entity selection related to the dataclass matching the given *dsTable*, according to the current selection of this table. + +If the current selection is sorted, an [ordered](ORDA/dsMapping.md#ordered-or-unordered-entity-selection) entity selection is created (the order of the current selection is kept). If the current selection is unsorted, an unordered entity selection is created. + +If the *dsTable* is not exposed in [`ds`](API/datastoreClass.md#ds), an error is returned. This command cannot be used with a Remote datastore. + +In the optional *settings* parameter, you can pass an object containing the following property: + +| Property | Typ | Beschreibung | +| -------- | ---- | ----------------------------------------------------------------------------------------------------------------- | +| context | Text | Label for the [optimization context](ORDA/entities.md#clientserver-optimization) applied to the entity selection. | + + +#### Beispiel + +```4d +var $employees : cs.EmployeeSelection +ALL RECORDS([Employee]) +$employees:=Create entity selection([Employee]) +// The $employees entity selection now contains a set of reference +// on all entities related to the Employee dataclass +``` + +#### See also + +[`dataClass.newSelection()`](dataclassClass.md#newselection) ## [*index*] @@ -181,10 +222,10 @@ The resulting object is an entity selection of Employee with duplications remove ## .add()

    History -| Version | Changes | -| ------- | --------------------------------------------- | -| v18 R5 | Only supports non-shareable entity selections | -| v17 | Added | +| Version | Changes | +| ------- | ----------------------------------------- | +| v18 R5 | Only supports alterable entity selections | +| v17 | Added |
    @@ -204,7 +245,7 @@ The resulting object is an entity selection of Employee with duplications remove The `.add()` function adds the specified *entity* to the entity selection and returns the modified entity selection. > This function modifies the original entity selection. -**Warning:** The entity selection must be *non-shareable*, i.e. it has been created for example by [`.newSelection()`](dataclassClass.md#newselection) or `Create entity selection`, otherwise `.add()` will return an error. Shareable entity selections do not accept the addition of entities. For more information, please refer to the [Shareable vs Non-shareable entity selections](ORDA/entities.md#shareable-or-non-shareable-entity-selections) section. +**Warning:** The entity selection must be *alterable*, i.e. it has been created for example by [`.newSelection()`](dataclassClass.md#newselection) or `Create entity selection`, otherwise `.add()` will return an error. Shareable entity selections do not accept the addition of entities. For more information, please refer to the [Shareable or alterable entity selections](ORDA/entities.md#shareable-or-alterable-entity-selections) section. * If the entity selection is ordered, *entity* is added at the end of the selection. If a reference to the same entity already belongs to the entity selection, it is duplicated and a new reference is added. @@ -482,9 +523,9 @@ The `.copy()` function returns > This function does not modify the original entity selection. -By default, if the *option* parameter is omitted, the function returns a new, non-shareable entity selection (even if the function is applied to a shareable entity selection). Pass the `ck shared` constant in the *option* parameter if you want to create a shareable entity selection. +By default, if the *option* parameter is omitted, the function returns a new, alterable entity selection (even if the function is applied to a shareable entity selection). Pass the `ck shared` constant in the *option* parameter if you want to create a shareable entity selection. -> For information on the shareable property of entity selections, please refer to the [Shareable vs Non-shareable entity selections](ORDA/entities.md#shareable-or-non-shareable-entity-selections) section. +> For information on the shareable property of entity selections, please refer to the [Shareable or alterable entity selections](ORDA/entities.md#shareable-or-alterable-entity-selections) section. #### Beispiel @@ -806,6 +847,7 @@ There is, however, a difference between both statements when the selection is em **.getDataClass()** : 4D.DataClass + | Parameter | Typ | | Beschreibung | | --------- | ------------ |:--:| ------------------------------------------------------ | @@ -842,6 +884,47 @@ The following generic code duplicates all entities of the entity selection: + +## .isAlterable() + +
    History + +| Version | Changes | +| ------- | ------- | +| v18 R5 | Added | + +
    + + +**.isAlterable()** : Boolean + + +| Parameter | Typ | | Beschreibung | +| --------- | ------- |:--:| ---------------------------------------------------------- | +| Ergebnis | Boolean | <- | True if the entity selection is alterable, False otherwise | + + +#### Beschreibung + +The `.isAlterable()` function returns True if the entity selection is alterable, and False if the entity selection is not alterable. + +For more information, please refer to [Shareable or alterable entity selections](ORDA/entities.md#shareable-or-alterable-entity-selections). + +#### Beispiel + +You are about to display `Form.products` in a [list box](FormObjects/listbox_overview.md) to allow the user to add new products. You want to make sure it is alterable so that the user can add new products without error: + +```4d +If (Not(Form.products.isAlterable())) + Form.products:=Form.products.copy() +End if +... +Form.products.add(Form.product) +``` + + + + ## .isOrdered() @@ -988,6 +1071,7 @@ Entity selections always have a `.length` property. **.max**( *attributePath* : Text ) : any + | Parameter | Typ | | Beschreibung | | ------------- | ---- |:--:| ------------------------------------------------ | @@ -1898,6 +1982,7 @@ Returns: "lastName": "Durham" } ] + ``` #### Example 4 @@ -2090,6 +2175,7 @@ Returns: }, { "firstName": "Gary", + "lastName": "Reichert", "directReports": [ { From b803469cb53eae51d2f4699e8d91e978683534f5 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:26:02 +0100 Subject: [PATCH 299/311] New translations emailObjectClass.md (German) --- website/translated_docs/de/API/emailObjectClass.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/de/API/emailObjectClass.md b/website/translated_docs/de/API/emailObjectClass.md index 123a4e0f450c7e..94fad7cc45ea6c 100644 --- a/website/translated_docs/de/API/emailObjectClass.md +++ b/website/translated_docs/de/API/emailObjectClass.md @@ -175,7 +175,7 @@ The `.bodyValues` object contains the following properties: | Property | Typ | Wert | | -------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------- | | *partID*.value | Text | Value of the body part | -| *partID*.isEncodingProblem | boolean | True if malformed sections are found while decoding the charset, or unknown charset, or unknown content transfer-encoding. False by default | +| *partID*.isEncodingProblem | Boolean | True if malformed sections are found while decoding the charset, or unknown charset, or unknown content transfer-encoding. False by default | @@ -341,7 +341,7 @@ This property is the "keywords" header (see [RFC#4021](https://tools.ietf.org/ht - boolean + Boolean From 2822a93c039f52f27ff700001eab74d0244903d1 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:26:12 +0100 Subject: [PATCH 300/311] New translations datastoreClass.md (German) --- .../translated_docs/de/API/datastoreClass.md | 79 +++++++++++++------ 1 file changed, 57 insertions(+), 22 deletions(-) diff --git a/website/translated_docs/de/API/datastoreClass.md b/website/translated_docs/de/API/datastoreClass.md index 3b8f435a7832e7..18b2293efb2a8c 100644 --- a/website/translated_docs/de/API/datastoreClass.md +++ b/website/translated_docs/de/API/datastoreClass.md @@ -10,13 +10,14 @@ A [Datastore](ORDA/dsMapping.md#datastore) is the interface object provided by O ### Summary -| | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [](#canceltransaction)

        | | [](#dataclassname)

         | | [](#encryptionstatus)

         | | [](#getinfo)

         | | [](#getrequestlog)

         | +| [](#makeSelectionsAlterable)

         | | [](#providedatakey)

         | | [](#startrequestlog)

         | | [](#starttransaction)

         | @@ -75,7 +76,7 @@ Using the main datastore on the 4D database: #### Beispiel 2 -```4d +```4d var $connectTo; $firstFrench; $firstForeign : Object var $frenchStudents; $foreignStudents : cs.DataStore @@ -166,7 +167,7 @@ Pass in *connectionInfo* an object describing the remote datastore you want to c Connection to a remote datastore without user / password: ```4d - var $connectTo : Object + var $connectTo : Object var $remoteDS : cs.DataStore $connectTo:=New object("type";"4D Server";"hostname";"192.168.18.11:8044") $remoteDS:=Open datastore($connectTo;"students") @@ -178,7 +179,7 @@ Connection to a remote datastore without user / password: Connection to a remote datastore with user / password / timeout / tls: ```4d - var $connectTo : Object + var $connectTo : Object var $remoteDS : cs.DataStore $connectTo:=New object("type";"4D Server";"hostname";\"192.168.18.11:4443";\ "user";"marie";"password";$pwd;"idleTimeout";70;"tls";True) @@ -191,7 +192,7 @@ Connection to a remote datastore with user / password / timeout / tls: Working with several remote datastores: ```4d - var $connectTo : Object + var $connectTo : Object var $frenchStudents; $foreignStudents : cs.DataStore $connectTo:=New object("hostname";"192.168.18.11:8044") $frenchStudents:=Open datastore($connectTo;"french") @@ -203,7 +204,7 @@ Working with several remote datastores: #### Error management -In case of error, the command returns **Null**. If the remote datastore cannot be reached (wrong address, web server not started, http and https not enabled...), error 1610 "A remote request to host XXX has failed" is raised. You can intercept this error with a method installed by `ON ERR CALL`. +In case of error, the command returns **Null**. If the remote datastore cannot be reached (wrong address, web server not started, http and https not enabled...), error 1610 "A remote request to host XXX has failed" is raised. You can intercept this error with a method installed by `ON ERR CALL`. @@ -380,12 +381,12 @@ The `.getInfo()` function returns **Returned object** -| Property | Typ | Beschreibung | -| ---------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| type | string |

  • "4D": main datastore, available through ds
  • "4D Server": remote datastore, open with Open datastore
  • | -| networked | boolean |
  • True: the datastore is reached through a network connection.
  • False: the datastore is not reached through a network connection (local database)
  • | -| localID | Text | ID of the datastore on the machine. Corresponds to the localId string given with the `Open datastore` command. Empty string ("") for main datastore. | -| connection | object | Object describing the remote datastore connection (not returned for main datastore). Available properties:

    PropertyTypBeschreibung
    hostnameTextIP address or name of the remote datastore + ":" + port number
    tlsbooleanTrue if secured connection is used with the remote datastore
    idleTimeoutnumberSession inactivity timeout (in minutes)
    userTextUser authenticated on the remote datastore
    | +| Property | Typ | Beschreibung | +| ---------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| type | string |

  • "4D": main datastore, available through ds
  • "4D Server": remote datastore, open with Open datastore
  • | +| networked | Boolean |
  • True: the datastore is reached through a network connection.
  • False: the datastore is not reached through a network connection (local database)
  • | +| localID | Text | ID of the datastore on the machine. Corresponds to the localId string given with the `Open datastore` command. Empty string ("") for main datastore. | +| connection | object | Object describing the remote datastore connection (not returned for main datastore). Available properties:

    PropertyTypBeschreibung
    hostnameTextIP address or name of the remote datastore + ":" + port number
    tlsBooleanTrue if secured connection is used with the remote datastore
    idleTimeoutnumberSession inactivity timeout (in minutes)
    userTextUser authenticated on the remote datastore
    | * If the `.getInfo()` function is executed on a 4D Server or 4D single-user, `networked` is False. * If the `.getInfo()` function is executed on a remote 4D, `networked` is True @@ -419,8 +420,8 @@ On a remote datastore: //"localID":"students", //"networked":true, //"connection":{hostname:"111.222.33.44:8044","tls":false,"idleTimeout":2880,"user":"marie"}} -``` - +``` + @@ -465,6 +466,39 @@ See Example 2 of [`.startRequestLog()`](#startrequestlog). + +## .makeSelectionsAlterable() + +

    History +| Version | Changes | +| ------- | ------- | +| v18 R5 | Added | +
    + + +**.makeSelectionsAlterable()** + + +| Parameter | Typ | | Beschreibung | +| --------- | --- |::| ------------------------------- | +| | | | Does not require any parameters | + + + +#### Beschreibung + +The `.makeSelectionsAlterable()` function sets all entity selections as alterable by default in all the current application datastores (including [remote datastores](ORDA/remoteDatastores.md)). It is intended to be used once, for example in the `On Startup` database method. + +When this function is not called, new entity selections can be shareable, depending on the nature of their "parent", or [how they are created](ORDA/entities.md#shareable-or-non-shareable-entity-selections). + +> This function does not modify entity selections created by [`.copy()`](#copy) or `OB Copy` when the explicit `ck shared` option is used. + + +> **Compatibility**: This function must only be used in projects converted from 4D versions prior to 4D v18 R5 and containing [.add()](entitySelectionClass.md#add) calls. In this context, using `.makeSelectionsAlterable()` can save time by restoring instantaneously the previous 4D behavior in existing projects. On the other hand, using this method in new projects created in 4D v18 R5 and higher **is not recommended**, since it prevents entity selections to be shared, which provides greater performance and scalabitlity. + + + + ## .provideDataKey() @@ -525,7 +559,7 @@ If no *curPassphrase* or *curDataKey* is given, `.provideDataKey()` returns **nu #### Beispiel -```4d +```4d var $keyStatus : Object var $passphrase : Text @@ -539,7 +573,7 @@ If no *curPassphrase* or *curDataKey* is given, `.provideDataKey()` returns **nu End if End if ``` - + @@ -587,7 +621,7 @@ For a description of the ORDA request log format, please refer to the [**ORDA cl You want to log ORDA client requests in a file and use the log sequence number: -```4d +```4d var $file : 4D.File var $e : cs.PersonsEntity @@ -604,7 +638,7 @@ You want to log ORDA client requests in a file and use the log sequence number: You want to log ORDA client requests in memory: -```4d +```4d var $es : cs.PersonsSelection var $log : Collection @@ -617,7 +651,7 @@ You want to log ORDA client requests in memory: $log:=ds.getRequestLog() ALERT("The longest request lasted: "+String($log.max("duration"))+" ms") ``` - + @@ -653,7 +687,7 @@ You can nest several transactions (sub-transactions). Each transaction or sub-tr #### Beispiel -```4d +```4d var $connect; $status : Object var $person : cs.PersonsEntity var $ds : cs.DataStore @@ -683,13 +717,14 @@ You can nest several transactions (sub-transactions). Each transaction or sub-tr $ds.validateTransaction() End if ``` - + + ## .stopRequestLog() From 565a06405fbc237abbb45079777396f5ceb12cca Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:26:19 +0100 Subject: [PATCH 301/311] New translations cryptoKeyClass.md (German) --- website/translated_docs/de/API/cryptoKeyClass.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/website/translated_docs/de/API/cryptoKeyClass.md b/website/translated_docs/de/API/cryptoKeyClass.md index b24f9dc7c70346..1bd683fb498621 100644 --- a/website/translated_docs/de/API/cryptoKeyClass.md +++ b/website/translated_docs/de/API/cryptoKeyClass.md @@ -29,7 +29,7 @@ ASSERT($status.success) ### Summary | | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [](#4dcryptokeynew)

        | +| [](#4dcryptokeynew)

        | | [](#curve)

         | | [](#decrypt)

        | | [](#encrypt)

        | @@ -46,6 +46,8 @@ ASSERT($status.success) + + ## 4D.CryptoKey.new()

    History @@ -57,7 +59,7 @@ ASSERT($status.success) **4D.CryptoKey.new**( *settings* : Object ) : 4D.CryptoKey - + | Parameter | Typ | | Beschreibung | | --------- | ------------ | -- | ---------------------------------------------------------------------- | | settings | Objekt | -> | Settings to generate or load a key pair | @@ -82,7 +84,7 @@ The `4D.CryptoKey.new()` function create #### *cryptoKey* The returned `cryptoKey` object encapsulates an encryption key pair. It is a shared object and can therefore be used by multiple 4D processes simultaneously. - + @@ -144,7 +146,7 @@ The function returns a status object with `success` property set to `true` if th | Property | Typ | Beschreibung | | -------- | ---------- | ------------------------------------------------------------------- | -| success | boolean | True if the message has been successfully decrypted | +| success | Boolean | True if the message has been successfully decrypted | | result | Text | Message decrypted and decoded using the `options.encodingDecrypted` | | errors | collection | If `success` is `false`, may contain a collection of errors | @@ -295,7 +297,7 @@ The `cryptoKey` must contain a valid **private** key. | ----------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | hash | Text | Digest algorithm to use. For example: "SHA256", "SHA384", or "SHA512". When used to produce a JWT, the hash size must match the PS@, ES@, RS@, or PS@ algorithm size | | encodingEncrypted | Text | Encoding used to convert the binary encrypted message into the result string. Can be "Base64", or "Base64URL". Default is "Base64". | -| pss | boolean | Use Probabilistic Signature Scheme (PSS). Ignored if the key is not an RSA key. Pass `true` when producing a JWT for PS@ algorithm | +| pss | Boolean | Use Probabilistic Signature Scheme (PSS). Ignored if the key is not an RSA key. Pass `true` when producing a JWT for PS@ algorithm | | encoding | Text | ERepresentation to be used for result signature. Possible values: "Base64" or "Base64URL". Default is "Base64". | @@ -368,7 +370,7 @@ The `cryptoKey` must contain a valid **public** key. | Property | Typ | Beschreibung | | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | hash | Text | Digest algorithm to use. For example: "SHA256", "SHA384", or "SHA512". When used to produce a JWT, the hash size must match the PS@, ES@, RS@, or PS@ algorithm size | -| pss | boolean | Use Probabilistic Signature Scheme (PSS). Ignored if the key is not an RSA key. Pass `true` when verifying a JWT for PS@ algorithm | +| pss | Boolean | Use Probabilistic Signature Scheme (PSS). Ignored if the key is not an RSA key. Pass `true` when verifying a JWT for PS@ algorithm | | encoding | Text | Representation of provided signature. Possible values are "Base64" or "Base64URL". Default is "Base64". | @@ -380,7 +382,7 @@ In case the signature couldn't be verified because it was not signed with the sa | Property | Typ | Beschreibung | | -------- | ---------- | ----------------------------------------------------------- | -| success | boolean | True if the signature matches the message | +| success | Boolean | True if the signature matches the message | | errors | collection | If `success` is `false`, may contain a collection of errors | From 6538b215ac7785099426594d1762aea65ea7d827 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:26:23 +0100 Subject: [PATCH 302/311] New translations collectionClass.md (German) --- website/translated_docs/de/API/collectionClass.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/de/API/collectionClass.md b/website/translated_docs/de/API/collectionClass.md index f3946c60653cfe..a20ecf270956df 100644 --- a/website/translated_docs/de/API/collectionClass.md +++ b/website/translated_docs/de/API/collectionClass.md @@ -192,7 +192,7 @@ You can pass any number of values of the following supported types: * number (real, longint...). Number values are always stored as reals. * Text -* boolean +* Boolean * date * time (stored as number of milliseconds - real) * Null From 748beb50072c06cb4aae5042c733bac24652b72e Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:32:49 +0100 Subject: [PATCH 303/311] New translations entitySelectionClass.md (Japanese) --- .../ja/API/entitySelectionClass.md | 100 ++++++++++++++++-- 1 file changed, 93 insertions(+), 7 deletions(-) diff --git a/website/translated_docs/ja/API/entitySelectionClass.md b/website/translated_docs/ja/API/entitySelectionClass.md index 8677dc886a2205..26790eff6bd2d5 100644 --- a/website/translated_docs/ja/API/entitySelectionClass.md +++ b/website/translated_docs/ja/API/entitySelectionClass.md @@ -23,6 +23,7 @@ An entity selection is an object containing one or more reference(s) to [entitie | [](#extract)

        | | [](#first)

        | | [](#getdataclass)

        | +| [](#isalterable)

        | | [](#isordered)

        | | [](#last)

        | | [](#length)

        | @@ -43,6 +44,46 @@ An entity selection is an object containing one or more reference(s) to [entitie + +**Create entity selection** ( *dsTable* : Table { ; *settings* : Object } ) : 4D.EntitySelection + + +| 参照 | タイプ | | 説明 | +| -------- | ------------------ |:--:| ------------------------------------------------------------------------------------------- | +| dsTable | テーブル | -> | Table in the 4D database whose current selection will be used to build the entity selection | +| settings | オブジェクト | -> | Build option: context | +| 戻り値 | 4D.EntitySelection | <- | Entity selection matching the dataclass related to the given table | + + + +#### 説明 + +The `Create entity selection` command builds and returns a new, [alterable](ORDA/entities.md#shareable-or-alterable-entity-selections) entity selection related to the dataclass matching the given *dsTable*, according to the current selection of this table. + +If the current selection is sorted, an [ordered](ORDA/dsMapping.md#ordered-or-unordered-entity-selection) entity selection is created (the order of the current selection is kept). If the current selection is unsorted, an unordered entity selection is created. + +If the *dsTable* is not exposed in [`ds`](API/datastoreClass.md#ds), an error is returned. This command cannot be used with a Remote datastore. + +In the optional *settings* parameter, you can pass an object containing the following property: + +| プロパティ | タイプ | 説明 | +| ------- | ---- | ----------------------------------------------------------------------------------------------------------------- | +| context | テキスト | Label for the [optimization context](ORDA/entities.md#clientserver-optimization) applied to the entity selection. | + + +#### 例題 + +```4d +var $employees : cs.EmployeeSelection +ALL RECORDS([Employee]) +$employees:=Create entity selection([Employee]) +// The $employees entity selection now contains a set of reference +// on all entities related to the Employee dataclass +``` + +#### 参照 + +[`dataClass.newSelection()`](dataclassClass.md#newselection) ## [*index*] @@ -181,10 +222,10 @@ The resulting object is an entity selection of Employee with duplications remove ## .add()

    履歴 -| バージョン | 内容 | -| ------ | --------------------------------------------- | -| v18 R5 | Only supports non-shareable entity selections | -| v17 | 追加 | +| バージョン | 内容 | +| ------ | ----------------------------------------- | +| v18 R5 | Only supports alterable entity selections | +| v17 | 追加 |
    @@ -204,7 +245,7 @@ The resulting object is an entity selection of Employee with duplications remove The `.add()` function adds the specified *entity* to the entity selection and returns the modified entity selection. > This function modifies the original entity selection. -**Warning:** The entity selection must be *non-shareable*, i.e. it has been created for example by [`.newSelection()`](dataclassClass.md#newselection) or `Create entity selection`, otherwise `.add()` will return an error. Shareable entity selections do not accept the addition of entities. For more information, please refer to the [Shareable vs Non-shareable entity selections](ORDA/entities.md#shareable-or-non-shareable-entity-selections) section. +**Warning:** The entity selection must be *alterable*, i.e. it has been created for example by [`.newSelection()`](dataclassClass.md#newselection) or `Create entity selection`, otherwise `.add()` will return an error. Shareable entity selections do not accept the addition of entities. For more information, please refer to the [Shareable or alterable entity selections](ORDA/entities.md#shareable-or-alterable-entity-selections) section. * If the entity selection is ordered, *entity* is added at the end of the selection. If a reference to the same entity already belongs to the entity selection, it is duplicated and a new reference is added. @@ -482,9 +523,9 @@ The `.copy()` function returns > This function does not modify the original entity selection. -By default, if the *option* parameter is omitted, the function returns a new, non-shareable entity selection (even if the function is applied to a shareable entity selection). Pass the `ck shared` constant in the *option* parameter if you want to create a shareable entity selection. +By default, if the *option* parameter is omitted, the function returns a new, alterable entity selection (even if the function is applied to a shareable entity selection). Pass the `ck shared` constant in the *option* parameter if you want to create a shareable entity selection. -> For information on the shareable property of entity selections, please refer to the [Shareable vs Non-shareable entity selections](ORDA/entities.md#shareable-or-non-shareable-entity-selections) section. +> For information on the shareable property of entity selections, please refer to the [Shareable or alterable entity selections](ORDA/entities.md#shareable-or-alterable-entity-selections) section. #### 例題 @@ -806,6 +847,7 @@ There is, however, a difference between both statements when the selection is em **.getDataClass()** : 4D.DataClass + | 参照 | タイプ | | 説明 | | --- | ------------ |:--:| ------------------------------------------------------ | @@ -842,6 +884,47 @@ The following generic code duplicates all entities of the entity selection: + +## .isAlterable() + +
    履歴 + +| バージョン | 内容 | +| ------ | -- | +| v18 R5 | 追加 | + +
    + + +**.isAlterable()** : Boolean + + +| 参照 | タイプ | | 説明 | +| --- | --- |:--:| ---------------------------------------------------------- | +| 戻り値 | ブール | <- | True if the entity selection is alterable, False otherwise | + + +#### 説明 + +The `.isAlterable()` function returns True if the entity selection is alterable, and False if the entity selection is not alterable. + +For more information, please refer to [Shareable or alterable entity selections](ORDA/entities.md#shareable-or-alterable-entity-selections). + +#### 例題 + +You are about to display `Form.products` in a [list box](FormObjects/listbox_overview.md) to allow the user to add new products. You want to make sure it is alterable so that the user can add new products without error: + +```4d +If (Not(Form.products.isAlterable())) + Form.products:=Form.products.copy() +End if +... +Form.products.add(Form.product) +``` + + + + ## .isOrdered() @@ -988,6 +1071,7 @@ Entity selections always have a `.length` property. **.max**( *attributePath* : Text ) : any + | 参照 | タイプ | | 説明 | | ------------- | ---- |:--:| ------------------------------------------------ | @@ -1898,6 +1982,7 @@ Returns: "lastName": "Durham" } ] + ``` #### Example 4 @@ -2090,6 +2175,7 @@ Returns: }, { "firstName": "Gary", + "lastName": "Reichert", "directReports": [ { From 1a8bcf5439f5afbc49018ecf39842a509067a084 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:33:01 +0100 Subject: [PATCH 304/311] New translations datastoreClass.md (Japanese) --- .../translated_docs/ja/API/datastoreClass.md | 77 ++++++++++++++----- 1 file changed, 56 insertions(+), 21 deletions(-) diff --git a/website/translated_docs/ja/API/datastoreClass.md b/website/translated_docs/ja/API/datastoreClass.md index 8efbd5459edf2d..f708486da568d3 100644 --- a/website/translated_docs/ja/API/datastoreClass.md +++ b/website/translated_docs/ja/API/datastoreClass.md @@ -10,13 +10,14 @@ A [Datastore](ORDA/dsMapping.md#datastore) is the interface object provided by O ### Summary -| | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [](#canceltransaction)

        | | [](#dataclassname)

         | | [](#encryptionstatus)

         | | [](#getinfo)

         | | [](#getrequestlog)

         | +| [](#makeSelectionsAlterable)

         | | [](#providedatakey)

         | | [](#startrequestlog)

         | | [](#starttransaction)

         | @@ -75,7 +76,7 @@ Using the main datastore on the 4D database: #### 例題 2 -```4d +```4d var $connectTo; $firstFrench; $firstForeign : Object var $frenchStudents; $foreignStudents : cs.DataStore @@ -166,7 +167,7 @@ Pass in *connectionInfo* an object describing the remote datastore you want to c Connection to a remote datastore without user / password: ```4d - var $connectTo : Object + var $connectTo : Object var $remoteDS : cs.DataStore $connectTo:=New object("type";"4D Server";"hostname";"192.168.18.11:8044") $remoteDS:=Open datastore($connectTo;"students") @@ -178,7 +179,7 @@ Connection to a remote datastore without user / password: Connection to a remote datastore with user / password / timeout / tls: ```4d - var $connectTo : Object + var $connectTo : Object var $remoteDS : cs.DataStore $connectTo:=New object("type";"4D Server";"hostname";\"192.168.18.11:4443";\ "user";"marie";"password";$pwd;"idleTimeout";70;"tls";True) @@ -191,7 +192,7 @@ Connection to a remote datastore with user / password / timeout / tls: Working with several remote datastores: ```4d - var $connectTo : Object + var $connectTo : Object var $frenchStudents; $foreignStudents : cs.DataStore $connectTo:=New object("hostname";"192.168.18.11:8044") $frenchStudents:=Open datastore($connectTo;"french") @@ -203,7 +204,7 @@ Working with several remote datastores: #### Error management -In case of error, the command returns **Null**. If the remote datastore cannot be reached (wrong address, web server not started, http and https not enabled...), error 1610 "A remote request to host XXX has failed" is raised. You can intercept this error with a method installed by `ON ERR CALL`. +In case of error, the command returns **Null**. If the remote datastore cannot be reached (wrong address, web server not started, http and https not enabled...), error 1610 "A remote request to host XXX has failed" is raised. You can intercept this error with a method installed by `ON ERR CALL`. @@ -380,11 +381,11 @@ The `.getInfo()` function returns **Returned object** -| プロパティ | タイプ | 説明 | -| ---------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| type | string |

  • "4D": main datastore, available through ds
  • "4D Server": remote datastore, open with Open datastore
  • | -| networked | boolean |
  • True: the datastore is reached through a network connection.
  • False: the datastore is not reached through a network connection (local database)
  • | -| localID | text | ID of the datastore on the machine. Corresponds to the localId string given with the `Open datastore` command. Empty string ("") for main datastore. | +| プロパティ | タイプ | 説明 | +| ---------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| type | string |
  • "4D": main datastore, available through ds
  • "4D Server": remote datastore, open with Open datastore
  • | +| networked | boolean |
  • True: the datastore is reached through a network connection.
  • False: the datastore is not reached through a network connection (local database)
  • | +| localID | text | ID of the datastore on the machine. Corresponds to the localId string given with the `Open datastore` command. Empty string ("") for main datastore. | | connection | object | Object describing the remote datastore connection (not returned for main datastore). Available properties:

    プロパティタイプ説明
    hostnametextIP address or name of the remote datastore + ":" + port number
    tlsbooleanTrue if secured connection is used with the remote datastore
    idleTimeoutnumberSession inactivity timeout (in minutes)
    usertextUser authenticated on the remote datastore
    | * If the `.getInfo()` function is executed on a 4D Server or 4D single-user, `networked` is False. @@ -419,8 +420,8 @@ On a remote datastore: //"localID":"students", //"networked":true, //"connection":{hostname:"111.222.33.44:8044","tls":false,"idleTimeout":2880,"user":"marie"}} -``` - +``` + @@ -465,6 +466,39 @@ See Example 2 of [`.startRequestLog()`](#startrequestlog). + +## .makeSelectionsAlterable() + +

    履歴 +| バージョン | 内容 | +| ------ | -- | +| v18 R5 | 追加 | +
    + + +**.makeSelectionsAlterable()** + + +| 参照 | タイプ | | 説明 | +| -- | --- |::| ------------------------------- | +| | | | Does not require any parameters | + + + +#### 説明 + +The `.makeSelectionsAlterable()` function sets all entity selections as alterable by default in all the current application datastores (including [remote datastores](ORDA/remoteDatastores.md)). It is intended to be used once, for example in the `On Startup` database method. + +When this function is not called, new entity selections can be shareable, depending on the nature of their "parent", or [how they are created](ORDA/entities.md#shareable-or-non-shareable-entity-selections). + +> This function does not modify entity selections created by [`.copy()`](#copy) or `OB Copy` when the explicit `ck shared` option is used. + + +> **Compatibility**: This function must only be used in projects converted from 4D versions prior to 4D v18 R5 and containing [.add()](entitySelectionClass.md#add) calls. In this context, using `.makeSelectionsAlterable()` can save time by restoring instantaneously the previous 4D behavior in existing projects. On the other hand, using this method in new projects created in 4D v18 R5 and higher **is not recommended**, since it prevents entity selections to be shared, which provides greater performance and scalabitlity. + + + + ## .provideDataKey() @@ -525,7 +559,7 @@ If no *curPassphrase* or *curDataKey* is given, `.provideDataKey()` returns **nu #### 例題 -```4d +```4d var $keyStatus : Object var $passphrase : Text @@ -539,7 +573,7 @@ If no *curPassphrase* or *curDataKey* is given, `.provideDataKey()` returns **nu End if End if ``` - + @@ -587,7 +621,7 @@ For a description of the ORDA request log format, please refer to the [**ORDA cl You want to log ORDA client requests in a file and use the log sequence number: -```4d +```4d var $file : 4D.File var $e : cs.PersonsEntity @@ -604,7 +638,7 @@ You want to log ORDA client requests in a file and use the log sequence number: You want to log ORDA client requests in memory: -```4d +```4d var $es : cs.PersonsSelection var $log : Collection @@ -617,7 +651,7 @@ You want to log ORDA client requests in memory: $log:=ds.getRequestLog() ALERT("The longest request lasted: "+String($log.max("duration"))+" ms") ``` - + @@ -653,7 +687,7 @@ You can nest several transactions (sub-transactions). Each transaction or sub-tr #### 例題 -```4d +```4d var $connect; $status : Object var $person : cs.PersonsEntity var $ds : cs.DataStore @@ -683,13 +717,14 @@ You can nest several transactions (sub-transactions). Each transaction or sub-tr $ds.validateTransaction() End if ``` - + + ## .stopRequestLog() From ff91f96300aa19d9084282040e2ca767273895be Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:33:07 +0100 Subject: [PATCH 305/311] New translations cryptoKeyClass.md (Japanese) --- website/translated_docs/ja/API/cryptoKeyClass.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/ja/API/cryptoKeyClass.md b/website/translated_docs/ja/API/cryptoKeyClass.md index b23277f85b874c..9812b481bbcf65 100644 --- a/website/translated_docs/ja/API/cryptoKeyClass.md +++ b/website/translated_docs/ja/API/cryptoKeyClass.md @@ -29,7 +29,7 @@ ASSERT($status.success) ### Summary | | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [](#4dcryptokeynew)

        | +| [](#4dcryptokeynew)

        | | [](#curve)

         | | [](#decrypt)

        | | [](#encrypt)

        | @@ -46,6 +46,8 @@ ASSERT($status.success) + + ## 4D.CryptoKey.new()

    履歴 @@ -57,7 +59,7 @@ ASSERT($status.success) **4D.CryptoKey.new**( *settings* : Object ) : 4D.CryptoKey - + | 参照 | タイプ | | 説明 | | -------- | ------------ | -- | ---------------------------------------------------------------------- | | settings | オブジェクト | -> | キーペアを生成・ロードするための設定 | @@ -82,7 +84,7 @@ The `4D.CryptoKey.new()` function create #### *cryptoKey* The returned `cryptoKey` object encapsulates an encryption key pair. It is a shared object and can therefore be used by multiple 4D processes simultaneously. - + From 323465de23666d96a789f7b1103fce8767c5392c Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:35:22 +0100 Subject: [PATCH 306/311] New translations properties_Action.md (Japanese) --- website/translated_docs/ja/FormObjects/properties_Action.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/ja/FormObjects/properties_Action.md b/website/translated_docs/ja/FormObjects/properties_Action.md index 985fb713f5cd89..d6b0c486314ba7 100644 --- a/website/translated_docs/ja/FormObjects/properties_Action.md +++ b/website/translated_docs/ja/FormObjects/properties_Action.md @@ -98,7 +98,7 @@ title: 動作 - 拡張子を省いた既存のプロジェクトメソッド名: `myMethod`。この場合、フォームオブジェクトに対して操作がおこなわれても、4D はそれらの変更を自動反映しません。 - .4dm 拡張子を含むカスタムのメソッドファイルパス: - `ObjectMethods/objectName.4dm`。 ファイルシステムも使用できます: + `../../CustomMethods/myMethod.4dm`。 ファイルシステムも使用できます: `/RESOURCES/Buttons/bOK.4dm`。 この場合、フォームオブジェクトに対して操作がおこなわれても、4D はそれらの変更を自動反映しません。 From 895905e173792accab8ffca9fba63f250847cccd Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:39:34 +0100 Subject: [PATCH 307/311] New translations entitySelectionClass.md (Portuguese) --- .../pt/API/entitySelectionClass.md | 100 ++++++++++++++++-- 1 file changed, 93 insertions(+), 7 deletions(-) diff --git a/website/translated_docs/pt/API/entitySelectionClass.md b/website/translated_docs/pt/API/entitySelectionClass.md index 4f580a0d48ee07..64b9afa2f892f6 100644 --- a/website/translated_docs/pt/API/entitySelectionClass.md +++ b/website/translated_docs/pt/API/entitySelectionClass.md @@ -23,6 +23,7 @@ An entity selection is an object containing one or more reference(s) to [entitie | [](#extract)

        | | [](#first)

        | | [](#getdataclass)

        | +| [](#isalterable)

        | | [](#isordered)

        | | [](#last)

        | | [](#length)

        | @@ -43,6 +44,46 @@ An entity selection is an object containing one or more reference(s) to [entitie + +**Create entity selection** ( *dsTable* : Table { ; *settings* : Object } ) : 4D.EntitySelection + + +| Parameter | Type | | Description | +| --------- | ------------------ |:--:| ------------------------------------------------------------------------------------------- | +| dsTable | Table | -> | Table in the 4D database whose current selection will be used to build the entity selection | +| settings | Object | -> | Build option: context | +| Result | 4D.EntitySelection | <- | Entity selection matching the dataclass related to the given table | + + + +#### Description + +The `Create entity selection` command builds and returns a new, [alterable](ORDA/entities.md#shareable-or-alterable-entity-selections) entity selection related to the dataclass matching the given *dsTable*, according to the current selection of this table. + +If the current selection is sorted, an [ordered](ORDA/dsMapping.md#ordered-or-unordered-entity-selection) entity selection is created (the order of the current selection is kept). If the current selection is unsorted, an unordered entity selection is created. + +If the *dsTable* is not exposed in [`ds`](API/datastoreClass.md#ds), an error is returned. This command cannot be used with a Remote datastore. + +In the optional *settings* parameter, you can pass an object containing the following property: + +| Property | Type | Description | +| -------- | ---- | ----------------------------------------------------------------------------------------------------------------- | +| context | Text | Label for the [optimization context](ORDA/entities.md#clientserver-optimization) applied to the entity selection. | + + +#### Example + +```4d +var $employees : cs.EmployeeSelection +ALL RECORDS([Employee]) +$employees:=Create entity selection([Employee]) +// The $employees entity selection now contains a set of reference +// on all entities related to the Employee dataclass +``` + +#### See also + +[`dataClass.newSelection()`](dataclassClass.md#newselection) ## [*index*] @@ -181,10 +222,10 @@ The resulting object is an entity selection of Employee with duplications remove ## .add()

    History -| Version | Changes | -| ------- | --------------------------------------------- | -| v18 R5 | Only supports non-shareable entity selections | -| v17 | Added | +| Version | Changes | +| ------- | ----------------------------------------- | +| v18 R5 | Only supports alterable entity selections | +| v17 | Added |
    @@ -204,7 +245,7 @@ The resulting object is an entity selection of Employee with duplications remove The `.add()` function adds the specified *entity* to the entity selection and returns the modified entity selection. > This function modifies the original entity selection. -**Warning:** The entity selection must be *non-shareable*, i.e. it has been created for example by [`.newSelection()`](dataclassClass.md#newselection) or `Create entity selection`, otherwise `.add()` will return an error. Shareable entity selections do not accept the addition of entities. For more information, please refer to the [Shareable vs Non-shareable entity selections](ORDA/entities.md#shareable-or-non-shareable-entity-selections) section. +**Warning:** The entity selection must be *alterable*, i.e. it has been created for example by [`.newSelection()`](dataclassClass.md#newselection) or `Create entity selection`, otherwise `.add()` will return an error. Shareable entity selections do not accept the addition of entities. For more information, please refer to the [Shareable or alterable entity selections](ORDA/entities.md#shareable-or-alterable-entity-selections) section. * If the entity selection is ordered, *entity* is added at the end of the selection. If a reference to the same entity already belongs to the entity selection, it is duplicated and a new reference is added. @@ -482,9 +523,9 @@ The `.copy()` function returns > This function does not modify the original entity selection. -By default, if the *option* parameter is omitted, the function returns a new, non-shareable entity selection (even if the function is applied to a shareable entity selection). Pass the `ck shared` constant in the *option* parameter if you want to create a shareable entity selection. +By default, if the *option* parameter is omitted, the function returns a new, alterable entity selection (even if the function is applied to a shareable entity selection). Pass the `ck shared` constant in the *option* parameter if you want to create a shareable entity selection. -> For information on the shareable property of entity selections, please refer to the [Shareable vs Non-shareable entity selections](ORDA/entities.md#shareable-or-non-shareable-entity-selections) section. +> For information on the shareable property of entity selections, please refer to the [Shareable or alterable entity selections](ORDA/entities.md#shareable-or-alterable-entity-selections) section. #### Example @@ -806,6 +847,7 @@ There is, however, a difference between both statements when the selection is em **.getDataClass()** : 4D.DataClass + | Parameter | Type | | Description | | --------- | ------------ |:--:| ------------------------------------------------------ | @@ -842,6 +884,47 @@ The following generic code duplicates all entities of the entity selection: + +## .isAlterable() + +
    History + +| Version | Changes | +| ------- | ------- | +| v18 R5 | Added | + +
    + + +**.isAlterable()** : Boolean + + +| Parameter | Type | | Description | +| --------- | ------- |:--:| ---------------------------------------------------------- | +| Result | Boolean | <- | True if the entity selection is alterable, False otherwise | + + +#### Description + +The `.isAlterable()` function returns True if the entity selection is alterable, and False if the entity selection is not alterable. + +For more information, please refer to [Shareable or alterable entity selections](ORDA/entities.md#shareable-or-alterable-entity-selections). + +#### Example + +You are about to display `Form.products` in a [list box](FormObjects/listbox_overview.md) to allow the user to add new products. You want to make sure it is alterable so that the user can add new products without error: + +```4d +If (Not(Form.products.isAlterable())) + Form.products:=Form.products.copy() +End if +... +Form.products.add(Form.product) +``` + + + + ## .isOrdered() @@ -988,6 +1071,7 @@ Entity selections always have a `.length` property. **.max**( *attributePath* : Text ) : any + | Parameter | Type | | Description | | ------------- | ---- |:--:| ------------------------------------------------ | @@ -1898,6 +1982,7 @@ Returns: "lastName": "Durham" } ] + ``` #### Example 4 @@ -2090,6 +2175,7 @@ Returns: }, { "firstName": "Gary", + "lastName": "Reichert", "directReports": [ { From a2954c56377d6dfa9d5d9c8e4c0946cbf3eb27d2 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:40:04 +0100 Subject: [PATCH 308/311] New translations datastoreClass.md (Portuguese) --- .../translated_docs/pt/API/datastoreClass.md | 77 ++++++++++++++----- 1 file changed, 56 insertions(+), 21 deletions(-) diff --git a/website/translated_docs/pt/API/datastoreClass.md b/website/translated_docs/pt/API/datastoreClass.md index f842895cae2237..ff0364517b30f1 100644 --- a/website/translated_docs/pt/API/datastoreClass.md +++ b/website/translated_docs/pt/API/datastoreClass.md @@ -10,13 +10,14 @@ A [Datastore](ORDA/dsMapping.md#datastore) is the interface object provided by O ### Summary -| | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [](#canceltransaction)

        | | [](#dataclassname)

         | | [](#encryptionstatus)

         | | [](#getinfo)

         | | [](#getrequestlog)

         | +| [](#makeSelectionsAlterable)

         | | [](#providedatakey)

         | | [](#startrequestlog)

         | | [](#starttransaction)

         | @@ -75,7 +76,7 @@ Using the main datastore on the 4D database: #### Example 2 -```4d +```4d var $connectTo; $firstFrench; $firstForeign : Object var $frenchStudents; $foreignStudents : cs.DataStore @@ -166,7 +167,7 @@ Pass in *connectionInfo* an object describing the remote datastore you want to c Connection to a remote datastore without user / password: ```4d - var $connectTo : Object + var $connectTo : Object var $remoteDS : cs.DataStore $connectTo:=New object("type";"4D Server";"hostname";"192.168.18.11:8044") $remoteDS:=Open datastore($connectTo;"students") @@ -178,7 +179,7 @@ Connection to a remote datastore without user / password: Connection to a remote datastore with user / password / timeout / tls: ```4d - var $connectTo : Object + var $connectTo : Object var $remoteDS : cs.DataStore $connectTo:=New object("type";"4D Server";"hostname";\"192.168.18.11:4443";\ "user";"marie";"password";$pwd;"idleTimeout";70;"tls";True) @@ -191,7 +192,7 @@ Connection to a remote datastore with user / password / timeout / tls: Working with several remote datastores: ```4d - var $connectTo : Object + var $connectTo : Object var $frenchStudents; $foreignStudents : cs.DataStore $connectTo:=New object("hostname";"192.168.18.11:8044") $frenchStudents:=Open datastore($connectTo;"french") @@ -203,7 +204,7 @@ Working with several remote datastores: #### Error management -In case of error, the command returns **Null**. If the remote datastore cannot be reached (wrong address, web server not started, http and https not enabled...), error 1610 "A remote request to host XXX has failed" is raised. You can intercept this error with a method installed by `ON ERR CALL`. +In case of error, the command returns **Null**. If the remote datastore cannot be reached (wrong address, web server not started, http and https not enabled...), error 1610 "A remote request to host XXX has failed" is raised. You can intercept this error with a method installed by `ON ERR CALL`. @@ -380,11 +381,11 @@ The `.getInfo()` function returns **Returned object** -| Property | Type | Description | -| ---------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| type | string |

  • "4D": main datastore, available through ds
  • "4D Server": remote datastore, open with Open datastore
  • | -| networked | boolean |
  • True: the datastore is reached through a network connection.
  • False: the datastore is not reached through a network connection (local database)
  • | -| localID | text | ID of the datastore on the machine. Corresponds to the localId string given with the `Open datastore` command. Empty string ("") for main datastore. | +| Property | Type | Description | +| ---------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| type | string |
  • "4D": main datastore, available through ds
  • "4D Server": remote datastore, open with Open datastore
  • | +| networked | boolean |
  • True: the datastore is reached through a network connection.
  • False: the datastore is not reached through a network connection (local database)
  • | +| localID | text | ID of the datastore on the machine. Corresponds to the localId string given with the `Open datastore` command. Empty string ("") for main datastore. | | connection | object | Object describing the remote datastore connection (not returned for main datastore). Available properties:

    PropertyTypeDescription
    hostnametextIP address or name of the remote datastore + ":" + port number
    tlsbooleanTrue if secured connection is used with the remote datastore
    idleTimeoutnumberSession inactivity timeout (in minutes)
    usertextUser authenticated on the remote datastore
    | * If the `.getInfo()` function is executed on a 4D Server or 4D single-user, `networked` is False. @@ -419,8 +420,8 @@ On a remote datastore: //"localID":"students", //"networked":true, //"connection":{hostname:"111.222.33.44:8044","tls":false,"idleTimeout":2880,"user":"marie"}} -``` - +``` + @@ -465,6 +466,39 @@ See Example 2 of [`.startRequestLog()`](#startrequestlog). + +## .makeSelectionsAlterable() + +

    History +| Version | Changes | +| ------- | ------- | +| v18 R5 | Added | +
    + + +**.makeSelectionsAlterable()** + + +| Parameter | Type | | Description | +| --------- | ---- |::| ------------------------------- | +| | | | Does not require any parameters | + + + +#### Description + +The `.makeSelectionsAlterable()` function sets all entity selections as alterable by default in all the current application datastores (including [remote datastores](ORDA/remoteDatastores.md)). It is intended to be used once, for example in the `On Startup` database method. + +When this function is not called, new entity selections can be shareable, depending on the nature of their "parent", or [how they are created](ORDA/entities.md#shareable-or-non-shareable-entity-selections). + +> This function does not modify entity selections created by [`.copy()`](#copy) or `OB Copy` when the explicit `ck shared` option is used. + + +> **Compatibility**: This function must only be used in projects converted from 4D versions prior to 4D v18 R5 and containing [.add()](entitySelectionClass.md#add) calls. In this context, using `.makeSelectionsAlterable()` can save time by restoring instantaneously the previous 4D behavior in existing projects. On the other hand, using this method in new projects created in 4D v18 R5 and higher **is not recommended**, since it prevents entity selections to be shared, which provides greater performance and scalabitlity. + + + + ## .provideDataKey() @@ -525,7 +559,7 @@ If no *curPassphrase* or *curDataKey* is given, `.provideDataKey()` returns **nu #### Example -```4d +```4d var $keyStatus : Object var $passphrase : Text @@ -539,7 +573,7 @@ If no *curPassphrase* or *curDataKey* is given, `.provideDataKey()` returns **nu End if End if ``` - + @@ -587,7 +621,7 @@ For a description of the ORDA request log format, please refer to the [**ORDA cl You want to log ORDA client requests in a file and use the log sequence number: -```4d +```4d var $file : 4D.File var $e : cs.PersonsEntity @@ -604,7 +638,7 @@ You want to log ORDA client requests in a file and use the log sequence number: You want to log ORDA client requests in memory: -```4d +```4d var $es : cs.PersonsSelection var $log : Collection @@ -617,7 +651,7 @@ You want to log ORDA client requests in memory: $log:=ds.getRequestLog() ALERT("The longest request lasted: "+String($log.max("duration"))+" ms") ``` - + @@ -653,7 +687,7 @@ You can nest several transactions (sub-transactions). Each transaction or sub-tr #### Example -```4d +```4d var $connect; $status : Object var $person : cs.PersonsEntity var $ds : cs.DataStore @@ -683,13 +717,14 @@ You can nest several transactions (sub-transactions). Each transaction or sub-tr $ds.validateTransaction() End if ``` - + + ## .stopRequestLog() From 2d0a020ea2866b6c6cd87bf86ba6ba009cfa8d4c Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:40:11 +0100 Subject: [PATCH 309/311] New translations cryptoKeyClass.md (Portuguese) --- website/translated_docs/pt/API/cryptoKeyClass.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/pt/API/cryptoKeyClass.md b/website/translated_docs/pt/API/cryptoKeyClass.md index c8939867cbd138..e787391963ac3c 100644 --- a/website/translated_docs/pt/API/cryptoKeyClass.md +++ b/website/translated_docs/pt/API/cryptoKeyClass.md @@ -29,7 +29,7 @@ ASSERT($status.success) ### Summary | | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [](#4dcryptokeynew)

        | +| [](#4dcryptokeynew)

        | | [](#curve)

         | | [](#decrypt)

        | | [](#encrypt)

        | @@ -46,6 +46,8 @@ ASSERT($status.success) + + ## 4D.CryptoKey.new()

    History @@ -57,7 +59,7 @@ ASSERT($status.success) **4D.CryptoKey.new**( *settings* : Object ) : 4D.CryptoKey - + | Parameter | Type | | Description | | --------- | ------------ | -- | ---------------------------------------------------------------------- | | settings | Object | -> | Settings to generate or load a key pair | @@ -82,7 +84,7 @@ The `4D.CryptoKey.new()` function create #### *cryptoKey* The returned `cryptoKey` object encapsulates an encryption key pair. It is a shared object and can therefore be used by multiple 4D processes simultaneously. - + From c570933b79ee35841b7943b818279255d8e67044 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:44:38 +0100 Subject: [PATCH 310/311] New translations entities.md (Portuguese) --- website/translated_docs/pt/ORDA/entities.md | 119 +++++++++++++------- 1 file changed, 79 insertions(+), 40 deletions(-) diff --git a/website/translated_docs/pt/ORDA/entities.md b/website/translated_docs/pt/ORDA/entities.md index afa3396ee84d0d..392c0c4065b6ef 100644 --- a/website/translated_docs/pt/ORDA/entities.md +++ b/website/translated_docs/pt/ORDA/entities.md @@ -184,71 +184,109 @@ You can create an object of type [entity selection](dsMapping.md#entity-selectio You can simultaneously create and use as many different entity selections as you want for a dataclass. Keep in mind that an entity selection only contains references to entities. Different entity selections can contain references to the same entities. -### Shareable or non-shareable entity selections +### Shareable or alterable entity selections -An entity selection can be **shareable** (readable by multiple processes, but not modifiable after creation) or **non-shareable** (only usable by the current process, but modifiable afterwards): +An entity selection can be **shareable** (readable by multiple processes, but not alterable after creation) or **alterable** (supports the [`.add()`](API/entitySelectionClass.md#add) function, but only usable by the current process). -- a **shareable** entity selection has the following characteristics: - - it can be stored in a shared object or shared collection, and can be shared between several processes or workers; - - it can be stored in several shared objects or collections, or in a shared object or collection which already belongs to a group (it does not have a *locking identifier*); - - it does not allow the addition of new entities. Trying to add an entity to a shareable entity selection will trigger an error (1637 - This entity selection cannot be altered). To add an entity to a shareable entity selection, you must first transform it into a non-shareable entity selection using the [`.copy()`](API/entitySelectionClass.md#copy) function, before calling [`.add()`](API/entitySelectionClass.md#add). +#### Properties -- a **non-shareable** entity selection has the following characteristics: - + it cannot be shared between processes, nor be stored in a shared object or collection. Trying to store a non-shareable entity selection in a shared object or collection will trigger an error (-10721 - Not supported value type in a shared object or shared collection); - + it accepts the addition of new entities. +A **shareable** entity selection has the following characteristics: -In most cases, new entity selections are **shareable**, including: +- it can be stored in a shared object or shared collection, and can be passed as parameter between several processes or workers; +- it can be stored in several shared objects or collections, or in a shared object or collection which already belongs to a group (it does not have a *locking identifier*); +- it does not allow the addition of new entities. Trying to add an entity to a shareable entity selection will trigger an error (1637 - This entity selection cannot be altered). To add an entity to a shareable entity selection, you must first transform it into a non-shareable entity selection using the [`.copy()`](API/entitySelectionClass.md#copy) function, before calling [`.add()`](API/entitySelectionClass.md#add). -- entity selections resulting from various ORDA class functions ([`.query()`](API/entitySelectionClass.md#query), [`.query()`](API/dataclassClass.md#query), etc.), -- entity selections based upon relations (e.g. `company.employee`), -- entity selections resulting from projections of values (e.g. `ds.Employee.all().employer`), -- entity selections explicitely copied as shareable with [`.copy()`](API/entitySelectionClass.md#copy) or `OB Copy`. +> Most entity selection functions (such as [`.slice()`](API/entitySelectionClass.md#slice), [`.and()`](API/entitySelectionClass.md#and)...) support shareable entity selections since they do not need to alter the original entity selection (they return a new one). -New entity selections are **non-shareable** in the following cases: +An **alterable** entity selection has the following characteristics: -- blank entity selections created using the [`.newSelection()`](API/dataclassClass.md#newselection) function or `Create entity selection` command, -- entity selections explicitely copied as non-shareable with [`.copy()`](API/entitySelectionClass.md#copy) or `OB Copy`. +- it cannot be shared between processes, nor be stored in a shared object or collection. Trying to store a non-shareable entity selection in a shared object or collection will trigger an error (-10721 - Not supported value type in a shared object or shared collection); +- it accepts the addition of new entities, i.e. it is supports the [`.add()`](API/entitySelectionClass.md#add) function. -#### Example + +#### How are they defined? + +The **shareable** or **alterable** nature of an entity selection is defined when the entity selection is created (it cannot be modified afterwards). You can know the nature of an entity selection using the [.isAlterable()](API/entitySelectionClass.md#isalterable) function or the `OB Is shared` command. + + +A new entity selection is **shareable** in the following cases: + +- the new entity selection results from an ORDA class function applied to a dataClass: [dataClass.all()](API/dataclassClass.md#all), [dataClass.fromCollection()](API/dataclassClass.md#fromcollection), [dataClass.query()](API/dataclassClass.md#query), +- the new entity selection is based upon a relation [entity.*attributeName*](API/entityClass.md#attributename) (e.g. "company.employees") when *attributeName* is a one-to-many related attribute but the entity does not belong to an entity selection. +- the new entity selection is explicitely copied as shareable with [entitySelection.copy()](API/entitySelectionClass.md#copy) or `OB Copy` (i.e. with the `ck shared` option). + +Example: +```4d +$myComp:=ds.Company.get(2) //$myComp does not belong to an entity selection +$employees:=$myComp.employees //$employees is shareable +``` + +A new entity selection is **alterable** in the following cases: + +- the new entity selection created blank using the [dataClass.newSelection()](API/dataclassClass.md#newselection) function or `Create entity selection` command, +- the new entity selection is explicitely copied as alterable with [entitySelection.copy()](API/entitySelectionClass.md#copy) or `OB Copy` (i.e. without the `ck shared` option). + +Example: +```4d +$toModify:=ds.Company.all().copy() //$toModify is alterable +``` + + +A new entity selection **inherits** from the original entity selection nature in the following cases: + +- the new entity selection results from one of the various ORDA class functions applied to an existing entity selection ([.query()](API/entitySelectionClass.md#query), [.slice()](API/entitySelectionClass.md#slice), etc.) . +- the new entity selection is based upon a relation: + - [entity.*attributeName*](API/entityClass.md#attributename) (e.g. "company.employees") when *attributeName* is a one-to-many related attribute and the entity belongs to an entity selection (same nature as [.getSelection()](API/entityClass.md#getselection) entity selection), + - [entitySelection.*attributeName*](API/entitySelectionClass.md#attributename) (e.g. "employees.employer") when *attributeName* is a related attribute (same nature as the entity selection), + - [.extract()](API/entitySelectionClass.md#extract) when the resulting collection contains entity selections (same nature as the entity selection). + +Examples: + +```4d +$highSal:=ds.Employee.query("salary >= :1"; 1000000) + //$highSal is shareable because of the query on dataClass +$comp:=$highSal.employer //$comp is shareable because $highSal is shareable + +$lowSal:=ds.Employee.query("salary <= :1"; 10000).copy() + //$lowSal is alterable because of the copy() +$comp2:=$lowSal.employer //$comp2 is alterable because $lowSal is alterable +``` + + +#### Sharing an entity selection between processes (example) You work with two entity selections that you want to pass to a worker process so that it can send mails to appropriate persons: ```4d - If(Storage.info=Null) - Use(Storage) - Storage.info:=New shared object() - End use - End if - Use(Storage.info) - //Put entity selections in a shared object - Storage.info.paid:=ds.Invoices.query("status=:1";"Paid") - Storage.info.unpaid:=ds.Invoices.query("status=:1";"Unpaid") - End use +var $paid; $unpaid : cs.InvoicesSelection +//We get entity selections for paid and unpaid invoices +$paid:=ds.Invoices.query("status=:1"; "Paid") +$unpaid:=ds.Invoices.query("status=:1"; "Unpaid") + +//We pass entity selection references as parameters to the worker +CALL WORKER("mailing"; "sendMails"; $paid; $unpaid) + +``` - CALL WORKER("mailing";"sendMails";Storage.info) -The sendMails method: +The `sendMails` method: - var $info: ;$1Object - var $paid;$unpaid : cs.InvoicesSelection +```4d + + #DECLARE ($paid : cs.InvoicesSelection; $unpaid : cs.InvoicesSelection) var $invoice : cs.InvoicesEntity - var $server;$transporter;$email;$status : Object + var $server; $transporter; $email; $status : Object //Prepare emails - $server:=New object + $server:=New object() $server.host:="exchange.company.com" $server.user:="myName@company.com" $server.password:="my!!password" $transporter:=SMTP New transporter($server) - $email:=New object + $email:=New object() $email.from:="myName@company.com" - //Get entity selections - $info:=$1 - $paid:=$info.paid - $unpaid:=$info.unpaid - //Loops on entity selections For each($invoice;$paid) $email.to:=$invoice.customer.address // email address of the customer @@ -385,6 +423,7 @@ The following methods automatically associate the optimization context of the so * `entitySelection.drop()` + **Example** Given the following code: From 842f923e0124daec46ce320934f05933d8c80906 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 18:45:58 +0100 Subject: [PATCH 311/311] New translations manData.md (Portuguese) --- website/translated_docs/pt/REST/manData.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/pt/REST/manData.md b/website/translated_docs/pt/REST/manData.md index 6aa983fc269635..175b3de414697e 100644 --- a/website/translated_docs/pt/REST/manData.md +++ b/website/translated_docs/pt/REST/manData.md @@ -18,7 +18,7 @@ To query data directly, you can do so using the [`$filter`]($filter.md) function With the REST API, you can perform all the manipulations to data as you can in 4D. -To add and modify entities, you can call [`$method=update`]($method.md#methodupdate). Before saving data, you can also validate it beforehand by calling [`$method=validate`]($method.md#methodvalidate). If you want to delete one or more entities, you can use [`$method=delete`]($method.md#methoddelete). +To add and modify entities, you can call [`$method=update`]($method.md#methodupdate). If you want to delete one or more entities, you can use [`$method=delete`]($method.md#methoddelete). Besides retrieving a single entity in a dataclass using [{dataClass}({key})](%7BdataClass%7D_%7Bkey%7D.html), you can also write a [class function](classFunctions.md#function-calls) that returns an entity selection (or a collection).