sp_btn_action.md 2.24 KB

sp_btn_action (procedure)

单据批量提交

  • Type: PROCEDURE
  • Deterministic: NO
  • SQL data access: CONTAINS SQL

Parameters

# Mode Name Type
1 IN sProInParam longtext
2 IN sMakePerson varchar(100)
3 IN sBrId varchar(100)
4 IN sSuId varchar(100)
5 OUT sReturn longtext
6 OUT sCode int

Body

Body is not pre-cached. To inspect: mysql --defaults-file=~/.my.cnf -e 'SHOW CREATE PROCEDUREspbtn_action'._

Narrative

Business context: 单据批量提交 — generic button-click handler driving in-grid bulk field updates ("btnRepair"-style toolbar buttons) on any business document. Parses a sProInParam JSON envelope assembled by the frontend that names the target table, the per-row sId/sSlaveId set, the literal column assignments, and an optional workflow log payload.

What it does: Walks $.params[*].value[*], builds a dynamic UPDATE <p_sTableName> SET <p_sSetSql> WHERE A.sId IN (...) AND sBrandsId/sSubsidiaryId via PREPARE/EXECUTE, with token substitution for #now#, #username#, #textareaValue#. Special branches: when the target is EptMachineRepairFixMaster and bSubmit=1 it calls Sp_Manufacture_InsertMftPlanSlave_byTable to refresh the schedule; when target is eleknifescrapexaminemaster with bSubmit6/bSubmit8 it joins back into eleknifescrapmaster (版材报废) to mark stamp-level submission. Pre-flight CALL Sp_Bill_Used enforces lock-state when bCheckBillUsed=1. Each row optionally logs to sp_add_flow_log.

Invocation: Dispatched dynamically by GenericProcedureCallServiceImpl.doGenericProcedureCall() (POST /procedureCall/doGenericProcedureCall) — frontend toolbar buttons whose action descriptor names sp_btn_action route the JSON envelope here. No gdsmodule hook, no static caller.

Flag: sBillNo parameter is the table name field but the dynamic UPDATE concatenates p_sId directly without QUOTE()-escaping JSON-decoded user input — SQL injection surface if sProInParam is not validated upstream. Body also contains dead SELECT ... FROM bbbbb; / FROM asadasda; / FROM adsadaqqqqqqq; debug-leftover statements (kept under DDL comments only).