業務の隙間を埋める技術メモ。

「それ、作れるか?」より 「それ、作って大丈夫か?」を考えたい。 業務で“ちゃんと使える”かどうかを、 実際に手を動かして確かめたログを残しています。

NetSuiteにExcelっぽい操作感を持ち込むのはどこまでアリか、実際にやってみた 〜Suiteletで予算入力用シートをそのまま置く実験ログ〜

 

結論(先に)

  • NetSuite標準UIだけだと Excelっぽさは足りない

  • でも Suitelet + スプレッドシートUIを使えば
    👉 「ほぼExcel」な入力画面は出せる

  • 予算入力・修正・再提出まで、意外と現実的

ただし、
ロール制約と操作責任は要注意
これは「便利だから誰でも触れる」にすると危険なやつ。


なぜ「貼り付け」じゃなく「表を出す」のか

貼り付け方式も便利だけど、現場からよく出るのはこれ。

  • 「今どの月がいくらか見ながら直したい」

  • 「全体を見て微調整したい」

  • Excel開かずにNetSuiteだけで終わらせたい」

要は👇

Excelを作る場所を、NetSuiteに移したい


今回やりたかった完成形

画面イメージとしては、こんな感じ。

        4月      5月      6月
広告費 100000  120000   90000
交通費  30000   28000   35000
通信費  20000   20000   20000
  • セルに直接入力できる

  • Tab / Enter で移動

  • 数値だけ受け付ける

  • 保存ボタン一発

👉 ほぼExcel


技術的な全体構成

使ったもの

※ 今回は Handsontable想定で話す。


Step1:Suiteletで「空の器」を出す

Suiteletは、

  • serverWidget でフォームを作り

  • HTMLフィールドに自由なUIを埋め込む

これが肝。

var html = form.addField({
  id: 'custpage_sheet',
  type: serverWidget.FieldType.INLINEHTML,
  label: '予算入力'
});

👉 ここにスプレッドシートを突っ込む。


Step2:スプレッドシートUIを描画する

HTML側でやることはシンプル。

  • 行:勘定科目

  • 列:月

  • データ:初期値 or 空

<div id="budgetSheet"></div>
<script>
var data = [
  ['広告費', 100000, 120000, 90000],
  ['交通費', 30000, 28000, 35000]
];

new Handsontable(document.getElementById('budgetSheet'), {
  data: data,
  rowHeaders: true,
  colHeaders: ['勘定', '4月', '5月', '6月'],
  licenseKey: 'non-commercial-and-evaluation'
});
</script>

この時点で👇

「え、これNetSuite?」

ってなる。


Step3:入力値を取得して保存する

保存ボタンの挙動

  • JSで現在のシート内容を取得

  • JSONに変換

  • hiddenフィールドに詰める

  • Suitelet POSTで送信

var sheetData = hot.getData();
document.getElementById('data').value = JSON.stringify(sheetData);

Step4:サーバ側で予算データに展開

サーバでは、

  1. JSONをパース

  2. 行 × 列でループ

  3. 月・勘定・金額を分解

  4. カスタム予算レコードを作成/更新

👉 Excel1シート = 予算テーブル


Step5:予実対比にそのまま使う

  • 実績:通常トランザクション

  • 予算:今回のカスタムレコード

  • 保存検索でJOIN

  • 差額・達成率を計算

入力も参照も、全部NetSuite内で完結。


ここが良かった

  • Excelを開かなくていい

  • 行・列を見ながら直せる

  • その場で保存 → 即反映

  • CSV事故ゼロ

特に、

「あ、やっぱこの月もう1万円足そう」

迷いなくできるのが強い。


⚠ 実運用での注意点(超重要)

① ロール制御は絶対

このUI、

  • 普通の入力画面より自由

  • =事故の破壊力も大きい

👉 予算専用ロール必須


② 同時編集は考慮しないと危険

  • 複数人同時に開くと

  • 最後に保存した人が勝つ

👉 排他制御 or 運用ルールが必要。


③ 標準UIじゃない=監査説明が必要

  • なぜこの画面があるか

  • 誰が使うか

  • 修正履歴はどう残すか

「便利だから作った」では通らない場面がある。


まとめ

  • NetSuiteにExcelを“貼る”のではなく

  • Excelを“置いた”

  • Suiteletは入力UIの自由度が本当に高い

  • ただし自由=責任

Excel文化を壊さず、
でもデータはちゃんとNetSuiteに残す。

その折衷案として、かなりアリな実験だった。