rougail/doc/fill/value.md

198 lines
5.2 KiB
Markdown
Raw Normal View History

2021-02-06 17:36:43 +01:00
# Valeur calculée de la variable
## Variable avec une valeur par défaut calculée
Créons une variable dont la valeur est retournée par la fonction "return_no" :
2022-11-03 22:17:43 +01:00
```xml
2021-02-06 17:36:43 +01:00
<variables>
2021-12-11 16:33:55 +01:00
<variable name="my_calculated_variable"/>
2021-02-06 17:36:43 +01:00
</variables>
<constraints>
2021-12-11 16:33:55 +01:00
<fill name="return_no">
<target>my_calculated_variable</target>
</fill>
2021-02-06 17:36:43 +01:00
</constraints>
```
2022-11-02 22:52:50 +01:00
En YAML :
2022-11-03 22:17:43 +01:00
```yml
2022-11-02 22:52:50 +01:00
variables:
- variable:
name: my_calculated_variable
constraints:
- fill:
- name: return_no
target:
- text: my_calculated_variable
```
2021-02-06 17:36:43 +01:00
Puis créons la fonction "return_no" :
2022-11-03 22:17:43 +01:00
```python
2021-02-06 17:36:43 +01:00
def return_no():
return 'no'
```
2021-02-15 15:17:23 +01:00
La [cible (de type variable)](../target/variable.md) du calcul est ici "my_calculated_variable".
2021-02-10 08:19:33 +01:00
2021-02-15 15:17:23 +01:00
Dans ce cas, la valeur par défaut est la valeur retournée par la fonction (ici "no"), elle sera calculée tant que l'utilisateur n'a pas de spécifié de valeur à cette variable.
2021-02-06 17:36:43 +01:00
Attention, si une valeur par défaut est définit dans la variable "my_calculated_variable" :
2022-11-03 22:17:43 +01:00
```xml
2021-02-06 17:36:43 +01:00
<variable name="my_calculated_variable">
2021-12-11 16:33:55 +01:00
<value>yes</value>
2021-02-06 17:36:43 +01:00
</variable>
```
2022-11-02 22:52:50 +01:00
En YAML :
2022-11-03 22:17:43 +01:00
```yml
2022-11-02 22:52:50 +01:00
variables:
- variable:
name: my_calculated_variable
value:
- text: yes
```
2021-02-06 17:36:43 +01:00
Cette valeur par défaut sera complètement ignorée. C'est le calcul qui en définira la valeur.
2021-02-10 08:19:33 +01:00
Il est possible de définir des [paramètres](../param/README.md) à cette fonction.
2021-02-06 17:36:43 +01:00
## Variable avec une valeur calculée
En ajoutant le paramètre "hidden" à "True" dans la variable précédente, l'utilisateur n'aura plus la possibilité de modifié la valeur. La valeur de la variable sera donc systématiquement calculée :
2022-11-03 22:17:43 +01:00
```xml
2021-02-06 17:36:43 +01:00
<variable name="my_calculated_variable" hidden="True"/>
```
2022-11-02 22:52:50 +01:00
En YAML :
2022-11-03 22:17:43 +01:00
```yml
2022-11-02 22:52:50 +01:00
variables:
- variable:
name: my_calculated_variable
2022-11-03 22:16:52 +01:00
hidden: true
2022-11-02 22:52:50 +01:00
```
2021-02-06 17:36:43 +01:00
Si une condition "hidden_if_in" est spécifié à la variable, la valeur sera modifiable par l'utilisateur si elle n'est pas cachée mais elle sera systèmatiquement calculée (même si elle a déjà était modifiée) si la variable est cachée.
## Variable meneuse ou suiveuse avec valeur calculé
Une [variable suiveuse](../family/leadership.md) ne peut pas être calculé automatiquement.
Une [variable meneuse](../family/leadership.md) peut être calculé automatiquement.
Si la variable n'est pas multiple, il ne faut pas que le calcule retourne une liste.
2021-02-06 17:36:43 +01:00
## Variable dynamique avec une valeur calculée
2021-02-10 08:19:33 +01:00
Il est également possible de calculer [une variable d'une famille dynamique](../family/auto.md) à partir d'une variable standard :
2021-02-06 17:36:43 +01:00
2022-11-03 22:17:43 +01:00
```xml
2021-02-06 17:36:43 +01:00
<variables>
2021-12-11 16:33:55 +01:00
<variable name='suffixes' type='string' description="Suffixes of dynamic family" multi="True">
<value>val1</value>
<value>val2</value>
</variable>
<variable name="my_variable" type="string" description="My variable">
<value>val</value>
</variable>
<family name='dyn' dynamic="suffixes">
2022-11-02 22:52:50 +01:00
<variable name="my_calculated_variable_dyn_" type="string" description="My calculated variable"/>
2021-12-11 16:33:55 +01:00
<value>val</value>
2021-02-15 15:17:23 +01:00
</variable>
2021-12-11 16:33:55 +01:00
</family>
2021-02-06 17:36:43 +01:00
</variables>
<constraints>
2021-12-11 16:33:55 +01:00
<fill name="return_value">
<param type="variable">my_variable</param>
<target>my_calculated_variable_dyn_</target>
</fill>
2021-02-06 17:36:43 +01:00
</constraints>
```
2022-11-02 22:52:50 +01:00
En YAML :
2022-11-03 22:17:43 +01:00
```yml
2022-11-02 22:52:50 +01:00
variables:
- variable:
name: suffixes
type: string
description: Suffixes of dynamic family
2022-11-03 22:16:52 +01:00
multi: true
2022-11-02 22:52:50 +01:00
value:
- text: val1
- text: val2
- variable:
name: my_variable
type: string
description: My variable
value:
- text: val
- family:
name: dyn
dynamic: suffixes
variables:
- variable:
name: my_calculated_variable_dyn_
type: string
description: My calculated variable
value:
- text: val
constraints:
- fill:
- name: return_value
param:
- type: variable
text: my_variable
target:
- text: my_calculated_variable_dyn_
```
2021-02-06 17:36:43 +01:00
Dans ce cas, les variables dynamiques "my_calculated_variable_dyn_" seront calculés à partir de la valeur de la variable "my_variable".
Que cela soit pour la variable "my_calculated_variable_dyn_val1" et "my_calculated_variable_dyn_val2".
Par contre, il n'est pas possible de faire un calcul pour une seule des deux variables issues de la variable dynamique.
Si c'est ce que vous cherchez à faire, il faudra prévoir un traitement particulier dans votre fonction.
Dans ce cas, il faut explicitement demander la valeur du suffix dans la fonction :
2022-11-03 22:17:43 +01:00
```xml
2021-02-06 17:36:43 +01:00
<constraints>
2021-12-11 16:33:55 +01:00
<fill name="return_value_suffix">
<param type="variable">my_variable</param>
<param type="suffix"/>
<target>my_calculated_variable_dyn_</target>
</fill>
2021-02-06 17:36:43 +01:00
</constraints>
```
2022-11-02 22:52:50 +01:00
En YAML :
2022-11-03 22:17:43 +01:00
```yml
2022-11-02 22:52:50 +01:00
constraints:
- fill:
- name: return_value_suffix
param:
- type: variable
text: my_variable
- type:suffix
target:
- text: my_calculated_variable_dyn_
```
2021-02-06 17:36:43 +01:00
Et ainsi faire un traitement spécifique pour ce suffix :
2022-11-03 22:17:43 +01:00
```python
2021-02-06 17:36:43 +01:00
def return_value_suffix(value, suffix):
if suffix == 'val1':
return value
```
## Variable avec valeur calculée obligatoire
Par défaut les variables calculées ne sont pas des variables obligatoires.
Dans ce cas un calcul peut retourner "None" ou "", mais surtout un utilisateur peut spécifier une valeur nulle à cette variable. Dans ce cas le calcul ne sera plus réalisé.