Ajouter une valeur arbitraire selon script par défaut sur un attribut

Bonjour,

Je souhaiterai ajouter le résultat du script

sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535));

en tant que valeur par défaut d’un attribut supplémentaire, sachant que le résultat ne doit pas être généré une fois et appliquer à tous les documents suivants, mais généré de nouveau et enregistré en base de donnée pour chaque document.

J’ai pensé au champ calculé, mais le résultat de celui-ci est re-calculé à chaque passage sur l’édition du document.

Est-il possible d’atteindre mon objectif avec une installation par défaut de Dolibarr, sans modifications de fichiers cœur ?

Après un peu de lecture, j’en suis aux triggers avec une tentative infructueuse là dessus :

			case 'CONTRACT_CREATE':
                require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
                require_once DOL_DOCUMENT_ROOT.'/core/class/contract.class.php';
                $object->fetch_optionals();
                $object->array_options[‘options_’ . guid]  = printf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535));
                $object->update($user,1);

Un attribut guid a bien sûr été créé.

Résolu, mais hélas avec un script déclencheur dédié.

			case 'CONTRACT_CREATE':
                require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
                require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
                $object->fetch_optionals();
                $object->array_options['options_guid']  = sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535));
                $object->update($user,1);

Bonjour,

Super si vous avez trouver une solution.
Mais effectivement la seule solution c’est de rajouter un trigger.

Bonjour,
Un peu de curiosité de ma part, quel intérêt et/ou usage de cette valeur ?
Qui plus est du mt_rand risque de vous donner plusieurs fois le même résultat et donc d’obtenir des doublons. J’ai eu le même souci avec les tickets de support.
@+

1 « J'aime »

Même usage que Microsoft et les paquets d’installation MSI : avoir un identifiant unique (autre que l’ID de base de donnée) dans le but de faire de la corrélation avec autre chose.

Dans mon cas, la corrélation peut être faite avec quelque chose préexistant, une condition (non visible ici) vérifie si un utilisateur a ajouté un GUID manuellement avant.

Par exemple, un devis peut préciser un GUID pour un contrat, une intervention avant que les documents de ceux-ci ne soient créés, ou bien un contrat peut être créé de manière jointe via des apporteurs d’affaires ou partenaires, tous les documents liés à cette affaire porteront le même GUID.

Inscrire le GUID directement dans les documents en champ libre ne permet pas une recherche rapide dans la liste des documents sur Dolibarr, donc un attribut a été créé pour stocker cette valeur.

N’étant pas dev, le code que je génère n’est pas forcément le plus adapté ou optimisé, si une autre fonction que mt_rand() est plus adapté, je prends. Je souhaitais mélanger rand() et mt_rand(), mais sur les dernière version de PHP, rand() semble être un lien symbolique vers mt_rand().
uuid_create() semble dépendre d’une extension PECL et com_create_guid() semble avoir besoin d’un hôte Windows.

Dolibarr est très portable, facile à migrer d’un serveur à l’autre, je souhaiterai que cela reste comme cela pour faciliter la restauration en cas de panne.