RAD Server 11中使用TEMSDataSetResource提交已删记录更新报参数缺失问题
问题原因
TEMSDataSetResource 不限制全表操作,报错原因是仅给GET请求配置了参数,更新类请求(提交删除、修改时的PUT/POST请求)没有携带COMPANYID参数,服务端执行查询校验时找不到对应参数。
你修改后的带WHERE条件的SELECT语句是资源的基础查询,不管是GET取数,还是提交更新前的记录匹配、元数据校验,服务端都会执行这条语句,要求参数全程可用。
解决方案
服务端配置
打开服务端的TEMSDataSetResource组件配置:
- 找到
Params属性,新增COMPANYID参数,将参数的Source属性设置为Request,这样服务端所有请求(GET/POST/PUT/DELETE)都会自动从HTTP请求参数中读取该值,无需单独给每个端点配置。 - 可选:如果参数为必传项,可将
Required属性设为True,拦截空参数的无效请求。
客户端配置
此前仅给GetEndpoint加了参数,提交更新时的请求不会复用该配置,改为给TEMSFireDACClient根级添加一次全局参数即可,所有请求都会自动携带:
// 客户端初始化时执行一次即可,无需每个按钮重复添加 Expenses.Params.Clear(); Expenses.Params.AddItem('CompanyID','10000080');
修改后原有按钮逻辑可简化:
- Button1直接调用
Expenses.GetData()即可,无需重复加参数 - Button3直接调用
Expenses.PostUpdates即可
额外问题说明
手动写删除端点遇到的Unicode转整数报错,是因为参数默认被识别为字符串类型,传参时明确指定参数类型即可解决:
// 传参时指定DataType为ftInteger Endpoint.Params.AddItem('EXPENSEID', 12345, ptInput, ftInteger);
内容的提问来源于stack exchange,提问作者Randy Sekura
相关产品推荐
相关产品推荐

