Si j’importe des données par CSV, l’identifiant reste à Auto.
J’ai tenté de contourner en ajoutant le calcul dans le preImport, mais j’ai l’impression que je dois indiquer moi-même la valeur de l’incrément, ce qui fait perdre l’intérêt de l’auto incrément.
if (getFieldValue(IDENTIFIER_FIELD).equals("Auto"))
{
String id = getField(IDENTIFIER_FIELD).increment(this,"1",getField(IDENTIFIER_FIELD).getIncrementPattern());
setFieldValue(IDENTIFIER_FIELD, id);
}
Auriez vous une solution par paramétrage à me conseiller ?
Normalement les champs avec auto-incrément ne sont pas valorisés pour les batch instances (instance utilisée par l’import CSV) et les instances pour l’historisation.
Tu souhaites que l’incrément se calcule automatiquement à l’import ?
A priori on peut implémenter ça dans le preCreate pour forcer le caclul de l’incrément.
@Override
public String preCreate() {
if (isBatchInstance()) { // import CSV
ObjectField f = getField("incrementField");
String idNew = getGrant().getNextIdForColumn(this.getTable(), "row_id");
f.setValue(f.increment(this, idNew, f.getIncrementPattern()));
}
return null;
}
Néanmoins, la stratégie varie si le champ auto-incrémenté est clé fonctionnelle de l’objet. Dans ce cas, et c’est pour ça que le code de la plateforme vérifie l’instance, c’est à l’appelant (ici ton fichier CSV) de fournir l’incrément de la ligne.
Non ta réponse faisait sens !
Moi je voudrais que l’import fasse le travail du champ auto-incrément sans passer par du code, à savoir
aller chercher le max existant
faire + 1
mettre pattern + max + 1 dans la valeur du champ
Le rowId ne me convient pas parce que j’ai une table commune pour 4 objets hérités donc je vais avoir des trous de numérotation.
Dans ce cas je vais remplir la colonne identifiant à la main dans le csv, ça suffira pour l’initialisation des données. (c’est en effet ma clé fonctionnelle)