销售录入模型表单问题:首付款与已付金额无法存入数据库
解决销售录入表单首付款与已付金额无法存入数据库的问题
问题核心
前端计算后Rest_Amount和Paid_Amount显示正常,但P13_DOWN_PAYMENT(首付款)和P13_PAID_AMOUNT(已付金额)无法写入数据库,本质是项的会话状态未与前端值同步,加上你配置的重复动态动作引发了状态更新冲突。
修正后的动态动作配置(合并为单个动作)
步骤1:创建统一的金额计算动态动作
- 打开Dynamic Actions标签页,右键点击
Change节点,选择Create Dynamic Action。 - 在
New节点配置基础属性:- 名称:
Calculate Payment Amounts - 选择类型:
Items - 目标项:
P13_DOWN_PAYMENT - 触发事件:
Change(确保输入值变化时立即触发计算)
- 名称:
步骤2:添加剩余金额计算动作
- 点击动态动作的
True Actions节点,添加Set Value动作:- 动作类型:
Set Value - 设置类型:
PL/SQL Function Body - PL/SQL函数体:
RETURN NVL(TO_NUMBER(:P13_PRICE), 0) - NVL(TO_NUMBER(:P13_DOWN_PAYMENT), 0); - 需要提交的项:
P13_PRICE, P13_DOWN_PAYMENT(必须提交这两个项到会话,确保PL/SQL能拿到最新输入值) - 受影响元素:
- 选择类型:
Items - 目标项:
P13_REST_AMOUNT(对应剩余金额的表单项)
- 选择类型:
- 动作类型:
步骤3:添加已付金额同步动作
- 在同一个动态动作的
True Actions下,再添加一个Set Value动作:- 动作类型:
Set Value - 设置类型:
PL/SQL Function Body - PL/SQL函数体:
RETURN NVL(TO_NUMBER(:P13_DOWN_PAYMENT), 0); - 需要提交的项:
P13_DOWN_PAYMENT - 受影响元素:
- 选择类型:
Items - 目标项:
P13_PAID_AMOUNT(对应已付金额的表单项)
- 选择类型:
- 动作类型:
步骤4:保存配置
完成上述设置后,保存动态动作,测试表单输入。
关键检查项
- 会话状态保护:确认
P13_DOWN_PAYMENT和P13_PAID_AMOUNT的Session State Protection设置为Unrestricted(或符合安全要求的非阻止状态),避免会话状态更新被拦截。 - 表单提交项:检查表单提交逻辑,确保
P13_DOWN_PAYMENT和P13_PAID_AMOUNT被包含在提交参数中,服务器能接收到这些值。 - 空值处理:PL/SQL中用
NVL处理空值,避免因输入为空导致的数值计算错误,保证会话状态能正确更新。
原配置的问题点
- 重复创建两个针对
P13_DOWN_PAYMENT的动态动作,会导致P13_PAID_AMOUNT的状态更新冲突,覆盖正确值。 - 部分动作未明确指定正确的受影响元素,导致会话状态与前端显示值脱节。
- 提交项配置不全,PL/SQL无法获取最新的表单输入值,会话状态未同步。
内容的提问来源于stack exchange,提问作者Rahat Hussain
相关产品推荐
相关产品推荐

