2017-08-22 2 views
0

私の会社はいくつかの異なるタイプのプロジェクトを実行し、選択したプロジェクトレコードで実行されているプロジェクトのタイプによってプロジェクトレコードを異なる方法で表示したいと考えています。Suitescript 2.0さまざまなタイプのプロジェクトに異なる形式を使用します

"カスタムフォーム"(これは選択フィールドです)というタイトルのフィールドと、スタッフがプロジェクトのタイプ "custentityjt_fie_pro_projecttype"(選択フィールド)を入力するフィールドがあります。

私はこれを達成しようとする負荷ユーザイベントスクリプトの前に次のことを作成しました:編集モードでプロジェクトレコードをロードする場合、カスタムフォームの選択が変更されない

/** 
* @NApiVersion 2.x 
* @NScriptType UserEventScript 
* @NModuleScope SameAccount 
*/ 
define(["N/record"], function(r) { 
function beforeLoad(context) { 
    var currentRecord = context.newRecord; 
    var projectType = currentRecord.getValue({ 
     fieldId: "custentityjt_fie_pro_projecttype", 
    }); 

    currentRecord.setValue({ 
     fieldID: 'customform', 
     value: projectType 
     }) 

} 

return { 
    beforeLoad: beforeLoad, 
} 

}) 

、およびプロジェクトのレコードをロードするときあなたが使用する必要が

{"type":"error.SuiteScriptError","name":"UNEXPECTED_ERROR","message":null,"stack":["anonymous(N/recordService)","beforeLoad(/SuiteScripts/setForm.js:13)"],"cause":{"type":"internal error","code":"UNEXPECTED_ERROR","details":null,"userEvent":"beforeload","stackTrace":["anonymous(N/recordService)","beforeLoad(/SuiteScripts/setForm.js:13)"],"notifyOff":false},"id":"","notifyOff":false} 

私はNetsuiteのに非常に新しいですし、一般的なプログラミングがとても優しくしてください:)

答えて

0

:ビューモードでは、私は次の取得しますカスタムフォームを変更するためのクライアントスクリプト。最良の方法は、pageInit()とfieldChanged()の2つの場所で行うことです。もう一つの潜在的な問題は、カスタムフォームの値をフィールドcustentityjt_fie_pro_projecttypeのgetValueで取得した値に設定しようとしていることです。あなたのサンプルからcurrentRecord.getValue()から返された値は、そこに設定されているプロジェクトタイプのカスタムリスト値の内部IDになります(カスタムリストに戻ると、内部ID値がリストされます)。これは問題です。カスタムフォームフィールドの値を設定するときは、使用するカスタムフォームの内部IDを参照する必要があるためです。参照されているプロジェクトタイプの内部IDがカスタムフォームの内部IDと一致することは注目に値するでしょう。私の推薦では、あなたのコードに参照を保存するためのハッシュテーブルを作成することがあります(あなたのプロジェクトタイプのリストは頻繁に変更されないと仮定して)。これを試してみてください(ルックアップ変数の値が更新されたものとして更新するようにしてください)。

/** 
*@NApiVersion 2.x 
*@NScriptType ClientScript 
*/ 
define([ 
    'N/record' 
], 
    function (
    nsRecord 
) { 
    // 
    // lookup table where the object property represents the internal IDs of the 
    // custom list values, and the value of each property represents the 
    // internal id's of the Custom Forms you wish to associate with each list value. 
    // 
    var lookup = { 
     1: 122, 
     2: 123, 
     3: 125, 
     4: 136 
    }; 

    function fieldChanged(context) { 
     var field = context.fieldId; 
     var rec = context.currentRecord; 
     var projId; 

     if (field === 'custentityjt_fie_pro_projecttype' && rec.getValue('custentityjt_fie_pro_projecttype')) { 
      projId = rec.getValue('custentityjt_fie_pro_projecttype'); 

      if (lookup[projId]) { 
       rec.setValue({ 
        fieldId: 'customform', 
        value: lookup[projId], 
        ignoreFieldChange: true, 
        fireSlavingSync: true 
       }); 
      } 
     } 
    } 

    function pageInit(context) { 
     var rec = context.currentRecord; 
     var mode = context.mode; 
     var projId; 
     var formId; 

     if (mode !== 'create') { 
      formId = rec.getValue('customform'); 
      projId = rec.getValue('custentityjt_fie_pro_projecttype'); 

      if (lookup[projId] && lookup[projId] !== formId) { 
       rec.setValue({ 
        fieldId: 'customform', 
        value: lookup[projId], 
        ignoreFieldChange: true, 
        fireSlavingSync: true 
       }); 
      } 
     } 
    } 

    return { 
     fieldChanged: fieldChanged, 
     pageInit: pageInit 
    }; 
}); 
+0

これは編集モードでのみ有効ですか?ビューモードでプロジェクトを表示するときにそれを動作させる方法はありますか? – jtux

+0

編集モードでは、カスタムフォームの選択は正しく変更されますが、実際のフォーム自体は変更されません。実際に変更を実行するためにフィールドの値を変更するのではなく、選択をクリックする必要があります。変更後のページのリロードでこれを修正することはできますか? – jtux

+0

@jtux正しいです。私はまた、それがクライアントスクリプトとしてのみ動作し、前のロードではないと信じていますユーザイベントスクリプト。 –

関連する問題