rdpcrystal-edi-library
Version:
ASCII X12 EDI Library, Create, Parse, Load, Validate, View, Edit, Split, Join And Scrub EDI Data
102 lines (80 loc) • 3.06 kB
JavaScript
/// <reference path="../../lib/RDPCrystalEDILibrary.d.ts" />
const edi = require('../../lib/RDPCrystalEDILibrary').RDPCrystalEDILibrary;
const fs = require('fs');
const enumMap = require('./enummap');
let map = new enumMap();
//Create a new validator
let validator = new edi.EDIValidator();
//Load a 5010 270 validation rules
let validationRules = fs.readFileSync('../../validationrules/5010/Rules_5010_835_005010X221A1.Rules').toString();
validator.EDIRulesFileData = validationRules;
//Set the EDI data to validate and load. This can also be read in from a file
validator.EDIDataString = fs.readFileSync('./5010_835.txt').toString();
console.log("Validating 5010 835 EDI Files");
validator.validate();
console.log("Errors Found");
//Get all errors from the EDI data
for (let i = 0; i < validator.Errors.Count; i++) {
let error = validator.Errors.getItem(i);
console.log(
{
Type: "Error",
Line: error.LineNumber,
Transaction: "",
SnipLevel: map.SnipLevelTypes[error.SnipLevel], //SnipTestLevel Enum
Message: map.MessageTypes[error.Message], //EDIValidationMessage Enum
Loop: error.Loop,
Segment: error.Segment,
Element: error.ElementOrdinal,
Composite: error.CompositeElementOrdinal,
Description: error.Description,
Ordinal: error.SegmentOrdinal
});
}
let doc = validator.EDILightWeightDocument;
//Write out a visual representation of the loaded EDI document
writeDocumentTree(doc.Loops.getItem(0), 0);
function writeDocumentTree(loop, indent) {
if (loop != null) {
for (let i = 0; i < indent; i++) {
process.stdout.write(" ");
}
console.log(loop.Name);
indent++;
writeSegment(loop.Segments, indent);
if (loop.Loops != null) {
for (let i = 0; i < loop.Loops.Count; i++) {
writeDocumentTree(loop.Loops.getItem(i), indent);
}
indent++;
}
}
}
function writeSegment(segments, indent) {
for (let i = 0; i < segments.Count; i++) {
let seg = segments.getItem(i);
for (let i = 0; i < indent; i++) {
process.stdout.write(" ");
}
console.log(seg.Name);
writeElement(seg.Elements, indent);
}
}
function writeElement(elements, indent) {
for (let i = 0; i < elements.Count; i++) {
let elem = elements.getItem(i);
for (let i = 0; i < indent; i++) {
process.stdout.write(" ");
}
if (elem.Composite) {
console.log("Composite");
//Check for composite elements
if (elem.Elements != null && elem.Elements.Count > 0) {
writeElement(elem.Elements, ++indent);
indent--;
}
} else {
console.log("[" + elem.DataValue + "]");
}
}
}