单据分录 有个字段是“基础资料属性”类型,引用物料的一个属性,单据在做提交后通过插件实现自动修改物料的这个属性值,结果提交后单据界面上显示的还是修改前的值,重新打开也一样,后来清理缓存后重新打开就是最新的值了,这个很明显是bug嘛,缓存用来提升性能,但是要设计合理啊,怎么样避免脏数据是使用缓存前首先要考虑的,针对这个问题大神们有什么高招啊?
解决方法:
1、请使用Kingdee.BOS.ServiceHelper.BusinessDataServiceHelper.Load获取基础资料数据
2、修改属性
3、使用Kingdee.BOS.ServiceHelper.BusinessDataServiceHelper.Save方法保存
代码示例:
string sql = "/*dialect*/\r\n"
+ "if exists(select top 1 1 from " + tableName + " t1 inner join t_BD_Material t2 on t2.FMaterialID=t1.FItemID where t1.FID=" + item["ID"].ToString() + " and t2.FJYStockStatus<>'K')" + " raiserror('存在非“空闲中”的仓库!',18,18)"
+ " select FItemID" + " from " + tableName + " where FID=" + item["ID"].ToString() ;
OQLFilter filter = new OQLFilter(); IEnumerable
DynamicObject[] goods = BusinessDataServiceHelper.Load(this.Context, "BD_MATERIAL", goodsFields, filter); foreach (DynamicObject doItem in goods) { doItem["FJYStockStatus"] = "Y"; }
BusinessDataServiceHelper.Save(this.Context, goods);
使用上述的方式可以自动更新缓存数据,但是在单据操作(例如:审核)后基础资料的数据不会立即在单据上更新,还需要单据插件的AfterUpdateViewState方法里执行this.View.Refresh()方法才会立即更新显示。
推荐阅读