Active User Event and Client scripts deployed against Sales Orders, Invoices and Vendor Bills — attributed, ordered, and assessed for multi-provider stacking risk.
Every one of the three record types is over the threshold. Sales Order carries 6 active User Event scripts, Invoice 7, Vendor Bill 6 — plus 7, 4 and 4 Client scripts respectively. On a single Sales Order save, five separate beforeSubmit handlers execute in sequence, drawn from five different products.
The stack is entirely Oracle NetSuite-published. No third-party ISV and no in-house code is deployed on these records. That lowers coordination risk — one vendor owns every layer — but does not eliminate it: the nine products were built by separate NetSuite teams, span three SuiteScript API generations (1.0, 2.0, 2.1), and none of them is aware the others are present.
The material exposure is form-manipulation collision and validation veto. Four products hide or re-type fields in beforeLoad on the same forms, and three products each hold a validateLine veto on the Sales Order item sublist. Both patterns are order-dependent, and the execution order has not been verified against the Scripted Records page (see Assumptions).
Count of User Event deployments that are released, deployed, and whose parent script is not inactive. Client scripts are excluded from this test by definition but are reported separately below.
One Invoice and one Vendor Bill User Event (Approvals Workflow "Delete Exception") is restricted to the DELETE event only; on create/edit the effective counts are 6 and 5 — still over threshold.
Ownership was determined from three independent signals: the script.frombundle field, the File Cabinet path of the script source (bundle folders carry SuiteBundles/Bundle NNNNN; SDF SuiteApps carry SuiteApps/com.netsuite.*), and the script.owner employee. All three agree on every script.
| Product | Delivery | Scripts in scope | Records touched | Deploys |
|---|---|---|---|---|
| SuiteTax EngineSTE · com.netsuite.suitetaxengine | Bundle 237702 | customscript_ste_ue_transactioncustomscript_ste_cs_transaction | SO · INV · VB | 6 |
| US Sales Tax ReportsUSR · com.netsuite.ussalestaxreports | SDF SuiteApp | customscript_usr_ue_transactioncustomscript_usr_cs_transaction | SO · INV · VB | 6 |
| Localization AssistantLRC Field Manager · com.netsuite.localizationassistant | SDF SuiteApp | customscript_lrc_field_manager_uecustomscript_lrc_field_manager_cs | SO · INV · VB | 6 |
| Supply Chain ManagementSCM · Customer Part Number, Item Substitute, Landed Cost | Bundle 47193 | customscript_scm_cpn_ue_transactions customscript_scm_cpn_cs_transactionscustomscript_scm_is_transactions_ue customscript_scm_is_transactions_cscustomscript_scm_lc_ue_transactions customscript_scm_lc_cs_transactions | SO · INV · VB | 9 |
| Electronic Bank PaymentsEBP · com.netsuite.electronicbankpayments | Bundle 533070 | customscript_15486_payment_info_ue (2.1)customscript_2663_payment_info_ue (1.0, undeployed) | INV · VB | 4 |
| Approvals WorkflowNAW · WD_NAW | Bundle 240841 | customscript_naw_ue_delete_exception | INV · VB | 2 |
| Pack StationPackShip · com.netsuite.packship | Bundle 534418 | customscript_packship_cs_order_ifprocesscustomscript_packship_ue_nonadvinvt (undeployed) | SO | 2 |
| Available to BuildATB · com.netsuite.availabletobuild | SDF SuiteApp | customscript_atb_cs_salesordercustomscript_atb_ue_salesorder (undeployed) | SO | 2 |
| RMA from CaseRAC · com.netsuite.rmafromcase | Bundle 266623 | customscript_rac_ue_so_record | SO | 1 |
owner = -5 (System — set at bundle/SuiteApp install). The two exceptions are the SCM Customer Part Number scripts (customscript_scm_cpn_ue_transactions, customscript_scm_cpn_cs_transactions), owned by employee 1252 — an inactive NetSuite employee record. Script-failure notifications routed to the owner (notifyowner) for those two scripts have no live recipient.
7 active Client scripts from 6 products; 6 active User Event scripts from 5 products (2 further UE deployments are released but switched off).
| # | Deployment | Script · Product | API | Entry points | State |
|---|---|---|---|---|---|
| 1 | customdeploy_rac_ue_so_record | RAC UE Sales Order RecordRMA from Case · Bundle 266623 | 2.0 | beforeLoadbeforeSubmitafterSubmit | Active |
| 2 | customdeploy_ste_ue_transaction_salord | STE UE TransactionSuiteTax Engine · Bundle 237702 | 2.0 | beforeLoadbeforeSubmitafterSubmit | Active |
| – | customdeploy_atb_ue_salesorder | ATB_UE_SalesOrderAvailable to Build · SuiteApp | 2.1 | beforeLoad | Released, not deployed |
| 3 | customdeploy_scm_is_transactions_ue_so | Item Substitute Transactions UESCM · Bundle 47193 | 2.0 | beforeLoad | Active |
| 4 | customdeploy_scm_cpn_ue_so | SCM Transactions UESCM Customer Part Number · Bundle 47193 | 1.0 | beforeLoadbeforeSubmit | Active |
| – | customdeploy_packship_ue_nonadvinvt | Packship — Non Advanced Inventory PKG UEPack Station · Bundle 534418 | 2.1 | beforeSubmitafterSubmit | Released, not deployed |
| 5 | customdeploy_lrcfm_ue_salesorder | LRC Field Manager User EventLocalization Assistant · SuiteApp | 2.1 | beforeLoadbeforeSubmit | Active |
| 6 | customdeploy_usr_ue_tran_sales_order | USR UE TransactionUS Sales Tax Reports · SuiteApp | 2.1 | beforeSubmit | Active |
| # | Deployment | Script · Product | API | Entry points | Audience |
|---|---|---|---|---|---|
| 1 | customdeploy_scm_cpn_cs_so | SCM Transactions CSSCM Customer Part Number | 1.0 | pageInitvalidateFieldfieldChanged | All roles |
| 2 | customdeploy_atb_cs_salesorder | ATB_CS_SalesOrderAvailable to Build | 2.1 | pageInitvalidateFieldlineInitvalidateLine | All roles |
| 3 | customdeploy_scm_is_trans_cs_so | Item Substitute Transactions CSSCM Item Substitute | 2.0 | fieldChangedlineInit | Restricted roles |
| 4 | customdeploy_packship_cs_so_if_process | Packship — Process on IF Order CSPack Station | 2.1 | pageInitfieldChanged | All roles |
| 5 | customdeploy_usr_cs_tran_sales_order | USR CS TransactionUS Sales Tax Reports | 2.1 | validateLine | All roles |
| 6 | customdeploy_ste_cs_transaction_salord | STE CS TransactionSuiteTax Engine | 2.0 | pageInitsaveRecordvalidateFieldfieldChangedpostSourcinglineInitvalidateLinesublistChangedvalidateInsertvalidateDelete | All roles |
| 7 | customdeploy_lrcfm_cs_salesorder | LRC Field Manager Client ScriptLocalization Assistant | 2.1 | fieldChangedpostSourcing | All roles |
Red tags mark the three-way validateLine veto (ATB → USR → STE). Any handler returning false rejects the line; later handlers do not run.
4 active Client scripts from 4 products; 7 active User Event scripts from 6 products — the highest User Event count of the three records.
| # | Deployment | Script · Product | API | Entry points | State |
|---|---|---|---|---|---|
| 1 | customdeploy_ste_ue_transaction_invoice | STE UE TransactionSuiteTax Engine | 2.0 | beforeLoadbeforeSubmitafterSubmit | Active |
| 2 | customdeploy_naw_ue_delete_exp_iv | NAW Delete Exception Record UEApprovals Workflow · Bundle 240841 | 1.0 | beforeSubmitafterSubmit | Active · DELETE only · log DEBUG |
| 3 | customdeploy_scm_is_transactions_ue_in | Item Substitute Transactions UESCM Item Substitute | 2.0 | beforeLoad | Active |
| 4 | customdeploy_scm_cpn_ue_invc | SCM Transactions UESCM Customer Part Number | 1.0 | beforeLoadbeforeSubmit | Active |
| – | customdeploy_2663_payment_info_inv_ue | Generic Payment Information HiderElectronic Bank Payments (SS 1.0 predecessor) | 1.0 | beforeLoad | Released, not deployed |
| 5 | customdeploy_15486_pay_info_invoice_ue | Generic Payment Information Hider SS2Electronic Bank Payments · Bundle 533070 | 2.1 | beforeLoad | Active |
| 6 | customdeploy_lrcfm_ue_invoice | LRC Field Manager User EventLocalization Assistant | 2.1 | beforeLoadbeforeSubmit | Active |
| 7 | customdeploy_usr_ue_tran_invoice | USR UE TransactionUS Sales Tax Reports | 2.1 | beforeSubmit | Active |
| # | Deployment | Script · Product | API | Entry points | Audience |
|---|---|---|---|---|---|
| 1 | customdeploy_scm_cpn_cs_invc | SCM Transactions CSSCM Customer Part Number | 1.0 | pageInitvalidateFieldfieldChanged | All roles |
| 2 | customdeploy_usr_cs_tran_invoice | USR CS TransactionUS Sales Tax Reports | 2.1 | validateLine | All roles |
| 3 | customdeploy_ste_cs_transaction_invoice | STE CS TransactionSuiteTax Engine | 2.0 | pageInitsaveRecordvalidateFieldfieldChangedpostSourcinglineInitvalidateLinesublistChangedvalidateInsertvalidateDelete | All roles |
| 4 | customdeploy_lrcfm_cs_invoice | LRC Field Manager Client ScriptLocalization Assistant | 2.1 | fieldChangedpostSourcing | All roles |
4 active Client scripts from 4 products; 6 active User Event scripts from 6 products.
| # | Deployment | Script · Product | API | Entry points | State |
|---|---|---|---|---|---|
| 1 | customdeploy_ste_ue_transaction_vendbill | STE UE TransactionSuiteTax Engine | 2.0 | beforeLoadbeforeSubmitafterSubmit | Active |
| 2 | customdeploy_naw_ue_delete_exp_vb | NAW Delete Exception Record UEApprovals Workflow | 1.0 | beforeSubmitafterSubmit | Active · DELETE only · log DEBUG |
| 3 | customdeploy_scm_lc_ue_vbill | SCM LC Transactions UESCM Landed Cost | 1.0 | beforeLoadbeforeSubmit | Active |
| – | customdeploy_2663_payment_info_ue | Generic Payment Information HiderElectronic Bank Payments (SS 1.0 predecessor) | 1.0 | beforeLoad | Released, not deployed |
| 4 | customdeploy_15486_pay_info_venbill_ue | Generic Payment Information Hider SS2Electronic Bank Payments | 2.1 | beforeLoad | Active |
| 5 | customdeploy_lrcfm_ue_vendorbill | LRC Field Manager User EventLocalization Assistant | 2.1 | beforeLoadbeforeSubmit | Active |
| 6 | customdeploy_usr_ue_tran_vendor_bill | USR UE TransactionUS Sales Tax Reports | 2.1 | beforeSubmit | Active |
| # | Deployment | Script · Product | API | Entry points | Audience |
|---|---|---|---|---|---|
| 1 | customdeploy_scm_lc_cs_trans_vbill | SCM LC Transactions CSSCM Landed Cost | 1.0 | pageInitsaveRecordvalidateFieldfieldChangedpostSourcinglineInit | All roles |
| 2 | customdeploy_usr_cs_tran_vendor_bill | USR CS TransactionUS Sales Tax Reports | 2.1 | validateLine | All roles |
| 3 | customdeploy_ste_cs_transaction_vendbill | STE CS TransactionSuiteTax Engine | 2.0 | pageInitsaveRecordvalidateFieldfieldChangedpostSourcinglineInitvalidateLinesublistChangedvalidateInsertvalidateDelete | All roles |
| 4 | customdeploy_lrcfm_cs_vendor_bill | LRC Field Manager Client ScriptLocalization Assistant | 2.1 | fieldChangedpostSourcing | All roles |
Vendor Bill is the only record with two saveRecord vetoes (SCM Landed Cost, SuiteTax Engine).
Number of distinct products with an active handler on each entry point. Cells at 3 or above are highlighted; 5 is the maximum observed. Approvals Workflow (NAW) fires on delete only and is marked †.
| Entry point | Sales Order | Invoice | Vendor Bill |
|---|---|---|---|
| User Event — server side | |||
| beforeLoad | 5RAC · STE · SCM-IS · SCM-CPN · LRC | 5STE · SCM-IS · SCM-CPN · EBP · LRC | 4STE · SCM-LC · EBP · LRC |
| beforeSubmit | 5RAC · STE · SCM-CPN · LRC · USR | 5STE · NAW† · SCM-CPN · LRC · USR | 5STE · NAW† · SCM-LC · LRC · USR |
| afterSubmit | 2RAC · STE | 2STE · NAW† | 2STE · NAW† |
| Client — browser side | |||
| pageInit | 4SCM-CPN · ATB · PackShip · STE | 2SCM-CPN · STE | 2SCM-LC · STE |
| fieldChanged | 5SCM-CPN · SCM-IS · PackShip · STE · LRC | 3SCM-CPN · STE · LRC | 3SCM-LC · STE · LRC |
| validateField | 3SCM-CPN · ATB · STE | 2SCM-CPN · STE | 2SCM-LC · STE |
| postSourcing | 2STE · LRC | 2STE · LRC | 3SCM-LC · STE · LRC |
| lineInit | 3ATB · SCM-IS · STE | 1STE | 2SCM-LC · STE |
| validateLine veto | 3ATB · USR · STE | 2USR · STE | 2USR · STE |
| saveRecord veto | 1STE | 1STE | 2SCM-LC · STE |
| sublistChanged · validateInsert · validateDelete | 1STE | 1STE | 1STE |
Sequenced by the NetSuite record lifecycle, with the products holding a handler at each step. Highlighted steps are where a single handler can block or reshape the outcome for every product after it.
Only findings specific to this account. Severity reflects likelihood of user-visible or data-visible failure, not theoretical exposure.
Five products mutate or validate the record server-side on each save. A failure in position 5 (USR) discards work done by positions 1–4 with an error message that names USR — the user will not know the other four ran.
LRC Field Manager hides/re-types fields from a plugin list; EBP hides the payment-information subtab; SCM Item Substitute and STE both add UI. Last writer wins — if LRC's plugin list ever names a field STE relies on, STE's client script will fail silently on a missing field.
customscript_lrc_field_manager_ue description ("sets the display type to HIDE/NODISPLAY"); customscript_15486_payment_info_ue description; beforeLoad count 4–5 on all records.ATB, USR and STE each hold a line-level veto. NetSuite stops at the first false. Users see one message; the other two validations have not yet run and may reject the same line again after the first fix — a serial-rejection experience that reads as flaky behaviour.
SuiteTax Engine and US Sales Tax Reports both deploy UE + CS to all three record types. This is a supported pairing, but STE's client script implements all ten entry points, so any STE regression is felt on every field, every line, every save.
customscript_ste_cs_transaction — 10 of 10 entry points; deployed to SO, INV, VB.Released-but-undeployed deployments do not execute today, but a bundle update or an administrator click re-enables them without a code review. Two are SS 1.0 predecessors of active SS 2.1 scripts and would double the EBP beforeLoad work if enabled.
customdeploy_atb_ue_salesorder, customdeploy_packship_ue_nonadvinvt, customdeploy_2663_payment_info_inv_ue, customdeploy_2663_payment_info_ue — all status = RELEASED, isdeployed = F.SS 1.0 (SCM-CPN, SCM-LC, NAW, EBP-2663), SS 2.0 (STE, SCM-IS, RAC) and SS 2.1 (USR, LRC, ATB, PackShip, EBP-15486) interleave on the same record events. 1.0 and 2.x have different error-propagation and record-object semantics; a 1.0 script's nlapiSetFieldValue in beforeSubmit is visible to the 2.x script behind it, but not the reverse in all cases.
All 38 deployments list the full context set (37 contexts, including CSV Import, SOAP/REST Web Services, Scheduled, Map/Reduce, Workflow). A 10,000-row invoice CSV import pays the full server-side stack per row: 5 beforeLoad-equivalents are skipped, but 4 beforeSubmit and 1 afterSubmit handler run 10,000 times each.
scriptdeployment.executioncontext — comma-separated list of 37 values on every row; no deployment restricts context.The order in this report follows deployment creation sequence, which is NetSuite's default. If an administrator has re-ordered scripts on the Scripted Records page, the true order differs and R1–R3 conclusions about "who runs last" change.
Two SCM scripts notify an inactive employee on failure. Combined with log level ERROR on 36 of 38 deployments, failures in this stack are unlikely to be seen until a user reports them.
script.owner = 1252 (inactive) on customscript_scm_cpn_ue_transactions and customscript_scm_cpn_cs_transactions; scriptnote contains zero rows for any of the 20 scripts.customdeploy_15486_pay_info_*, customdeploy_lrcfm_ue_* and customdeploy_scm_is_transactions_ue_* implement beforeLoad to shape the UI. Limiting them to User Interface context removes them from CSV import, web services and scheduled runs at no functional cost. This directly reduces R7.status = TESTING (or remove) on the two EBP SS 1.0 deployments, the ATB UE and the PackShip UE so a future bundle update cannot silently re-arm them. Confirm with the bundle's update notes first — the 15486 script is the declared SS2 replacement for 2663.owner on the two SCM-CPN scripts from employee 1252 to a live administrator so failure notifications land.validateLine/saveRecord vetoes. The query takes under a second.scriptdeployment.status = 'RELEASED' AND scriptdeployment.isdeployed = 'T' AND script.isinactive = 'F'.scriptdeployment.recordtype IN ('SALESORDER','INVOICE','VENDORBILL'). The recordtype column on this table stores uppercase record-type names; the short transaction codes (SalesOrd, CustInvc, VendBill) used elsewhere in SuiteQL do not apply here.USEREVENT, CLIENT. Workflows, Suitelets, RESTlets and scheduled scripts are out of scope; workflows are noted below for completeness.*function columns on script: beforeloadfunction, beforesubmitfunction, aftersubmitfunction, pageinitfunction, saverecordfunction, validatefieldfunction, fieldchangedfunction, postsourcingfunction, lineinitfunction, validatelinefunction, recalcfunction (= sublistChanged), validateinsertfunction, validatedeletefunction.script.frombundle and the File Cabinet folder lineage of script.scriptfile via mediaitemfolder. SDF SuiteApps have no bundle id; they were identified by the SuiteApps/com.netsuite.* root folder.scriptdeployment.primarykey (deployment creation sequence), which is NetSuite's default ordering. The Scripted Records page is the authoritative source and did not render in the automated fetch; it should be checked manually (R8).com.netsuite.suitetaxengine, com.netsuite.electronicbankpayments, com.netsuite.packship, com.netsuite.rmafromcase) and script-id prefixes. The bundleinstallation table is not exposed to SuiteQL in this account, so publisher names were not read from the bundle registry directly. Bundle 47193 is identified as NetSuite Supply Chain Management from its CPN/IS/LC module folders and its NetSuite-employee owner; Bundle 240841 as NetSuite Approvals Workflow from its WD_NAW script namespace and the approval workflows it installs.scriptnote returned no rows for the 20 scripts in scope. This is consistent with ERROR-level logging and no errors, but could also reflect log retention; it is not evidence of correctness.customworkflow_ste_wf_trans_comp_text (SuiteTax, Invoice) and customworkflow_3way_match_vb_approv_2 (local copy of the 3-way-match Vendor Bill approval). Four further workflows on Invoice/Vendor Bill are NOTINITIATING. Record-type mapping for workflows is inferred from workflow names; they are excluded from the threshold count.All queries are SuiteQL and ran read-only against the production account on 3 September 2026. They can be re-run as-is.
Q1 — Deployment inventory with entry points38 rows
SELECT d.id AS depid, d.scriptid AS dep, d.recordtype AS rt, d.status, d.isdeployed AS dpl,
d.eventtype AS evt, d.loglevel AS lg, d.allroles AS ar, d.allemployees AS ae,
s.id AS sid, s.scriptid AS sscr, s.name AS sname, s.scripttype AS st, s.apiversion AS api,
s.frombundle AS bnd, s.owner AS own, s.isinactive AS inact, s.scriptfile AS f,
CASE WHEN s.beforeloadfunction IS NOT NULL THEN 'BL ' ELSE '' END
|| CASE WHEN s.beforesubmitfunction IS NOT NULL THEN 'BS ' ELSE '' END
|| CASE WHEN s.aftersubmitfunction IS NOT NULL THEN 'AS ' ELSE '' END
|| CASE WHEN s.pageinitfunction IS NOT NULL THEN 'pageInit ' ELSE '' END
|| CASE WHEN s.saverecordfunction IS NOT NULL THEN 'saveRecord ' ELSE '' END
|| CASE WHEN s.validatefieldfunction IS NOT NULL THEN 'validateField ' ELSE '' END
|| CASE WHEN s.fieldchangedfunction IS NOT NULL THEN 'fieldChanged ' ELSE '' END
|| CASE WHEN s.postsourcingfunction IS NOT NULL THEN 'postSourcing ' ELSE '' END
|| CASE WHEN s.lineinitfunction IS NOT NULL THEN 'lineInit ' ELSE '' END
|| CASE WHEN s.validatelinefunction IS NOT NULL THEN 'validateLine ' ELSE '' END
|| CASE WHEN s.recalcfunction IS NOT NULL THEN 'sublistChanged ' ELSE '' END
|| CASE WHEN s.validateinsertfunction IS NOT NULL THEN 'validateInsert ' ELSE '' END
|| CASE WHEN s.validatedeletefunction IS NOT NULL THEN 'validateDelete ' ELSE '' END AS entry
FROM scriptdeployment d
JOIN script s ON d.script = s.id
WHERE d.recordtype IN ('SALESORDER','INVOICE','VENDORBILL')
AND s.scripttype IN ('USEREVENT','CLIENT')
ORDER BY d.recordtype, s.scripttype, d.id
Q2 — Default execution order (deployment creation sequence)38 rows · see A1
SELECT d.primarykey AS pk, d.scriptid AS dep, d.recordtype AS rt, s.scripttype AS st
FROM scriptdeployment d
JOIN script s ON d.script = s.id
WHERE d.recordtype IN ('SALESORDER','INVOICE','VENDORBILL')
AND s.scripttype IN ('USEREVENT','CLIENT')
ORDER BY d.recordtype, s.scripttype, d.primarykey
Q3 — Threshold test (re-usable policy check)returns record types over the limit
SELECT d.recordtype, COUNT(*) AS active_ue FROM scriptdeployment d JOIN script s ON d.script = s.id WHERE s.scripttype = 'USEREVENT' AND d.status = 'RELEASED' AND d.isdeployed = 'T' AND s.isinactive = 'F' GROUP BY d.recordtype HAVING COUNT(*) > 3 ORDER BY active_ue DESC
Q4 — Script source location and folder lineage (provider attribution)19 files
SELECT f.id, f.name, f.folder, mf.name AS foldername, pf.name AS parentname,
f.lastmodifieddate, f.filesize
FROM file f
LEFT JOIN mediaitemfolder mf ON f.folder = mf.id
LEFT JOIN mediaitemfolder pf ON mf.parent = pf.id
WHERE f.id IN (24710,5015,7620,90318,24736,15327,5093,7568,24576,5021,23955,1148,
5048,15869,24196,15870,5899,5092,5062);
-- folder ancestry to the SuiteBundles / SuiteApps root
SELECT f1.id, f1.name AS l1, f2.name AS l2, f3.name AS l3, f4.name AS l4, f5.name AS l5
FROM mediaitemfolder f1
LEFT JOIN mediaitemfolder f2 ON f1.parent = f2.id
LEFT JOIN mediaitemfolder f3 ON f2.parent = f3.id
LEFT JOIN mediaitemfolder f4 ON f3.parent = f4.id
LEFT JOIN mediaitemfolder f5 ON f4.parent = f5.id
WHERE f1.id IN (3129,3141,3037,2800,1667,2135,3018,401,384,2347,934,962)
Q5 — Script owner resolution
SELECT id, entityid, firstname, lastname, email, isinactive, title FROM employee WHERE id = 1252
Q6 — Execution-context coverage per deploymentall 38 rows: 37 contexts, no restriction
SELECT d.scriptid AS dep,
LENGTH(d.executioncontext) - LENGTH(REPLACE(d.executioncontext, ',', '')) + 1 AS ctxcount
FROM scriptdeployment d
JOIN script s ON d.script = s.id
WHERE d.recordtype IN ('SALESORDER','INVOICE','VENDORBILL')
AND s.scripttype IN ('USEREVENT','CLIENT')
Q7 — Workflows on the same records (supplementary, A5)
SELECT internalid, scriptid, name, recordtype, recordtypes, isinactive, releasestatus,
frombundle, initoncreate, initonvieworupdate
FROM workflow WHERE isinactive = 'F' ORDER BY recordtype
Q8 — Execution-log presence0 rows · see A4
SELECT n.scripttype AS script, n.type, COUNT(*) AS cnt
FROM scriptnote n
WHERE n.scripttype IN (2386,477,1201,3365,2389,1274,436,1155,2192,418,2051,135,
473,1793,2182,2098,801,1794,476,423)
GROUP BY n.scripttype, n.type ORDER BY cnt DESC
scriptdeployment · script · file · mediaitemfolder · employee · workflow · scriptnote. Column names were verified against a single-row SELECT * on each table before use. Note that scriptnote.scripttype holds the script internal id, and workflow exposes internalid rather than id.