二开-清除对应基础资料缓存/通过插件触发对应实体服务规则原创
金蝶云社区-墨白64
墨白64
10人赞赏了该文章 143次浏览 未经作者许可,禁止转载编辑于2024年07月09日 11:06:13

一,清除对应基础资料镜像模型缓存-结合视图使用

 public override void EndOperationTransaction(EndOperationTransactionArgs e)
 {
     if (this.FormOperation.Operation != "Save" || !this.OperationResult.IsSuccess) return;
     // 加载镜像模型的元数据            
     IMetaDataService metaService = ServiceHelper.GetService<IMetaDataService>();
     //清除镜像模型的缓存
     FormMetadata meta = metaService.Load(this.Context, formId) as FormMetadata;
     using (DataEntityCacheManager cacheManager = new DataEntityCacheManager(this.Context, meta.BusinessInfo.GetDynamicObjectType()))
     {
         //对应内码
         var RouterOperSeq = e.DataEntitys.Select(o => o["RouteOperSeq"] as DynamicObjectCollection).FirstOrDefault().ToList();
         var ids = RouterOperSeq.Select(p => p["id"].ToString()).ToList();
         if (ids.Count > 0)
         {
             cacheManager.RemoveCacheByPrimaryKeys(ids);
         }
     }
 }

二,操作服务插件创建视图,调用实体服务规则计算工时

var billView = this.CreateView("QPUB_BL_Parameter") as DynamicWebFormView;
billView.RuleContainer.RaiseDataChanged("F_BL_ENGPROCESS", billView.Model.DataObject, new BOSActionExecuteContext(billView));

/// <summary>
/// 创建单据视图  
/// </summary>
/// <param name="ctx"></param>
/// <param name="metaData"></param>
/// <returns></returns>
private IDynamicFormView CreateView(string formId)
{
    FormMetadata metadata = FormMetaDataCache.GetCachedFormMetaData(this.Context, formId);
    var OpenParameter = CreateOpenParameter(this.Context, metadata);
    var Provider = metadata.BusinessInfo.GetForm().GetFormServiceProvider(true);
    string importViewClass = "Kingdee.BOS.Web.Import.ImportBillView,Kingdee.BOS.Web";
    Type type = Type.GetType(importViewClass);
    IDynamicFormView view = (IDynamicFormView)Activator.CreateInstance(type);
    ((IDynamicFormViewService)view).Initialize(OpenParameter, Provider);
    return view;
}
/// <summary>
/// 创建输入参数
/// </summary>
/// <param name="ctx"></param>
/// <param name="metaData"></param>
/// <returns></returns>
private BillOpenParameter CreateOpenParameter(Context ctx, FormMetadata metaData)
{
    Form form = metaData.BusinessInfo.GetForm();
    BillOpenParameter openPara = new BillOpenParameter(form.Id, metaData.GetLayoutInfo().Id);
    openPara = new BillOpenParameter(form.Id, string.Empty);
    openPara.Context = ctx;
    openPara.ServiceName = form.FormServiceName;
    openPara.PageId = Guid.NewGuid().ToString();
    // 单据
    openPara.FormMetaData = metaData;
    openPara.LayoutId = metaData.GetLayoutInfo().Id;
    // 操作相关参数
    openPara.Status = OperationStatus.ADDNEW;
    openPara.PkValue = null;
    openPara.CreateFrom = CreateFrom.Default;
    openPara.ParentId = 0;
    openPara.GroupId = "";
    openPara.DefaultBillTypeId = null;
    openPara.DefaultBusinessFlowId = null;
    // 修改主业务组织无须用户确认
    openPara.SetCustomParameter("ShowConfirmDialogWhenChangeOrg", false);
    // 插件
    List<AbstractDynamicFormPlugIn> plugins = form.CreateFormPlugIns();
    openPara.SetCustomParameter(FormConst.PlugIns, plugins);
    return openPara;
}


赞 10