电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

二开案例.WebApi.缓存清理

来源:金蝶云社区作者:金蝶2024-09-2320

二开案例.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.缓存清理

【应用场景】直接去数据库改了基础资料数据,登录金蝶云星空,在业务单据上看到的对应基础资料数据还是修改前的数据,未及时刷新,此时,可...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信