Un build de package completProcessus de compilation et de liaison de tous les objets JDE pour créer un package d'installation ou de mise à jour. échoué un dimanche soir est rarement une défaillance de l'infrastructure CNCConfigurable Network Computing, l'architecture technique sous-jacente de JD Edwards EnterpriseOne. ; dans la grande majorité des cas, il s'agit d'une erreur de spécificationMétadonnées ou définitions d'objets JDE stockées dans la base de données, décrivant leur structure et leur comportement. ou de dépendanceRelation où un objet JDE ou un composant de code nécessite un autre pour fonctionner correctement. causée par le développeur. Se fier au statut générique "Build Failure" dans P9608Application JD Edwards (Work With Package Build Status) affichant l'état des builds de packages. est une erreur qui ajoute des heures d'indisponibilité inutile à une fenêtre de déploiement. Pour comprendre comment dépanner les erreurs de compilation BSFN JDEBusiness Function (Fonction Métier) de JD Edwards, un module de code réutilisable qui encapsule une logique métier spécifique. après un build de package, vous devez contourner la couche applicativePartie d'un système logiciel qui gère la logique métier et les interactions avec l'utilisateur, au-dessus de l'infrastructure. et interroger les fichiers bruts .err et .logFichiers texte contenant les messages d'erreur et les journaux détaillés générés par le compilateur et le processus de build. situés dans le dossier de travail du serveurRépertoire sur le serveur où les fichiers temporaires, les logs et les sorties de compilation sont stockés pendant le processus de build.. Qu'il s'agisse d'un #include manquant dans un en-tête personnalisé ou d'une incompatibilité de structure de données, le compilateurProgramme qui traduit le code source (par exemple, C) en code machine exécutable. fournit la seule vérité objective lorsque le référentiel JDEBase de données centrale qui stocke les spécifications, les objets et les métadonnées de JD Edwards EnterpriseOne. est désynchronisé.
Le passage de l'architecture 32 bits à 64 bits dans Tools Release 9.2.xVersion de l'ensemble d'outils techniques de JD Edwards EnterpriseOne, qui gère l'environnement de développement et d'exécution. a fondamentalement modifié le paysage des erreurs, exposant du code C héritéCode source C plus ancien, souvent écrit pour des architectures 32 bits, qui peut ne pas être compatible avec les environnements 64 bits modernes. qui est resté stable pendant plus d'une décennie mais qui déclenche désormais des violations fatales de transtypage et de taille de pointeurErreurs critiques où la conversion de types de données ou la taille des adresses mémoire est incorrecte, entraînant des plantages.. Nous constatons une augmentation notable des échecs de build lors des mises à niveau 9.2, souvent entre 15 % et 25 %, car les développeurs ignorent les avertissements mathNumericToIntFonction JD Edwards utilisée pour convertir un type de données MATH_NUMERIC en un entier. ou utilisent des types de pointeurs incompatiblesTypes de données utilisés pour stocker des adresses mémoire qui ne correspondent pas aux attentes du compilateur ou de l'architecture (par exemple, 32 bits vs 64 bits). que les anciens compilateurs 32 bits n'avaient pas détectés. La résolution de ces problèmes nécessite une approche chirurgicale du répertoire includeDossier contenant les fichiers d'en-tête (.h) nécessaires à la compilation du code source. et une vérification stricte de la génération NERProcessus de conversion des règles d'événement (NER) définies dans JD Edwards en code source C compilable. avant que le moteur de packageComposant de JD Edwards responsable de l'orchestration du processus de build, de compilation et de liaison des packages. ne démarre sa première liaison de DLLÉtape du build où les fichiers objets compilés sont combinés pour créer des bibliothèques de liens dynamiques (.dll)..
Localisation de la source de vérité dans les logs de build
Voir un build de package échouer dans P9608Application JD Edwards (Work With Package Build Status) affichant l'état des builds de packages. est un rite de passage, mais l'icône de statut rouge est fonctionnellement inutile pour un développeur. Elle indique qu'un seul objetComposant réutilisable dans JD Edwards, comme une fonction métier (BSFN), une application ou un rapport. sur plusieurs milliers a échoué, mais ne fournit aucun contexte sur la présence d'une virgule manquante dans une instruction C ou une défaillance des variables d'environnement du compilateurParamètres système qui influencent le comportement du compilateur, tels que les chemins d'accès aux bibliothèques ou aux exécutables.. L'application Work with Package Build StatusNom de l'application JD Edwards (P9608) utilisée pour surveiller l'état des builds de packages. n'est qu'un tableau de bord de haut niveauInterface utilisateur qui présente un résumé des informations sans entrer dans les détails techniques. ; les véritables preuves médico-légales résident exclusivement sur le système de fichiers de la machine de buildL'ensemble des fichiers et répertoires stockés sur le serveur où le package est compilé et lié..
Pour aller au-delà de l'échec binaire, mappez un lecteur au répertoire \\buildserver\E920\packages\PACKAGENAME\compile. C'est là que le moteur de build d'EnterpriseOneComposant de JD Edwards qui gère le processus de compilation et de liaison des objets pour créer un package. décharge la sortie brute du compilateur Microsoft Visual C++Compilateur C++ de Microsoft, souvent utilisé pour les builds JD Edwards sur des systèmes Windows. ou de la suite de compilateurs LinuxEnsemble d'outils de compilation (comme GCC) utilisés pour les builds JD Edwards sur des serveurs Linux. pertinente. Dans ce dossier, le fichier stderr.logFichier journal qui capture les messages d'erreur standard générés par le compilateur ou le programme. est votre cible principale, car il capture les numéros de ligne et les codes d'erreur spécifiques—tels que C2065Code d'erreur du compilateur C++ indiquant un identificateur non déclaré, souvent une variable ou une fonction non définie. pour les identificateurs non déclarés—que les logs d'exécution JDEFichiers journaux générés par JD Edwards pendant l'exécution des applications, des rapports ou des fonctions métier. masquent généralement. Si ce fichier est vide, le stdout.logFichier journal qui capture la sortie standard d'un programme ou d'un compilateur, y compris les messages d'information. révèle si le processus de build a échoué pendant la phase de pré-traitementPremière étape de la compilation où le préprocesseur traite les directives comme #include et les macros. ou si le système n'a tout simplement pas pu localiser l'exécutable cl.exeL'exécutable du compilateur C/C++ de Microsoft Visual Studio..
Un triage efficace commence par la distinction entre une erreur de syntaxe de compilationErreur détectée par le compilateur due à une violation des règles grammaticales du langage de programmation. et un échec de résolution de symbole à la liaisonErreur survenant lors de l'étape de liaison, lorsque le lieur ne peut pas trouver la définition d'une fonction ou d'une variable référencée.. Une erreur de compilation pointe généralement vers un fichier .c ou .h.c est un fichier de code source C, .h est un fichier d'en-tête C/C++ contenant des déclarations. spécifique où un développeur a manqué un typedefMot-clé en C/C++ utilisé pour créer un alias pour un type de données existant. ou a mal saisi un membre de structure de donnéesÉlément individuel au sein d'une structure de données (struct) en C/C++. lors d'une mise à niveau 9.2. Inversement, une erreur de liaison apparaît à la fin du log comme un "symbole externe non résoluIndique que le lieur n'a pas pu trouver la définition d'une fonction ou d'une variable déclarée mais non implémentée.", signalant que, bien que le code soit syntaxiquement correct, l'éditeur de liensProgramme qui combine les fichiers objets compilés et les bibliothèques pour créer un exécutable ou une DLL. ne peut pas trouver le code objet d'une BSFNBusiness Function (Fonction Métier) de JD Edwards, un module de code réutilisable qui encapsule une logique métier spécifique. appelée depuis une autre DLLDynamic Link Library, une bibliothèque de code exécutable qui peut être partagée par plusieurs programmes.. Lors d'une mise à niveau typique impliquant 300 objets impactésObjets JD Edwards (BSFN, applications, etc.) qui ont été modifiés ou qui dépendent d'autres objets modifiés., la majorité des échecs de build—souvent plus des trois quarts—proviennent de ces incompatibilités d'en-têteDésaccords entre les déclarations de fonctions ou de structures dans les fichiers d'en-tête et leurs définitions réelles. plutôt que de défauts logiques réels.
Recherchez le code de sortie 2Valeur retournée par un programme pour indiquer son état de terminaison ; 2 signifie souvent une erreur fatale. dans les logs, qui indique une erreur fatale ayant arrêté la compilation d'un fichier C spécifique. Si vous constatez des échecs sur plusieurs BSFNBusiness Function (Fonction Métier) de JD Edwards, un module de code réutilisable qui encapsule une logique métier spécifique., vérifiez le sous-répertoire includeDossier spécifique à un package ou un module, contenant les fichiers d'en-tête (.h) nécessaires à sa compilation. dans le dossier du package pour vous assurer que les fichiers .hFichiers d'en-tête en C/C++ contenant les déclarations de fonctions, de structures et de variables. ont été correctement extraits des spécifications F98711 et F98712Tables JD Edwards stockant les spécifications des objets, y compris les informations sur les fichiers d'en-tête.. J'ai vu des sessions de débogage de plusieurs heures être réduites à quelques minutes simplement en vérifiant que le fichier JDE.HLe fichier d'en-tête principal de JD Edwards, contenant des définitions et des déclarations essentielles pour le développement. dans le dossier de compilation correspondait bien à la version de l'environnement de développementEnsemble d'outils et de configurations logicielles utilisés par les développeurs pour créer, tester et déboguer des applications.. Si les tailles de fichiers diffèrent de quelques kilo-octets seulement, vos spécifications localesSpécifications d'objets stockées sur le poste de travail du développeur, qui peuvent différer de celles du serveur central. et le serveur de buildServeur dédié à la compilation et à la liaison des objets JD Edwards pour créer des packages. sont désynchronisés, nécessitant une génération complète des spécificationsProcessus de régénération de toutes les spécifications d'objets à partir du référentiel central pour assurer la cohérence. avant la prochaine tentative de package.

Résolution des dépendances d'en-tête et de fichiers include
Un build local réussi sur un client FATCompilation réussie d'un objet JD Edwards sur le poste de travail local d'un développeur (client lourd). crée fréquemment un faux sentiment de sécurité. Lorsque le build du serveur échoue avec fatal error C1083: Cannot open include file: 'b550001.h': No such file or directory, le problème est rarement le code lui-même, mais l'accessibilité de la source. Si la chaîne de dépendance #includeSérie de fichiers d'en-tête inclus les uns dans les autres, formant une hiérarchie de dépendances. est rompue parce que le fichier .hFichier d'en-tête en C/C++ contenant les déclarations de fonctions, de structures et de variables. n'existe que dans le dossier local \include\ du développeur et n'a jamais été enregistré dans le référentiel d'objets centralBase de données centrale qui stocke les spécifications, les objets et les métadonnées de JD Edwards EnterpriseOne., le compilateur côté serveurCompilateur exécuté sur le serveur de build, qui compile le code pour le package final. échouera à chaque fois. Vous devez confirmer que l'en-tête est physiquement présent sur le serveur de déploiementServeur où les packages JD Edwards sont installés et exécutés. et correctement mappé dans la F98611Table JD Edwards qui stocke les informations de mappage des objets aux bibliothèques (DLL). avant de lancer le prochain build.
Les dépendances circulairesSituation où deux ou plusieurs composants (par exemple, fichiers d'en-tête) se référencent mutuellement, créant une boucle. représentent un mode de défaillance plus complexe qui échappe souvent à la détection lors des builds BSFN isolés dans OWMCompilation d'une seule fonction métier (BSFN) via l'Object Workbench Manager (OWM) sur un poste de travail local.. Sur un poste de travail local, un développeur pourrait compiler B550001 qui référence B550002, et puisque les deux en-têtes existent localement suite à des travaux antérieurs, l'éditeur de liensProgramme qui combine les fichiers objets compilés et les bibliothèques pour créer un exécutable ou une DLL. les résout sans problème. Sur le serveur EnterpriseLe serveur principal de JD Edwards qui exécute les applications, les processus batch et les fonctions métier., la séquence de build multi-threadéeProcessus de compilation où plusieurs objets sont traités simultanément par différents threads pour accélérer le build. peut tenter de compiler B550002 avant que l'en-tête de B550001 ne soit entièrement mis en scène. Cette condition de concurrenceSituation où le résultat d'une opération dépend de l'ordre non déterministe d'exécution de plusieurs threads ou processus. conduit à des échecs intermittents qui apparaissent comme une corruption des spécificationsAltération ou incohérence des métadonnées d'un objet JD Edwards stockées dans la base de données. mais sont en réalité des défauts architecturauxProblèmes inhérents à la conception ou à la structure du code ou du système. dans la logique d'imbrication des en-têtesManière dont les fichiers d'en-tête sont inclus les uns dans les autres, affectant l'ordre de compilation..
Pour résoudre ces problèmes, contournez les logs de haut niveau et inspectez le dossier Include dans le répertoire de staging du packageDossier temporaire sur le serveur de build où les fichiers du package sont préparés avant la compilation finale. sur le serveur de buildServeur dédié à la compilation et à la liaison des objets JD Edwards pour créer des packages.. Si un en-tête personnalisé est manquant dans ce répertoire, le script de build globalScript automatisé qui orchestre l'ensemble du processus de build de package, y compris l'extraction des spécifications. n'a pas réussi à l'extraire des spécifications F9860Table JD Edwards stockant les spécifications des objets, y compris les informations sur les fichiers d'en-tête., généralement en raison d'une incompatibilité de statut ou d'un enregistrement incomplet. Dans un environnement mature avec plus de 10 000 objets personnalisés, ces lacunes de dépendance représentent environ un cinquième de tous les échecs de build de package. Vérifier que chaque fichier .h personnaliséFichier d'en-tête (.h) créé spécifiquement pour des personnalisations JD Edwards. est explicitement défini dans l'Object LibrarianComposant de JD Edwards qui gère les définitions et les propriétés des objets. et visible par le processus de build côté serveurL'ensemble des opérations de compilation et de liaison exécutées sur le serveur de build. est une étape obligatoire pour tout environnement 9.2 stable.
Incompatibilités de structure de données et corruption des spécifications
Lorsqu'un build échoue avec "member of struct has no name" ou "conflicting types", la première vérification est la table F98606Table JD Edwards qui stocke les informations sur les membres des structures de données (DSTR).. Cette table suit le nombre de membres et la séquence des éléments de données pour chaque structure de données (DSTR)Data Structure (Structure de Données) dans JD Edwards, un conteneur pour un groupe de variables liées. du système. Un échec courant se produit lorsqu'un développeur ajoute un paramètre à une DSTRData Structure (Structure de Données) dans JD Edwards, un conteneur pour un groupe de variables liées. mais ne parvient pas à synchroniser le typedef de style CDéfinition de type en C qui crée un alias pour une structure de données, souvent utilisée pour simplifier le code.. Si le compte F98606 indique 14 membres mais que votre fichier .hFichier d'en-tête en C/C++ contenant les déclarations de fonctions, de structures et de variables. n'en définit que 13, le compilateurProgramme qui traduit le code source (par exemple, C) en code machine exécutable. générera une erreur C2027 ou C2079Codes d'erreur du compilateur C++ indiquant des problèmes avec les déclarations de structure ou les membres de structure. pendant la phase de liaison du build du serveurÉtape du processus de build sur le serveur où les fichiers objets sont liés pour former des DLL..
L'outil Generate Header dans OWMFonction de l'Object Workbench Manager (OWM) qui génère automatiquement le fichier d'en-tête (.h) pour une structure de données ou une fonction métier. est le seul moyen de garantir que le fichier .hFichier d'en-tête en C/C++ contenant les déclarations de fonctions, de structures et de variables. correspond aux spécifications de l'objet F9860Métadonnées d'un objet JD Edwards stockées dans la table F9860, décrivant sa structure et son comportement.. Bien qu'il s'agisse d'une exigence fondamentale, il reste l'étape la plus fréquemment ignorée dans le cycle de vie du développementEnsemble des phases par lesquelles passe un logiciel, de la conception à la maintenance.. Les développeurs éditent souvent manuellement le fichier .h pour gagner du temps, omettant les commentaires spécifiques de remplissage ou d'alignement que l'ensemble d'outils JDE attend. Cette intervention manuelle entraîne des décalages d'alignement qui pourraient ne pas faire planter un build de client lourd localCompilation d'un objet JD Edwards sur le poste de travail local d'un développeur (client lourd)., mais provoqueront une violation de mémoireErreur où un programme tente d'accéder à une zone de mémoire qu'il n'est pas autorisé à utiliser, entraînant un plantage. sur un serveur d'entreprise Linux ou AIXServeur JD Edwards exécutant un système d'exploitation Linux ou AIX, souvent plus strict sur l'alignement mémoire. où l'alignement de la mémoireDisposition des données en mémoire à des adresses spécifiques pour optimiser les performances et éviter les erreurs. est strictement appliqué.
Les divergences où une BSFNBusiness Function (Fonction Métier) de JD Edwards, un module de code réutilisable qui encapsule une logique métier spécifique. compile parfaitement sur un poste de travail local mais échoue lors d'un build de package complet ou de mise à jourProcessus de compilation et de liaison de tous les objets JDE pour créer un package d'installation ou de mise à jour. pointent directement vers des spécifications obsolètes dans les Objets CentrauxMétadonnées d'objets JD Edwards stockées dans le référentiel central qui ne sont pas à jour.. Lorsque le moteur de build de packageComposant de JD Edwards responsable de l'orchestration du processus de build, de compilation et de liaison des packages. extrait les spécifications vers le serveur de buildServeur dédié à la compilation et à la liaison des objets JD Edwards pour créer des packages., il s'appuie sur la version enregistrée dans la base de données du serveur de déploiementBase de données associée au serveur où les packages JD Edwards sont installés et exécutés.. Si un développeur a testé localement mais a oublié d'enregistrer la DSTRData Structure (Structure de Données) dans JD Edwards, un conteneur pour un groupe de variables liées. avec la BSFNBusiness Function (Fonction Métier) de JD Edwards, un module de code réutilisable qui encapsule une logique métier spécifique., le build du serveur utilise l'ancienne structure. Cela entraîne une erreur d'incompatibilité de paramètre dans le log de buildFichier journal qui enregistre les messages et les erreurs générés pendant le processus de compilation et de liaison d'un package. qu'il est impossible de déboguer en regardant uniquement le code local.
Recherchez les fichiers de 0 KoFichiers vides, souvent le signe qu'un processus de génération ou de conversion a échoué. dans les répertoires source ou includeDossiers contenant respectivement le code source (.c) et les fichiers d'en-tête (.h) d'un projet. du dossier du package sur le serveur d'entrepriseLe serveur principal de JD Edwards qui exécute les applications, les processus batch et les fonctions métier.. Un fichier source tronqué indique que le processus BusBuildProcessus JD Edwards responsable de la conversion des spécifications d'objets en code source C et de la compilation. a échoué pendant la phase de conversion des spécifications en code sourceÉtape où les métadonnées des objets JD Edwards sont transformées en fichiers de code source C compilables.. Cela se produit généralement lorsque le référentielBase de données centrale qui stocke les spécifications, les objets et les métadonnées de JD Edwards EnterpriseOne. contient des enregistrements orphelinsEnregistrements dans une base de données qui n'ont plus de lien valide avec d'autres enregistrements essentiels. ou un blob corrompu dans la table F98743Données binaires volumineuses (Binary Large Object) altérées dans la table JD Edwards F98743, qui stocke les spécifications d'objets.. Si la conversion échoue, le compilateurProgramme qui traduit le code source (par exemple, C) en code machine exécutable. trouve un fichier vide et termine le build pour l'ensemble de cette DLLDynamic Link Library, une bibliothèque de code exécutable qui peut être partagée par plusieurs programmes., entraînant souvent la défaillance de dizaines de fonctions non liées dans le processus.
Naviguer dans les pièges de la compilation 32 bits vers 64 bits
Tools Release 9.2.5Version de l'ensemble d'outils techniques de JD Edwards EnterpriseOne, qui gère l'environnement de développement et d'exécution. et les versions ultérieures ont déplacé le runtime JDEEnvironnement d'exécution de JD Edwards, qui gère l'exécution des applications et des fonctions métier. vers une architecture 64 bitsConception de processeur et de système d'exploitation qui utilise des adresses mémoire de 64 bits, permettant de gérer plus de mémoire., rendant potentiellement instables des milliers de lignes de code C héritéCode source C plus ancien, souvent écrit pour des architectures 32 bits, qui peut ne pas être compatible avec les environnements 64 bits modernes.. Le point de défaillance le plus courant est l'hypothèse qu'un pointeur et un entierUn pointeur stocke une adresse mémoire, un entier stocke une valeur numérique. Leur taille diffère en 32 et 64 bits. partagent la même largeur de bits. Dans les versions 32 bits, les deux étaient de 4 octets. Dans l'environnement 64 bits actuel, les adresses mémoire occupent 8 octets. Lorsque les développeurs tentent de transtyper un pointeur LPVOIDType de pointeur générique en C/C++ (Long Pointer to VOID) qui peut pointer vers n'importe quel type de données. en un long ou int 32 bitsTypes de données entiers qui occupent 32 bits (4 octets) en mémoire., le compilateurProgramme qui traduit le code source (par exemple, C) en code machine exécutable. émet un avertissement C4311Avertissement du compilateur C++ indiquant une troncature de pointeur, où un pointeur 64 bits est converti en un type 32 bits. pour troncature de pointeurPerte de données se produisant lorsqu'un pointeur de grande taille (64 bits) est converti en un type plus petit (32 bits), coupant les bits de poids fort.. Ignorer cet avertissement conduit à une corruption de la mémoireAltération des données stockées en mémoire, souvent due à un accès incorrect ou à des pointeurs invalides. car les bits de poids fort de l'adresse sont ignorés, ce qui fait que la BSFNBusiness Function (Fonction Métier) de JD Edwards, un module de code réutilisable qui encapsule une logique métier spécifique. référence des emplacements mémoire invalides.
La refactorisationProcessus de restructuration du code existant sans modifier son comportement externe, pour améliorer sa qualité ou sa compatibilité. de ces BSFNBusiness Function (Fonction Métier) de JD Edwards, un module de code réutilisable qui encapsule une logique métier spécifique. nécessite de remplacer les déclarations long héritéesUtilisation du type de données 'long' en C/C++ qui, dans les systèmes 32 bits, était souvent utilisé pour les pointeurs. par ID ou intTypes de données entiers. 'ID' est un type spécifique à JDE, 'int' est un type C standard. pour les variables standard, et d'utiliser INT_PTRType de données entier dont la taille est garantie d'être suffisante pour contenir un pointeur sur l'architecture actuelle (32 ou 64 bits). pour toute variable destinée à contenir une adresse mémoire. C'est une exigence pour le modèle de mémoire 64 bitsFaçon dont un système d'exploitation 64 bits gère l'adressage et l'accès à la mémoire.. Nous rencontrons fréquemment ce problème dans la gestion de cache personnaliséeImplémentation spécifique de la gestion de la mémoire cache dans JD Edwards pour optimiser l'accès aux données. où un pointeur vers un compartiment de cacheSegment ou zone de mémoire allouée dans le cache pour stocker des données temporaires. est stocké dans un membre de structure de données. Si ce membre a été défini comme un entier de 4 octets dans le Data DictionaryRéférentiel central de JD Edwards qui définit les propriétés de toutes les données utilisées dans le système., le pointeur de 8 octets sera tronqué, et l'appel jdeCacheFetchFonction JD Edwards utilisée pour récupérer des données d'un cache mémoire. échouera avec une violation de mémoireErreur où un programme tente d'accéder à une zone de mémoire qu'il n'est pas autorisé à utiliser, entraînant un plantage..
La gestion de la précision au sein des structures MATH_NUMERICType de données numérique propriétaire de JD Edwards, conçu pour une précision élevée dans les calculs financiers. change également dans un contexte 64 bits. Bien que la structure elle-même reste de 36 octets, la manière dont le compilateurProgramme qui traduit le code source (par exemple, C) en code machine exécutable. aligne les membres internes sur des limites de 8 octets peut entraîner des résultats inattendus si vous utilisez la manipulation directe de la mémoire au lieu des API JDE standardInterfaces de programmation d'applications fournies par JD Edwards pour interagir avec le système de manière sécurisée et standardisée.. Vous devez utiliser MathCopyFonction JD Edwards utilisée pour copier des valeurs entre des variables de type MATH_NUMERIC. et ParseNumericStringFonction JD Edwards utilisée pour convertir une chaîne de caractères en un type de données MATH_NUMERIC. exclusivement. Tenter d'utiliser des fonctions mathématiques C standardFonctions mathématiques fournies par la bibliothèque standard du langage C (par exemple, sin, cos, sqrt). en transtypant les membres MATH_NUMERICType de données numérique propriétaire de JD Edwards, conçu pour une précision élevée dans les calculs financiers. en doublesType de données à virgule flottante en C/C++ qui représente des nombres réels avec une double précision. entraînera souvent une perte de précision ou des erreurs d'arrondiInexactitudes dans les calculs numériques, où les résultats sont légèrement différents de la valeur réelle. qui n'étaient pas présentes dans le runtime 32 bitsEnvironnement d'exécution de JD Edwards configuré pour une architecture 32 bits..
Enfin, vérifiez vos dépendances externes. Si votre BSFNBusiness Function (Fonction Métier) de JD Edwards, un module de code réutilisable qui encapsule une logique métier spécifique. se lie à une DLL tierceBibliothèque de liens dynamiques (.dll) fournie par un fournisseur externe, non développée par JD Edwards.—courant dans les personnalisations d'interface de balance ou d'étiquetage de fret—cette bibliothèque doit être compatible 64 bits. Un fichier .lib 32 bitsFichier de bibliothèque statique (.lib) compilé pour une architecture 32 bits. fera en sorte que l'éditeur de liensProgramme qui combine les fichiers objets compilés et les bibliothèques pour créer un exécutable ou une DLL. génère une erreur LNK2001 ou LNK1112Codes d'erreur de l'éditeur de liens de Microsoft Visual C++ indiquant des problèmes de symboles non résolus ou d'incompatibilité d'architecture. pendant le build du package. Vous ne pouvez pas relier ces architectures au sein du même processus. Si une version 64 bits de la bibliothèque tierce n'est pas disponible, vous devez déplacer cette logique vers un service externe et l'appeler via une orchestration AISUtilisation du serveur d'intégration d'applications (AIS) de JD Edwards pour coordonner des services externes. ou un service métierComposant de JD Edwards qui expose la logique métier via des services web, permettant l'intégration avec d'autres systèmes. pour éviter de faire planter le noyau de l'objet d'appelLe composant principal ou le processus d'exécution de l'objet JD Edwards qui tente d'appeler la DLL externe..

Diagnostic des symboles externes non résolus et des erreurs de l'éditeur de liens
Lorsque le log de build du package génère l'erreur LNK2019Erreur de l'éditeur de liens de Microsoft Visual C++ indiquant un symbole externe non résolu., le compilateurProgramme qui traduit le code source (par exemple, C) en code machine exécutable. a terminé sa tâche, mais l'éditeur de liensProgramme qui combine les fichiers objets compilés et les bibliothèques pour créer un exécutable ou une DLL. est bloqué. Vous avez un fichier d'en-tête valideFichier .h qui déclare correctement une fonction ou une variable. déclarant la fonction, mais l'éditeur de liens ne peut pas trouver le code machine compiléCode binaire exécutable généré par le compilateur à partir du code source. dans la bibliothèque spécifiéeFichier (.lib ou .dll) où le lieur s'attend à trouver la définition d'un symbole.. Dans un environnement 9.2 typique, cela se produit le plus souvent après qu'un développeur réaffecte une fonction métier d'une DLL personnalisée comme CCUSTOMBibliothèque de liens dynamiques (.dll) créée spécifiquement pour des personnalisations JD Edwards. à une DLL standard comme CALLBSFNBibliothèque de liens dynamiques (.dll) fournie par JD Edwards, contenant des fonctions métier standard.. Si les spécifications de l'objet parent dans la F9860Métadonnées de l'objet appelant stockées dans la table F9860, qui incluent la référence à la DLL de la fonction appelée. pointent toujours vers l'ancienne DLL, l'éditeur de liens recherche la mauvaise bibliothèque et échoue, même si le code source lui-même est syntaxiquement parfait.
L'intégration de bibliothèques C++ tiercesBibliothèques de code C++ développées par des fournisseurs externes, utilisées pour étendre les fonctionnalités de JD Edwards. pour une logique spécialisée—telle que le chiffrement avancé ou les API d'expédition propriétairesInterfaces de programmation d'applications spécifiques à un fournisseur de services d'expédition.—introduit une couche secondaire de risque de liaison. Ces fichiers .lib externesFichiers de bibliothèque statique (.lib) fournis par des tiers, nécessaires à la liaison du code. doivent être explicitement définis dans les drapeaux de l'éditeur de liensOptions ou paramètres passés à l'éditeur de liens pour contrôler son comportement, comme les chemins de recherche de bibliothèques. ou dans la section [JDE_CPP_FLAGS] du JDE.INISection du fichier de configuration JDE.INI qui contient des drapeaux spécifiques pour le compilateur C++ et l'éditeur de liens. de la machine de buildServeur dédié à la compilation et à la liaison des objets JD Edwards pour créer des packages.. S'il manque une référence à une bibliothèque comme libcurl.libBibliothèque C/C++ populaire pour effectuer des transferts de données via divers protocoles réseau. ou à un wrapper personnaliséCouche de code qui adapte une interface existante pour la rendre compatible avec un autre système ou langage., le build se terminera pendant la phase de liaison finale de la DLLDernière étape du processus de build où tous les composants sont liés pour créer la bibliothèque de liens dynamiques (.dll) finale.. J'ai vu des retards de deux jours ou plus dans les mises en production parce qu'un serveur de buildServeur dédié à la compilation et à la liaison des objets JD Edwards pour créer des packages. a été remplacé et que les configurations manuelles des chemins de l'éditeur de liens dans le JDE.INI n'ont pas été migrés de l'ancien serveur de déploiementServeur où les packages JD Edwards sont installés et exécutés..
Le scénario le plus dangereux est un échec de liaison silencieuxErreur de liaison qui ne provoque pas l'arrêt immédiat du build, mais entraîne une DLL non fonctionnelle ou manquante. où le rapport UBERapport généré par l'Universal Batch Engine (UBE) de JD Edwards, souvent utilisé pour les processus batch. affiche un "Avertissement" mais le package se termine. Vous devez vérifier le dossier 'bin' du packageRépertoire sur le serveur de déploiement où les fichiers binaires exécutables (DLL) du package sont stockés. sur le serveur de déploiementServeur où les packages JD Edwards sont installés et exécutés. pour confirmer que l'horodatage de la .dllDate et heure de la dernière modification d'un fichier DLL, indiquant quand il a été compilé et lié. correspond à l'heure de début du build. Si la .dll est manquante ou affiche une date ancienne, l'étape de liaison a échoué. Pour un référentiel d'entreprise de 10 000 objetsBase de données centrale de JD Edwards contenant un grand nombre d'objets personnalisés et standard., un seul symbole non résoluRéférence à une fonction ou une variable dont la définition n'a pas été trouvée par l'éditeur de liens. dans une DLL principaleBibliothèque de liens dynamiques (.dll) essentielle, dont dépendent de nombreuses autres fonctions métier. peut empêcher des dizaines de BSFN en avalFonctions métier (BSFN) qui dépendent d'une autre BSFN ou DLL spécifique. de se charger à l'exécution, conduisant à la redoutable erreur "Business Function Load Failed"Message d'erreur indiquant qu'une fonction métier JD Edwards n'a pas pu être chargée en mémoire lors de l'exécution. dans le jdedebug.logFichier journal de débogage de JD Edwards, qui enregistre des informations détaillées sur l'exécution des processus.. Vérifiez la table F9862Table JD Edwards qui stocke les informations de mappage des objets aux bibliothèques (DLL). pour vous assurer que l'objet est mappé à la bonne DLL parenteLa bibliothèque de liens dynamiques (.dll) à laquelle un objet JD Edwards est censé appartenir ou être lié. avant de relancer le build.
Échecs de génération NER et synchronisation du code source
Un échec de build de package pour une Named Event Rule (NER)Règle d'événement nommée dans JD Edwards, une logique métier définie graphiquement qui est ensuite convertie en code C. provient souvent d'une rupture dans la phase de pré-compilationÉtape initiale du processus de build où les règles d'événement sont converties en code source C. où les règles d'événementLogique métier définie dans JD Edwards, souvent via un concepteur graphique, qui s'exécute en réponse à des événements. sont traduites en