Skip to main content

netsuite-suitescript-learning

Interactive learning system for NetSuite SDF development. Features six modes (learn, review, explain, annotate, quiz, and final) with SAFE Guide integration. Produces compliance-reviewed learning documentation. Learn topics like governance, N/cache, and security directly from SAFE Guide principles. Generate quizzes from code or SAFE Guide content.

来源信息

仓库
oracle/netsuite-suitecloud-sdk
最近来源活动
2026年6月15日 15:15
检测到的 SKILL.md 语言
英语
星标
368
Forks
115

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
netsuite-suitescript-learning
description
Interactive learning system for NetSuite SDF development. Features six modes (learn, review, explain, annotate, quiz, and final) with SAFE Guide integration. Produces compliance-reviewed learning documentation. Learn topics like governance, N/cache, and security directly from SAFE Guide principles. Generate quizzes from code or SAFE Guide content.
license
The Universal Permissive License (UPL), Version 1.0
metadata
{"author":"Oracle NetSuite","version":"1.0"}
# NetSuite SuiteScript Learning Skill **Created by:** Oracle NetSuite ## Description Interactive learning system for NetSuite SuiteScript and SDF projects with **SAFE Guide integration**. This skill provides: - **Learn Mode**: Topic-based learning from SAFE Guide principles (14 topics including governance, performance, security, N/cache, concurrency) - **Review Mode**: Analyze code files and identify key learning concepts - **Explain Mode**: Deep-dive explanations with automatic SAFE Guide references - **Annotate Mode**: Embed educational comments directly into code - **Quiz Mode**: Generate quizzes from user code (`--source=code`), SAFE Guide principles (`--source=safe`), or both - **Final Mode**: Comprehensive learning documentation with SAFE Guide compliance checklist Covers all 14 script types, deployment configurations, performance patterns, defensive coding practices, and governance limits. ## How to Use This Skill ### Manual Invocation (Slash Command) Invoke this skill at any time by typing: ``` /netsuite-suitescript-learning ``` Note: `/netsuite-suitescript-learning` is the full skill command, while `/suitescript-learning` may be available as a coding assistant alias where supported. Or use specific mode commands: ``` /netsuite-suitescript-learning learn [topic] # Learn a SAFE Guide topic /netsuite-suitescript-learning review [filename] # Review a file and identify learning concepts /netsuite-suitescript-learning explain [concept] # Deep dive into a specific concept /netsuite-suitescript-learning annotate [filename] # Add inline learning comments to code /netsuite-suitescript-learning quiz [section] # Generate quiz questions /netsuite-suitescript-learning final # Generate a comprehensive learning document ``` ### Optional Coding Assistant Activation Example For Claude Code, add this to your project's `.claude/settings.local.json`: ```json { "permissions": { "allow": [ "Skill(netsuite-sdf-safe-guide)", "Skill(netsuite-suitescript-learning)" ] } } ``` With both skills enabled, an assistant will: - Follow SDF best practices for all SDF components (scripts, custom records, workflows, etc.) - Automatically embed educational annotations in code as it's written - Generate quizzes and learning materials on request - Provide guidance on Suitelets, RESTlets, User Event Scripts, and all 14 script types --- ## When to Use This Skill ### Proactive Invocation (Recommended) - Invoke this skill **during development** as code is being written, not just at the end. - Call after each major component is created (script file, object XML, etc.). - Use for real-time learning reinforcement. - **IMPORTANT**: When creating NetSuite SuiteScript code, automatically embed learning annotations (CONCEPT comments, LEARNING NOTES) directly into the code as it's written. ### Automatic Annotation During Code Creation When this skill is active and code is being created (not just reviewed), the following annotations should be automatically included: 1. **JSDoc Headers**: Include LEARNING NOTES explaining the script type and purpose. 2. **Entry Points**: Add LEARNING NOTES blocks explaining when/how the function runs. 3. **API Calls**: Add CONCEPT comments before each N/* module usage. 4. **Complex Logic**: Add step-by-step comments for multi-step operations. 5. **Return Statements**: Explain what's being exposed and why. This ensures educational content is embedded as code is written, not added as an afterthought. ### Manual Invocation - User explicitly requests educational content: "explain this code", "create a quiz", "review for learning" - Commands like: "/suitescript-learning", "/quiz", "/explain-suitescript" - After completing a NetSuite SDF project to generate final learning materials ### Invocation Modes | Mode | Trigger | Purpose | |------|---------|---------| | `learn` | When learning a SAFE Guide topic | Topic-based learning from SAFE Guide principles | | `review` | After creating a script file | Generate concepts and questions for that specific file | | `explain` | When user asks for explanation | Deep-dive into specific code patterns | | `annotate` | When the user asks to annotate code with inline comments | Add inline learning comments to existing code | | `quiz` | After completing a section | Generate quiz questions with answers | | `final` | At project completion | Consolidate all learning into comprehensive documentation | --- ## Usage Syntax ``` /netsuite-suitescript-learning [mode] [target] [options] Modes: learn – Topic-based learning from SAFE Guide principles review – Review a specific file and identify learning concepts explain – Explain a specific concept or code pattern annotate – Add inline learning comments to existing code quiz – Generate quiz questions for recent code final – Generate final comprehensive learning document Target: - File path for review/annotate mode - Concept name for explain mode - "all" or section name for quiz mode - Topic keyword for learn mode (see SAFE Guide Learning Topics) Options: --source=code Quiz questions from user's code only (quiz mode) --source=safe Quiz questions from SAFE Guide principles only (quiz mode) --source=owasp Quiz questions from OWASP secure coding practices only (quiz mode) --source=both Quiz questions from both sources (default for quiz mode) ``` **Examples:** ``` /suitescript-learning learn ncache /suitescript-learning learn governance /suitescript-learning review quick_add_ue.js /suitescript-learning explain beforeLoad /suitescript-learning annotate quick_add_cs.js /suitescript-learning quiz user-event-scripts /suitescript-learning quiz --source=safe /suitescript-learning final ``` --- ## Core Functionality ### 1. Code Review Mode (`review`) When reviewing a SuiteScript file, identify and document: #### Script Type Analysis Detect the script type from JSDoc annotations and provide: - Purpose of this script type - When it executes (server-side vs client-side) - Common use cases - Entry points specific to this type #### Key Concepts Extraction For each code pattern found, document: - **Concept Name**: Brief identifier - **What It Does**: Plain English explanation - **Why It's Used**: Business/technical rationale - **Code Location**: Line number reference - **Common Pitfalls**: What could go wrong - **Best Practice**: Recommended approach #### Output Format for Review Mode ```markdown ## Code Review: [filename] ### Script Overview - **Type**: [UserEventScript/ClientScript/Suitelet/RESTlet/etc.] - **Execution Context**: [Server/Client] - **Entry Points**: [list of entry points used] ### Key Concepts Identified #### 1. [Concept Name] **Lines**: [X–Y] **What**: [explanation] **Why**: [rationale] **Pitfall**: [common mistake] **Best Practice**: [recommendation] #### 2. [Next Concept] ... ### Quiz Questions for This File 1. [Question about concept 1] 2. [Question about concept 2] ... ``` --- ### 2. Explain Mode (`explain`) Provide deep-dive explanations for specific concepts: #### Supported Concepts (Auto-Detect from User Query) **User Event Script Concepts:** - `beforeLoad` – Form modification before render - `beforeSubmit` – Validation before save - `afterSubmit` – Post-save processing - `context.type` – Record access modes - `form.addButton()` – Custom buttons - `form.clientScriptModulePath` – Linking client scripts **Client Script Concepts:** - `pageInit` – Page load initialization - `saveRecord` – Save validation - `validateField` – Field-level validation - `fieldChanged` – Reactive field handling - `currentRecord.get()` – Accessing record data - `selectNewLine/commitLine` – Sublist manipulation - `window.opener` – Parent window communication **Suitelet Concepts:** - `onRequest` – HTTP request handling - `GET vs POST` – HTTP method routing - `response.write()` – Sending responses - `serverWidget.Form` – NetSuite forms - Custom HTML rendering **RESTlet Concepts:** - `get/post/put/delete` handlers - JSON responses - URL parameters vs body - CORS and authentication **Search & Query Concepts:** - `N/search` – Saved searches - `N/query` – SuiteQL - Search filters and columns - `search.run().each()` – Result iteration - Performance optimization **Deployment Concepts:** - Script IDs and naming - Deployment XML structure - `<runasrole>` and `<allroles>` support by type - `<recordtype>` requirements - Status values (RELEASED vs NOTSCHEDULED) - manifest.xml dependencies **Defensive Coding Concepts:** - `runtime.executionContext` – Check how script was triggered - Override vs. Wait patterns – When to defer to other scripts - Idempotent operations – Safe to re-run without side effects - Script coordination – Using flag fields for ordering - Graceful error handling – try/catch in afterSubmit - Sanity checks – Verify before acting - `search.lookupFields()` – Check record exists before loading **Governance Concepts:** - `Script.getRemainingUsage()` – Monitor remaining usage units - Usage unit limits by script type – 1,000 for UE/Suitelet, 10,000 for Scheduled - API governance costs – Different costs for custom vs transaction records - `SSS_USAGE_LIMIT_EXCEEDED` – Script exceeded usage units - `SSS_TIME_LIMIT_EXCEEDED` – Script exceeded time limit - Search result limits – 1,000 standard, 4,000 saved search - Yielding in Scheduled Scripts – Reschedule before hitting limits - Client Script logging – `log.*` ignored, use `console.log()` #### Output Format for Explain Mode ````markdown ## Concept: [Name] ### What It Is [Clear explanation] ### When to Use It [Use cases and scenarios] ### How It Works [Technical details with code examples] ### Example Code ```javascript [Relevant code snippet] ``` ### Common Mistakes 1. [Mistake 1] 2. [Mistake 2] ### Best Practices 1. [Practice 1] 2. [Practice 2] ### Related Concepts - [Link to related concept 1] - [Link to related concept 2] ### SAFE Guide Reference This concept relates to **Principle [X]: [Name]** Key points from the SAFE Guide: - [Point 1 from SAFE Guide] - [Point 2 from SAFE Guide] See: `../netsuite-sdf-safe-guide/references/[XX-filename.md]` ```` #### Concept-to-Principle Mapping When explaining concepts, automatically reference relevant SAFE Guide principles: | Concept Category | SAFE Guide Principle | Reference File | |------------------|---------------------|----------------| | Governance, Usage Units | Principle 2 | `02-governance-usage-units.md` | | N/cache, Performance | Principle 3 | `03-performance-optimization.md` | | N/query, SuiteQL | Principle 3 | `03-performance-optimization.md` | | Script Coexistence | Principle 4 | `04-multi-suiteapp-environment.md` | | Security, Permissions | Principle 5 & 11 | `05-security-privacy.md`, `11-security-best-practices.md` | | Testing, SDN | Principle 6 | `06-testing-suiteapps.md` | | Map/Reduce, Scheduled | Principle 2 & 3 | `02-governance-usage-units.md` | | RESTlet vs Suitelet | Appendix | `appendices/appendix-concurrency-cheatsheet.md` | | Legacy TBA Exceptions | Principle 5 | `05-security-privacy.md` | | OWASP, XSS, Injection | OWASP Skill | `netsuite-owasp-secure-coding/SKILL.md` | --- ### 3. Annotate Mode (`annotate`) Add inline learning comments directly into code files. This embeds educational content where developers will see it as they work with the code. #### Comment Styles **CONCEPT Comments** – Brief inline explanations ```javascript // CONCEPT: context.type tells us how the record is being accessed if (context.type !== context.UserEventType.VIEW) ``` **LEARNING NOTES Comments** – Block explanations in JSDoc ```javascript /** * beforeLoad Entry Point * * LEARNING NOTES: * - This function executes BEFORE the form is sent to the browser * - Perfect place to modify the form (add fields, buttons, sublists) * - context.form gives access to the N/ui/serverWidget.Form object * * @param {Object} context – Contains form, record, type (view/edit/create) */ const beforeLoad = (context) => { const form = context.form; }; ``` **Parameters Comments** – Explain function parameters ```javascript // Parameters: // id: Unique identifier (prefix with custpage_ for custom buttons) // label: What the user sees // functionName: Client Script function to call when clicked form.addButton({ id: 'custpage_quick_add_items', label: 'Quick Add Items', functionName: 'openQuickAddDialog' }); ``` #### Annotation Rules 1. **JSDoc Header Annotations** - Add LEARNING NOTES block to every entry point function. - Include what the function does, when it runs, and key parameters. - Reference related concepts and common pitfalls. 2. **Inline CONCEPT Comments** - Add before any non-obvious code pattern. - Keep to single line when possible. - Focus on the "why" not just the "what". 3. **Code Block Explanations** - Add before complex logic blocks. - Use numbered steps for multi-step operations. - Include expected outcomes. 4. **Return Statement Comments** - Explain what the return object exposes. - Note which functions are entry points vs custom. #### Where to Add Annotations | Location | Comment Type | Purpose | |----------|--------------|---------| | File header | LEARNING NOTES in JSDoc | Overall script purpose and type | | Entry point functions | LEARNING NOTES block | Function behavior and parameters | | Module imports | CONCEPT comment | Why each module is needed | | Conditionals | CONCEPT comment | Why this check is performed | | API calls | Parameters comment | What each parameter does | | Complex logic | Numbered steps | Break down multi-step operations | | Return statements | CONCEPT comment | What's being exposed and why | #### Example: Fully Annotated User Event Script ```javascript /** * @NApiVersion 2.1 * @NScriptType UserEventScript * @NModuleScope SameAccount * * @description User Event Script to add "Quick Add Items" button to Sales Orders * * LEARNING NOTES: * - @NApiVersion 2.1 tells NetSuite to use SuiteScript 2.1 (modern JS support) * - @NScriptType UserEventScript identifies this as a UE script * - @NModuleScope SameAccount restricts execution to same NetSuite account * - User Event Scripts run on the SERVER, not in the browser */ // CONCEPT: define() is the AMD module pattern; loads dependencies define(['N/ui/serverWidget', 'N/runtime'], (serverWidget, runtime) => { /** * beforeLoad Entry Point * * LEARNING NOTES: * - Executes BEFORE the form is sent to the browser * - Perfect place to modify the form (add fields, buttons, sublists) * - context.form gives access to the N/ui/serverWidget.Form object * - Changes made here appear when the page loads * * @param {Object} context – Contains form, record, type (view/edit/create)
在 GitHub 查看
这个 SKILL.md 很大,SkillsMP 这里只预览前一段内容。 在 GitHub 查看