Se rendre au contenu

ORA-01400 « cannot insert NULL into ROWKEY » : migrer des custom fields IFS sans casse (le piège OBJID vs OBJID_)

15 juin 2026 par
ORA-01400 « cannot insert NULL into ROWKEY » : migrer des custom fields IFS sans casse (le piège OBJID vs OBJID_)
Correction rapide : ORA-01400: cannot insert NULL into ("IFSAPP"."…_CFT"."ROWKEY") en migrant des custom fields signifie que la méthode Cf_New__ ne reçoit pas l'identifiant de l'enregistrement parent. Dans Method List Attribute, remplacez OBJID@<seq> par OBJID_@<seq> (avec underscore) : c'est le nom du paramètre dans les procédures New__/Modify__. L'insert du custom field passe.

ORA-01400 cannot insert NULL into ROWKEY en migration IFS : le piège OBJID vs OBJID_ pour les custom fields — ERP Control

Vous construisez un job de migration multi-méthodes dans IFS : création de l'objet (commande d'achat, article…), puis alimentation de ses custom fields via …CFP.Cf_New__. La première méthode CF fonctionne. La deuxième renvoie, ligne après ligne :

ORA-01400 : cannot insert NULL into ("IFSAPP"."RETWHO_PO_BOXES_CFT"."ROWKEY")

Les deux méthodes semblent configurées exactement pareil. Alors pourquoi l'une passe et l'autre pas ?

Le symptôme

L'erreur survient à l'exécution d'un job qui enchaîne plusieurs méthodes (New__, Cf_New__) — typiquement : créer un objet, créer ses lignes ou onglets custom, puis insérer les valeurs de custom fields (CFV/CFT). La méthode Cf_New__ échoue avec cannot insert NULL into …_CFT.ROWKEY : IFS ne sait pas à quel enregistrement parent rattacher la valeur du custom field.

La cause

Pour rattacher un custom field à son enregistrement, Cf_New__ a besoin de l'OBJID du parent, récupéré depuis une méthode précédente du job (la syntaxe @10, @30… référence l'Execute Seq de cette méthode).

Le piège : la colonne OBJID n'existe pas dans la Method List Attribute des vues (PURCHASE_ORDER, RETWHO_PO_BOXES…). Ce qu'il faut référencer, c'est le paramètre de sortie des procédures New__/Modify__ — et il s'appelle OBJID_, avec un underscore final. Écrire OBJID@30 au lieu de OBJID_@30 → la référence ne résout rien → Cf_New__ reçoit NULL → ORA-01400 sur le ROWKEY.

Solution validée sur le cas réel de la communauté IFS (job de lecture de commandes d'achat avec CF sur deux onglets custom) : « Instead of using OBJID@30 use OBJID_@30 as fixed value in the method list attribute screen. » Réponse de l'auteur : « Genius! That made it work! »

Schéma ORA-01400 : Cf_New__ doit recevoir l'OBJID du parent via OBJID_@seq (paramètre des procédures New__) ; avec OBJID@seq la référence est vide et le ROWKEY est NULL

Comment corriger

  • Ouvrez le job, onglet Method List, repérez la méthode …CFP.Cf_New__ en échec.
  • Ouvrez sa Method List Attribute.
  • Repérez la ligne qui passe l'identifiant du parent : OBJID@<seq> (où <seq> = l'Execute Seq de la méthode qui crée le parent).
  • Remplacez-la par OBJID_@<seq> — underscore avant le @.
  • Relancez : le custom field s'insère avec son ROWKEY correctement renseigné.

Référence officielle : la doc IFS (Data Migration in Custom — Custom Fields) documente ce mécanisme : l'OBJID se récupère via les paramètres des procédures New__/Modify__, d'où le nom OBJID_.

Pourquoi « la première méthode CF marchait »

Dans le cas réel, le premier Cf_New__ (onglet « Retail info » de l'en-tête) référençait la méthode 10 et fonctionnait ; le second (lignes « box ») référençait la méthode 30 et échouait. Si votre premier CF passe avec OBJID@10, ne concluez pas que la syntaxe est bonne : selon la version et le contexte (1 ligne vs n lignes générées), la résolution peut réussir par accident. OBJID_ est la forme documentée — utilisez-la partout.

Comment l'éviter

  • Dans tout job multi-méthodes avec custom fields : passez les identifiants parents en OBJID_@seq, systématiquement.
  • Conditionnez l'exécution du Cf_New__ à la présence d'une valeur (champ « must have value ») pour ne pas créer des CF vides.
  • Testez chaque méthode du job isolément sur une ligne avant d'enchaîner les 30 méthodes.

Erreurs de migration IFS liées

Le même type de blocage se joue sur d'autres codes — tous décortiqués dans notre guide pilier Migration de données IFS Cloud:

  • ORA-02291 « parent key not found » — l'autre erreur des onglets custom : une référence d'entité dont il faut récupérer l'objkey.
  • ORA-20112 FND_RECORD_EXIST — le job tente d'INSÉRER une ligne qui existe déjà (problème de clé).
  • ORA-20111 / FND_RECORD_NOT_EXIST — un prérequis contextuel manquant (parents avant enfants).
  • SE_UNAUTHORIZED — la projection du job non accordée à l'exécutant : un problème de permissions de migration .

Pour la gestion des imports/exports, voir aussi la page Import / Export Excel IFS page.

Migrer les personnalisations sans la tuyauterie

Ce cas le montre : migrer des custom fields via les jobs IFS exige de connaître la tuyauterie interne (Cf_New__, OBJID_, Execute Seq, CFV/CFT). C'est précisément le terrain du module CRIM d'ERP Control : la migration des personnalisations IFS (custom fields, custom tabs) entre environnements, en no-code — sans assembler à la main des jobs de 30 méthodes. Cohérent sur vos environnements CFG · UAT · TRN · PROD.

Découvrez comment ERP Control migre vos personnalisations IFS — voir le module CRIMFait partie de notre guide pilier :

Migration de données IFS Cloud — le guide complet 2026 Migration de données IFS Cloud — le guide complet 2026Fait partie de notre guide pilier :

FAQ

Quelle différence entre OBJID et OBJID_ ?

OBJID est la colonne des vues IFS ; elle n'apparaît pas dans la Method List Attribute. OBJID_ (avec underscore) est le paramètre des procédures New__/Modify__ — c'est lui qu'on référence avec @seq pour récupérer l'identifiant créé par une méthode précédente du job.

Pourquoi l'erreur parle de ROWKEY et pas d'OBJID ?

Le ROWKEY est la colonne technique NOT NULL de la table custom (…_CFT). Quand Cf_New__ ne reçoit pas l'OBJID du parent, il ne peut pas générer le ROWKEY → Oracle bloque l'insert avec ORA-01400.

Ça s'applique aussi à IFS Cloud, ou seulement APPS9/10 ?

Le mécanisme OBJID_ est documenté dans les TechDocs IFS Cloud actuels (Data Migration in Custom — Custom Fields). Le cas réel était en APPS9, la doc de référence est 25R2 : même principe.

Sources

Cas réel issu de la communauté IFS (solution validée sur le thread) + documentation officielle :

ORA-20114 : FND_MODIFIED en migration IFS — « record has already been changed » et le champ OBJVERSION oublié