External module function error: "Cannot read properties of undefined (reading 'split')"

Describe the issue/error/question

I am using the following external module RDP Crystal EDI Library in a isolated code node to parse EDI transaction data. I am able to run this code locally, outside of n8n, successfully. When trying to run this code from a Desktop instance of a n8n code module I run into the error below. The validator.validate function from this library throws this error. I am able to use other functions from this library. The following is a link to the rules file used in the code.

What is the error message (if any)?

TypeError: Cannot read properties of undefined (reading 'split')
    at ExecutionError.populateFromStack (/Applications/n8n.app/Contents/Resources/app/node_modules/n8n-nodes-base/dist/nodes/Code/ExecutionError.js:20:38)
    at new ExecutionError (/Applications/n8n.app/Contents/Resources/app/node_modules/n8n-nodes-base/dist/nodes/Code/ExecutionError.js:17:14)
    at Sandbox.runCodeAllItems (/Applications/n8n.app/Contents/Resources/app/node_modules/n8n-nodes-base/dist/nodes/Code/Sandbox.js:60:19)
    at async Object.execute (/Applications/n8n.app/Contents/Resources/app/node_modules/n8n-nodes-base/dist/nodes/Code/Code.node.js:74:25)
    at async Workflow.runNode (/Applications/n8n.app/Contents/Resources/app/node_modules/n8n-workflow/dist/src/Workflow.js:645:28)
    at async /Applications/n8n.app/Contents/Resources/app/node_modules/n8n-core/dist/src/WorkflowExecute.js:562:53

Please share the workflow (Single code module)

const edi = require('rdpcrystal-edi-library');

const fs = require('fs');

//Load 5010 834 input file
const edi834input = "ISA*00*……….*01*SECRET….*ZZ*SUBMITTERS.ID..*ZZ*RECEIVERS.ID…*030101*1253*^*00501*000000905*1*T*:~\n"+
"GS*Hk*SENDER CODE*RECEIVERCODE*19991231*0802*1*X*005010X279A1~\n"+
"ST*271*1234*005010X279A1~\n"+
"BHT*0022*13*10001234*20060501*1319~\n"+
"HL*1**20*1~\n"+
"NM1*PR*2*ABC COMPANY*****PI*842610001~\n"+
"HL*2*1*21*1~\n"+
"NM1*1P*2*BONE AND JOINT CLINIC*****SV*2000035~\n"+
"HL*3*2*22*0~\n"+
"TRN*1*93175-012547*9877281234~\n"+
"NM1*IL*1*SMITH*ROBERT****MI*11122333301~\n"+
"DMG*D8*19430519~\n"+
"DTP*291*D8*20060501~\n"+
"EQ*30~\n"+
"SE*13*1234~\n"+
"GE*1*1~\n";
let validator = new edi.EDIValidator();

const validate = (ediInput) => {
    //Create a validator instance

    //Load a 5010 270 Validation Rules File
    let validationRules = fs.readFileSync('/Users/don/Desktop/Rules_5010_834_005010X220A1.Rules').toString();
    console.log(validationRules)
    console.log(ediInput)
    //Set the validation rules data
    //Validation rules are found in the RDPCrystalInstallation\Validation Rules directory
    validator.EDIRulesFileData = validationRules;

    validator.EDIDataString = ediInput;

    validator.validate();

    //Get the EDI document loaded into memory
    let loadedEDIFile = validator.EDILightWeightDocument;

    console.log("Validation Errors count: ", validator.Errors.Count);

    //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: error.SnipLevel,
                Message: error.Message,
                Loop: error.Loop,
                Segment: error.Segment,
                Element: error.ElementOrdinal,
                Composite: error.CompositeElementOrdinal,
                Description: error.Description,
                Ordinal: error.SegmentOrdinal
            });
    }
    
}

const splitEDIInput = (ediInput) => {

    let original = ediInput;

    //Create a new EDIFileSplitter
    let splitter = new edi.EDIFileSplitter();

    //Split the document at the ST header
    splitter.FileSplitLevel = edi.FileSplitLevel.HEADER;

    //Put 1 ST-SE loop in each file
    splitter.NumberOfItemsPerFile = 1;

    //Split the document
    let splitDocs = splitter.split(original);

    console.log("First Split Document");
    console.log(splitDocs[0]);
}



splitEDIInput(edi834input);

validate(edi834input);

return null;

Information on your n8n setup

  • n8n version: 1.7.0
  • Database you’re using (default: SQLite): SQLite
  • Running n8n with the execution process [own(default), main]: own
  • Running n8n via [Docker, npm, n8n.cloud, desktop app]: desktop app

Hi @dnqwn, I am afraid I am not familiar with this library. Seeing you have it working outside of n8n, perhaps you can simply call an existing script through n8n’s Execute Command node?

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.