Je publierai mon deuxième article sur le calendrier de l'Avent 2019, qui est membre des membres informatiques de l'entreprise! C'est l'article que j'ai écrit la dernière fois, qui sert également d'auto-introduction. https://qiita.com/tom-k7/items/d8ef19dccb42891a0698
J'écrirai aussi cette fois sur Outsystems. En ce moment, je développe un outil de conversion CSV (application web) avec Outsystems, donc Je vais partager comment implémenter la lecture et la sortie CSV avec Outsystems, et le mur que j'ai rencontré pendant le développement.
Ce que je veux faire avec l'outil que je développe maintenant, c'est Fichiers CSV téléchargés à partir des sites de diverses autres entreprises Je souhaite le convertir en fichier CSV dans un format pouvant être importé dans le système utilisé en interne. Alors, lisez le fichier CSV téléchargé et Outsystems permet de convertir et de sortir un nouveau fichier CSV. Forge Utilisez le composant Forge de CSVUtil pour lire et générer des fichiers CSV. https://www.outsystems.com/forge/component-overview/636/csvutil
Téléchargez-le, installez-le dans Service Studio et ajoutez-le à Dependency.
Je vais faire un écran avant de faire le traitement CSV.
Tout d'abord, vous devez télécharger le fichier CSV à lire. Il y a deux manières. ① Utilisez Upload ② Utilisez RichWidgets \ Popup_Upload
Cette fois, ① est mieux, donc j'utiliserai Upload.
Spécifiez l'action Convertir le serveur qui exécute le traitement de conversion dans la Destination du bouton Convertir, Exécutez le processus de conversion dans cette action serveur.
Désormais, c'est le traitement CSV du sujet principal. Tout d'abord, implémentez la lecture du fichier CSV.
Définissez une variable locale de type CSVLoadConfig à définir lors de la lecture de CSV et définissez-la avec Assign. Les principaux paramètres sont les suivants.
--Encode: code de caractère du fichier CSV. Réglez utf-8, shift-jis, etc. --IsSkipHeader: True si le fichier CSV a une ligne d'en-tête, False sinon. --IsIgnoreColumnChange: ~~ False si une erreur se produit lorsque le nombre de colonnes ne correspond pas, True si aucune erreur ne se produit. ~~ Je l'ai essayé et c'était différent. .. Ce champ est un mystère "(-" "-)" --FieldDelimiter: Délimiteur entre les colonnes. Plusieurs caractères peuvent être saisis, mais seul le premier caractère est appliqué. --IsDisableDoubleQuote: False si la colonne est entourée de guillemets doubles, True sinon.
Définissez une liste d'enregistrements d'entité / structure qui stocke les résultats de la lecture de CSV avec des variables locales. Cette fois, j'ai créé une liste d'enregistrement de la structure appelée Source CSV que j'ai créée.
Appelez l'action de serveur LoadCSVRecordList définie dans le CSVUtil de Forge Les arguments sont le contenu de téléchargement créé à l'écran et la variable locale CSVLoadConfig. Définissez le résultat de la conversion de RecordList d'entité / structure avec ToObject (). Ceci termine le chargement.
Ensuite, nous implémenterons également la sortie CSV.
Définissez une variable locale de type CSVExportConfig à définir au moment de la sortie CSV et définissez-la avec Assign. Les principaux paramètres sont les suivants.
--IsShowHeader: True si vous souhaitez inclure la ligne d'en-tête dans le fichier CSV, False sinon. --FieldDelimiter: Délimiteur entre les colonnes. Plusieurs caractères peuvent être saisis, mais seul le premier caractère est appliqué. --EncodeMode: s'il faut mettre la colonne entre guillemets doubles. Définissez l'un des paramètres auto / quote / noquote / noquote_nocheck comme chaîne de caractères. --LineSeparator: code de saut de ligne. Réglez Chr (13) pour CR, Chr (10) pour LF et Chr (13) + Chr (10) pour CRLF.
Définissez une liste d'enregistrements d'entité / structure pour stocker les données CSV de sortie avec des variables locales. L'image est une liste d'enregistrements de structure appelée CSV de sortie que j'ai créée.
Pour la RecordList de sortie définie dans ↑, définissez toute la RecordList contenant les données chargées. À ce moment-là, vous pouvez convertir les valeurs, les combiner, supprimer celles qui ne sont pas nécessaires et les définir pour la sortie. Dans l'image, ListAppendAll est utilisé pour simplement combiner les éléments, mais en réalité, diverses conversions sont effectuées ici. Si vous voulez faire quelque chose d'assez compliqué, vous pouvez boucler dans For Each.
Appelez l'action de serveur ExportRecordList2CSV définie dans CSVUtil Définissez le résultat de la conversion RecordList de Entity / Structure avec ToObject () et la variable locale de CSVExportConfig dans l'argument.
Enfin, transmettez les données CSV créées par ExportRecordList2CSV au widget Télécharger et terminez.
Ce qui précède est la méthode de mise en œuvre, mais je voudrais partager d'autres murs que j'ai frappés en utilisant CSVUtil.
La méthode de clôture avec double guillemet dans "Export Config Settings" a déjà été décrite, Il m'a fallu un certain temps pour y arriver. Parce que le nom de l'élément est EncodeMode. .. Je pense que c'est un code de caractère. Je ne sais pas. .. C'était une ww douce-amère
Au fait, si vous spécifiez "quote" dans CSVExportConfig.EncodeMode, il sera entouré de guillemets doubles!
J'ai eu cette erreur en appelant l'action de serveur ExportRecordList2CSV de CSVUtil.
Object reference not set to an instance of an object.
NullReferenceException. C'est Nurpo à Java.
Comme seul le type de base est utilisé comme élément CSV, existe-t-il un type de base Null dans Outsystems? C'était comme ça.
Donc, cette erreur ne se connecte pas plus en détail, donc j'étais perdu en essayant diverses choses. Je n'ai pas d'autre choix que de regarder à l'intérieur de l'extension! C'est devenu. J'ai téléchargé l'extension avec, ouvert sln dans Visual Studio et suivi la source, mais je n'ai pas pu en comprendre la cause. Au fait, j'ai créé les données que j'ai réellement transmises sur C # et les ai exécutées! (^^)! (C'était sobre et ennuyeux)
À la suite de cela, il s'est avéré qu'il s'agissait d'une exception NullReferenceException en raison de l'absence d'une colonne des données transmises. Je me demandais quelle était cette colonne, mais c'était une colonne qui faisait quelque chose de spécial lors de la conversion des données.
Je suis désolé si l'explication n'a pas de sens <m (__) m> Par exemple, si la valeur des données lues est "1", définissez quelque chose comme "études supérieures" dans le fichier JSON en tant que paire clé / valeur après la conversion. Importez le fichier JSON en tant que ressources dans le module.
Lisez le fichier JSON avec JSONDeserialize, utilisez le HashTable de Forge pour le stocker en mémoire en tant que paire clé / valeur, Au moment de la conversion, le processus consistait à définir la valeur obtenue à partir du HashTable.
Forge Hashable: https://www.outsystems.com/forge/component-overview/21/hashtable
Comme c'est dans le CSV que sont lues les données qui ne sont pas dans la clé définie dans JSON (comme "5" ou des caractères vides dans ↑ JSON), le résultat de get devient Null, C'était une NullReferenceException parce que je l'ai passée à ExportRecordList2CSV.
Si je l'implémente normalement avec Outsystems, Null ne sera pas inclus dans le type Text, J'ai appris que Null peut être entré via Extension, et j'ai pensé que c'était une expérience d'apprentissage.
Lecture / sortie CSV expliquée dans Outsystems. J'espère que cela aidera ceux qui utilisent CSVUtil et ceux qui se heurtent désormais au même mur.