二开案例.WebApi.缓存清理

【应用场景】
直接去数据库改了基础资料数据,登录金蝶云星空,在业务单据上看到的对应基础资料数据还是修改前的数据,未及时刷新,此时,可通过设定某个程序主动调用WebApi,完成对指定的应用站点下的指定缓存块的缓存刷新。
【案例演示】
数据库直接改了物料名称,打开采购订单列表,能立即看到最新的物料数据。
【实现步骤】
<1>添加自定义WebApi接口类,实现缓存清理的功能,代码如下。
using Kingdee.BOS.App.Core;
using Kingdee.BOS.Core.Const;
using Kingdee.BOS.ServiceFacade.KDServiceFx;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using Kingdee.BOS.WebApi.ServicesStub;
using System.Collections.Generic;
namespace Jac.XkDemo.BOS.WebApi
{
/// <summary>
/// 【WebApi】缓存清理
/// </summary>
public class CacheManagerWebApiService : AbstractWebApiBusinessService
{
public CacheManagerWebApiService(KDServiceContext context)
: base(context)
{
//
}
/// <summary>
/// 清理缓存(整个基础资料的数据缓存全清)
/// </summary>
/// <param name="formIds">业务对象标识</param>
/// <returns></returns>
public bool ClearCacheByFormIds(List<string> formIds)
{
if (formIds == null || formIds.Count == 0)
{
return false;
}
var area = this.KDContext.Session.AppContext.GetAreaCacheKey();
foreach (var formId in formIds)
{
var metadata = FormMetaDataCache.GetCachedFormMetaData(this.KDContext.Session.AppContext, formId);
if (metadata != null)
{
CacheUtil.ClearCache(area, metadata.BusinessInfo.GetEntity(0).TableName);
CacheUtil.ClearCache(this.KDContext.Session.AppContext.DBId + formId, CacheRegionConst.BOS_QuickBaseDataCache);
}
}
return true;
}
/// <summary>
/// 清理缓存(只清理指定内码的数据缓存)
/// </summary>
/// <param name="formId">业务对象标识</param>
/// <param name="keys">数据内码</param>
public bool ClearCacheByPrimaryKeys(string formId, List<string> keys)
{
if (keys == null || keys.Count == 0)
{
return false;
}
var metadata = FormMetaDataCache.GetCachedFormMetaData(this.KDContext.Session.AppContext, formId);
if (metadata == null)
{
return false;
}
using (DataEntityCacheManager cacheManager = new DataEntityCacheManager(this.KDContext.Session.AppContext, metadata.BusinessInfo.GetDynamicObjectType()))
{
cacheManager.RemoveCacheByPrimaryKeys(keys);
}
CacheUtil.ClearCache(this.KDContext.Session.AppContext.DBId + formId, CacheRegionConst.BOS_QuickBaseDataCache);
return true;
}
}
}
<2>拷贝WebApi接口组件到应用站点的WebSite\Bin目录下,重启IIS,开发完毕。
接下来是验证我们新加的WebApi接口。
【WebApi单元测试示例】
<1>添加WebApi单元测试类,代码如下。
using Kingdee.BOS.WebApi.Client;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Collections.Generic;
namespace Jac.XkDemo.BOS.WebApi.Tests
{
[TestClass]
public class CacheManagerWebApiServiceTests
{
#region 测试参数
private string url = "http://localhost/k3cloud/";
private
二开案例.WebApi.缓存清理
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



