1

So I've searched around stack overflow and cant seem to find anything that people have suggested that works.

So I have an Object Array

Report_Search_List = [
    {"NAME":"CHART OF ACCOUNTS", "PDF":"CHART_OF_ACCOUNTS_PDF", "XLS":"CHART_OF_ACCOUNTS_XLS"},
    {"NAME":"GENERAL LEDGER", "PDF":"GENERAL_LEDGER_PDF", "XLS":"GENERAL_LEDGER_XLS"},
    {"NAME":"COST REPORT", "PDF":"COST_REPORT_PDF", "XLS":"COST_REPORT_XLS"},
    {"NAME":"CASH FLOW", "PDF":"CASH_FLOW_PDF", "XLS":"CASH_FLOW_XLS"},
    {"NAME":"INVOICE", "PDF":"INVOICE_PDF", "XLS":"INVOICE_XLS"},
    {"NAME":"CREDIT NOTE", "PDF":"CREDIT_NOTE_PDF", "XLS":"CREDIT_NOTE_XLS"},
    {"NAME":"JOBCARD COST", "PDF":"JOBCARD_COST_PDF", "XLS":"JOBCARD_COST_XLS"},
    {"NAME":"GOODS RECEIVED VOUCHER", "PDF":"GOODS_RECEIVED_VOUCHER_PDF", "XLS":"GOODS RECEIVED VOUCHER_XLS"},
    {"NAME":"GOODS RETURNED NOTE", "PDF":"GOODS_RETURNED_NOTE_PDF", "XLS":"GOODS_RETURNED_NOTE_XLS"},
    {"NAME":"REQUISITION", "PDF":"REQUISITION_PDF", "XLS":"REQUISITION_XLS"},
    {"NAME":"DELIVERY NOTE", "PDF":"DELIVERY_NOTE_PDF", "XLS":"DELIVERY_NOTE_XLS"},
    {"NAME":"PICK SLIP", "PDF":"PICK_SLIP_PDF", "XLS":"PICK_SLIP_XLS"},
    {"NAME":"PETTY CASH", "PDF":"PETTY_CASH_PDF", "XLS":"DELIVERY_NOTE_XLS"},
    {"NAME":"OTHER TRANSACTIONS", "PDF":"OTHER_TRANSACTIONS_PDF", "XLS":"OTHER_TRANSACTIONS_XLS"},
    {"NAME":"PURCHASE ORDER", "PDF":"PURCHASE_ORDER_PDF", "XLS":"PURCHASE_ORDER_XLS"}
]

So it first builds a Search list for the user to select from

Report_Search_List[index].NAME

Then once they have selected the report they click on the button either PDF or XLS

here is the function

function PDF_CLICK() {
    try {
        var text = "none";
        var BRANCH_PDF_REPORTS_PROFILE_SELECT = document.getElementById('BRANCH_PDF_REPORTS_PROFILE_SELECT');
        text = BRANCH_PDF_REPORTS_PROFILE_SELECT.value;
        //get array list
        var report = Report_Search_List.filter(function (el) {
            return el["NAME"] == text;
        });
        //PROBLEM IS HERE
//run method
Window[report[0]["PDF"]]();
window[report[0]["PDF"]]();
report[0]["PDF"].call();
report[0]["PDF"]();
    } catch (e) {
        console.log(e);
        EX_JS_ALERT.ALERT("OOPS SOMETHING WENT WRONG"); EX_JS_ERROR.ERROR(e.toString(), location.pathname);;
    }
}

Now the problem

I've tried all of the above and it is getting the correct report but still comes back with its not a function. Meanwhile there is a function below.

2
  • Can you provide complete error log? Commented Jul 23, 2018 at 8:30
  • it said Window[report[0]["PDF"]](); window[report[0]["PDF"]](); report[0]["PDF"].call(); report[0]["PDF"](); is not a function so thats all. Commented Jul 23, 2018 at 8:49

2 Answers 2

1

This is tagged node.js so I assume this isn't running in a browser. As such, there is not windowobject to use to find global variables. You can explicitly define things on the global object in Node, but that's rarely a good idea. A better way is to create an object that holds your functions with keys that are named with the text you want to use to call them.

So with a subset of you data you might have an arrangement like:

const Report_Search_List = [
    {"NAME":"CHART OF ACCOUNTS", "PDF":"CHART_OF_ACCOUNTS_PDF", "XLS":"CHART_OF_ACCOUNTS_XLS"},
    {"NAME":"GENERAL LEDGER", "PDF":"GENERAL_LEDGER_PDF", "XLS":"GENERAL_LEDGER_XLS"}
]
    
const functions = {
  CHART_OF_ACCOUNTS_PDF(){console.log("chart called")},
  GENERAL_LEDGER_PDF(){console.log("Ledger call")}
  
}

// now you can call them with strings:
functions[Report_Search_List[0]["PDF"]]()
functions[Report_Search_List[1]["PDF"]]()

Sign up to request clarification or add additional context in comments.

2 Comments

thanks for the help bud but I cant set it up like that. I did see this suggestion on the other page.
is there a performance difference? on the user between the two?
0

So I figured out how to do it window is not the current window you are working on.

so what i did at the top of the page is

const EX_JS_BRANCH_REPORTS_PDF = require('../BRANCH/EX_JS_BRANCH_REPORTS_PDF.js');

then changed the

function to

exports.GENERAL_LEDGER_PDF = function(){}

then I changed window to EX_JS_BRANCH_REPORTS_PDF and dynamically working XD

EX_JS_BRANCH_REPORTS_PDF[report[0]["PDF"]]();

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.