13.6.3.36 Doc::setAttributeValue()
13.6.3.36.1 Description
void setAttributeValue ( string $attributeIdentifier, mixed $value )
Modifie la valeur d'un attribut de l'objet Document. La modification n'est pas enregistrée en base de données.
13.6.3.36.1.1 Avertissements
Pour enregistrer la modification , il est nécessaire d'appeler la méthode
Doc::store()
.
Les résultats fournis par la méthode
Doc::getRawValue()
ne peuvent pas être utilisés
directement par cette méthode.
Les espaces et certains caractères invisibles en début et fin de valeur sont
supprimés. La fonction trim
est utilisée pour réaliser cette
suppression.
13.6.3.36.2 Liste des paramètres
- (string)
attributeIdentifier
- Identifiant de l'attribut à modifier.
- (mixed)
value
-
Nouvelle valeur typée. Le type de la valeur est fonction du type de l'attribut (voir les types en fonction de la valeur).
Il est possible d'affecter aussi les attributs de type
array
avec un tableau à 2 dimensions. La première dimension est l'index de la rangée, la deuxième dimension est l'identifiant de l'attribut.
13.6.3.36.3 Valeur de retour
Void.
13.6.3.36.4 Erreurs / Exceptions
Retourne une exception de type \Dcp\Exception
dans les cas suivants :
- L'attribut n'existe pas;
- Le type attribut ne peut recevoir de valeur (
frame
,tab
,menu
)
Retourne une exception de type \Dcp\AttributeValue\Exception
dans les cas
suivants :
- La valeur est incompatible avec le type d'attribut;
- Une valeur scalaire est donnée pour un attribut multiple.
13.6.3.36.5 Historique
Aucun.
13.6.3.36.6 Exemples
Calcul de la somme des attributs my_numberone
et my_numbertwo
et
enregistrement dans l'attribut my_sum
.
Mise à jour de l'attribut my_mail
avec l'adresse courriel du rédacteur.
Soit la famille suivante :
BEGIN | Ma famille | MYFAMILY | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
CLASS | My\MyFamily | ||||||||||
// | idattr | idframe | label | T | A | type | ord | vis | … | phpfunc | |
ATTR | MY_IDENTIFICATION | Identification | N | N | frame | 10 | W | ||||
ATTR | MY_NUMBERONE | MY_IDENTIFICATION | nombre 1 | Y | N | int | 20 | W | |||
ATTR | MY_NUMBERTWO | MY_IDENTIFICATION | nombre 2 | N | N | int | 30 | W | |||
ATTR | MY_REDACTOR | MY_IDENTIFICATION | rédacteur | N | N | account | 30 | W | |||
ATTR | MY_MAIL | MY_IDENTIFICATION | Adresse courriel | N | N | text | 10 | R | |||
ATTR | MY_SUM | MY_IDENTIFICATION | nombre 1+2 | N | N | int | 30 | R | |||
END |
13.6.3.36.6.1 Mise à jour d'attribut après modification du document
Avec la classe :
namespace My; use \Dcp\AttributeIdentifiers\MyFamily as MyAttributes; use \Dcp\AttributeIdentifiers\Iuser as Aiuser; class MyFamily extends \Dcp\Family\Document { /** * Mise à jour de l'attribut `my_sum` */ protected function setMySum() { $n1 = $this->getAttributeValue(MyAttributes::my_numberone); $n2 = $this->getAttributeValue(MyAttributes::my_numbertwo); $this->setAttributeValue(MyAttributes::my_sum, ($n1 + $n2)); } /** * Mise à jour de l'attribut `my_mail` avec l'adresse courriel du rédacteur */ protected function setMyMail() { $redacId = $this->getAttributeValue(MyAttributes::my_redactor); if ($redacId === null) { $this->clearValue(MyAttributes::my_mail); } else { $redacDoc=new_doc($this->dbaccess,$redacId ); if ($redacDoc->isAlive()) { $this->setAttributeValue(MyAttributes::my_mail, $redacDoc->getAttributeValue(AIuser::us_mail)); } else { $this->clearValue(MyAttributes::my_mail); } } } public function postStore() { $err = parent::postStore(); if (empty($err)) { $this->setMySum(); $this->setMyMail(); } return $err; } }
13.6.3.36.6.2 Exemple avec traitement des exceptions
Calcul de la prochaine échéance dans 7 jours après la dernière modification.
Avec la classe :
namespace My; use \Dcp\AttributeIdentifiers\MyFamily as MyAttributes; use \Dcp\AttributeIdentifiers\Iuser as Aiuser; class MyFamily extends \Dcp\Family\Document { /** * Prochaine échéance dans 7 jours */ protected function setNextDate() { $d = new \DateTime('now'); $d->modify('+7 day'); $this->setAttributeValue(MyAttributes::my_nextdate, $d); } public function postStore() { $err = parent::postStore(); if (empty($err)) { try { $this->setNextDate(); } catch (\Dcp\AttributeValue\Exception $e) { $err = sprintf("Valeur erronée %s", $e->getDcpMessage()); } catch (\Dcp\Exception $e) { $err = sprintf("Erreur d'attribut %s", $e->getDcpMessage()); } } return $err; } }
13.6.3.36.6.3 Exemple d'affectation de tableau
Soit les familles suivantes :
BEGIN | Ma famille | MYFAMILY | ||||||
---|---|---|---|---|---|---|---|---|
CLASS | My\MyFamily | |||||||
DFLDID | auto | |||||||
ICON | classe.png | |||||||
// | idattr | idframe | label | T | A | type | ord | vis |
ATTR | MY_IDENTIFICATION | Identification | N | N | frame | 10 | W | |
ATTR | MY_REDACTOR | MY_IDENTIFICATION | Rédacteur | N | N | account | 50 | W |
ATTR | MY_MAIL | MY_IDENTIFICATION | N | N | text | 60 | R | |
ATTR | MY_REF | MY_IDENTIFICATION | référence | N | N | text | 70 | W |
ATTR | MY_T_PARTNER | MY_IDENTIFICATION | Participants | N | N | array | 80 | W |
ATTR | MY_COAUTHORS | MY_T_PARTNER | Co-auteurs | N | N | account | 90 | W |
ATTR | MY_COMAIL | MY_T_PARTNER | Adresse mail | N | N | text | 110 | W |
END |
BEGIN | Contact | MYCONTACT | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
// | idattr | idframe | label | T | A | type | ord | vis | need | link | … | phpfunc | ... | option |
ATTR | MY_FR_IDENT | État civil | N | N | frame | W | ||||||||
ATTR | MY_NAME | MY_FR_IDENT | nom | Y | N | text | 30 | W | Y | |||||
ATTR | MY_FNAME | MY_FR_IDENT | prénom | Y | N | text | 35 | W | Y | |||||
ATTR | MY_MAIL | MY_FR_IDENT | N | Y | text | 40 | W | mailto:%MY_MAIL% | ||||||
ATTR | MY_ISPARTNER | MY_FR_IDENT | Partenaire ? | N | Y | enum | 45 | W | no|Pas partenaire, yes|Partenaire | system=yes | ||||
END |
La méthode setMyPartners
va rechercher tous les contacts partenaire et va
les insérer dans le tableau my_t_partner
en renseignant l'identifiant et
l'adresse mail de chaque partenaire.
namespace My; use \Dcp\AttributeIdentifiers\MyFamily as MyAttributes; use \Dcp\AttributeIdentifiers\MyContact as AMyContact; class MyFamily extends \Dcp\Family\Document { protected function setMyPartners() { // Recherche des partenaires $s = new \SearchDoc($this->dbaccess, \Dcp\Family\Mycontact::familyName); $s->setObjectReturn(true); $s->addFilter("%s = 'yes'", AMyContact::my_ispartner); $dl = $s->search()->getDocumentList(); // On affecte le tableau à 2 dimensions de valeurs $partners=array(); /** @var \Dcp\Family\MyContact $contact */ foreach ($dl as $contact) { $partners[] = array( MyAttributes::my_coauthors => $contact->id, MyAttributes::my_comail => $contact->getAttributeValue(AMyContact::my_mail)); } $this->setAttributeValue(MyAttributes::my_t_partner, $partners); } public function postStore() { $this->setMyPartners(); } }
13.6.3.36.7 Notes
Pour les attributs de type "numérique" et les types "date", plusieurs types de valeurs sont autorisés.
type | valeur | autorisé |
---|---|---|
int | (int) 3 | OK |
int | (string)"3" | OK |
int | (float) 3.0 | KO |
int | (string)"a" | KO |
double | (float) 3.0 | OK |
double | (int) 3 | OK |
double | (string) "3.0" | OK |
double | (string)"a" | KO |
date | (DateTime) "2012-03-16" | OK |
date | (string) "2012-03-16" | OK |
date | (string) "2012-03" | KO |
date | (string) "16/03/2012" | OK (dépendant de la locale) |
timestamp | (DateTime) "2012-03-16" | OK |
timestamp | (DateTime) "2012-03-16 12:54:34" | OK |
timestamp | (string) "2012-03-16 12:54:34" | OK |
timestamp | (string) "2012-03-16T12:54:34" | OK |