2016-08-17 50 views
1

遇到一種愚蠢的問題。什麼是在SS2.0中傳遞變量的「官方」方式?

我想在map/reduce腳本的各個階段之間傳遞一個變量。是否有一個「官方」或最好的方式來做到這一點(而不是與返回的結果一起發送)。

這是我最後的辦法:

/** 
    * @NApiVersion 2.0 
    * @NScriptType MapReduceScript 
    */ 

    define(["N/search", "N/record", "N/email", "N/runtime", "N/task", "/SuiteScripts/Libraries/tools_lib"], 
    function (search, record, email, runtime, task, tools) { 

    var ss = runtime.getCurrentSession(); 
    var conf = {}; 

    /** 
    * Retrieve the CSV contents and return as an object 
    * @return {Array|*} 
    */ 
    function getInputData() { 

     log.debug("setting", "foo"); 
     ss.set({name: "foo", value: "bar"}); 

     //Session 
     var foo = ss.get({name: "foo"}); 
     log.debug("foo 1", foo); 

     //var pass 
     conf["foo"] = "bar"; 

     return [1, 2, 3]; 
    } 

    /** 
    * Search and group by type, all records with matching entries on the CSV field 
    * @param context 
    * @return {boolean} 
    */ 
    function map(context) { 

     //Session 
     var foo = ss.get({name: "foo"}); 
     log.debug("foo 2", foo); 

     //Var pass 
     log.debug("foo 3", conf["foo"]); 

     return false; 
    } 

富1 =酒吧

foo2的= NULL

foo3 = NULL

回答

4

NetSuite的店無論你return從前一階段的context.value

無論您返回哪種數據類型,它總是會作爲String發送到下一個階段,因此如果要使用其他數據類型,則需要JSON.parse

function getInputData() { 
    return [1,2,3]; 
} 

function map(context) { 
    log.debug(JSON.parse(context.value)); 
} 

您無法訪問以前階段的特定變量。如果你想傳遞數據,你需要建立一個合適的數據結構,其中包含你想要傳遞的值,return它,然後在後續階段將其解析出context.value

+1

謝謝。這就是我現在所做的,希望有一個更清潔的方式... – pipechang

+1

是的,我不確定我喜歡你自己需要解析它的事實;我覺得NetSuite應該照顧你的類型轉換。 – erictgrubaugh

+0

這可能是爲了安全。我覺得很多已經在SS2.0上完成的東西只是'感覺'像現代JS,但是後端幾乎是一樣的。 – pipechang

相關問題