操作服务插件案例

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

操作服务插件案例

`服务插件参数说明` - 背景:BOS平台抽象了领域模型,针对领域模型定义各种操作并提供操作服务。但很多时候,内置的操作并不一定满足需要。为此在APP服务层提供服务插件,以方便二次开发扩展应用。 - 操作插件主要有以下几种方法: - OnPrepareOperationServiceOption - BeforeDoSaveExecute - OnPreparePropertys - InitializeOperationResult - OnAddValidators - BeforeExecuteOperationTransaction - BeginOperationTransaction - EndOperationTransaction - RollbackData - AfterExecuteOperationTransaction - 操作插件的几种状态: - 操作执行前 - 操作执行后 - 事务开始前 - 事务开始后 - 事务结束前 - 事务结束后 以下所有的方法都是以这些状态进行分层。 - OnPrepareOperationServiceOption(操作选项设置事件 操作执行前 事务开始前) - BeforeDoSaveExecute(保存操作前事件 操作执行前 事务开始前) - OnPreparePropertys(数据包预加载事件 操作执行前 事务开始前) - InitializeOperationResult(初始化操作结果事件 操作之前前 事务开始前) - OnAddValidators(注册校验器事件 操作执行前 事务开始前) - BeforeExecuteOperationTransaction (执行操作事务前事件 操作执行前 事务开始前) - BeginOperationTransaction(调用操作事务前事件 操作执行前 事务开始后) - EndOperationTransaction(调用操作事务后事件 操作执行后 事务结束前) - RollbackData(操作失败后数据回滚事件 操作执行后 事务结束后) - AfterExecuteOperationTransaction (执行操作事务后事件 操作执行后 事务结束后) `实际案例` - 校验器 新增复选框字段 F_RDPB_ISPUSHDATA 是否拉取数据 新增文本字段 F_RDPB_CardNo 卡片编码 实现仅有勾选拉取数据且卡片编码不为空才可以通过校验器 ```csharp public override void OnAddValidators(AddValidatorsEventArgs e) { var operValidator = new OperValidator(); //是否需要校验,true需要 operValidator.AlwaysValidate = true; //校验单据头FBillHead operValidator.EntityKey = "FBillHead"; //加载校验器 e.Validators.Add(operValidator); private class OperValidator : AbstractValidator { public override void Validate(Kingdee.BOS.Core.ExtendedDataEntity[] dataEntities, ValidateContext validateContext, Kingdee.BOS.Context ctx) { foreach (ExtendedDataEntity dataEntity in dataEntities) { Boolean F_RDPB_ISPUSHDATA = Convert.ToBoolean(dataEntity.DataEntity["F_RDPB_ISPUSHDATA"]); string F_RDPB_CardNo = Convert.ToString(dataEntity.DataEntity["F_RDPB_CardNo"]); //判断到数据有错误 if (!F_RDPB_ISPUSHDATA || F_RDPB_CardNo.Trim() == string.Empty) { ValidationErrorInfo ValidationErrorInfo = new ValidationErrorInfo( string.Empty, dataEntity["Id"].ToString(), dataEntity.DataEntityIndex, dataEntity.RowIndex, dataEntity["Id"].ToString(), "是否拉取数据需要勾取且卡片编码不能为空!", "操作插件校验", ErrorLevel.Error); validateContext.AddError(null, ValidationErrorInfo); continue; } } } } } ``` - 调用第三方接口 调用第三方接口判断卡片编号是否收录于官方卡池(10000000,10000010,10000020,46986414,89631139,74677422....) ![2023-04-20-15-06-49-image.webp](/download/010024ca40b570bf40f8bfedb084183bb3a4.webp) 如果收录于卡池通过url地址进行下载 (https://images.ygoprodeck.com/images/cards_cropped/XXX.webp 如果此地址失效请尝试寻找其它的图片URL,比如百度图片...) 将错误和成功信息加入到返回值中 ```csharp public override void EndOperationTransaction(EndOperationTransactionArgs e) { int indexRow = 0; foreach (DynamicObject o in e.DataEntitys) { string msg = string.Empty; bool flag = true; string F_RDPB_CardNo = Convert.ToString(o["F_RDPB_CardNo"]); string url = string.Format("https://images.ygoprodeck.com/images/cards_cropped/{0}.webp",F_RDPB_CardNo); try { JsonGet(url); string filePath = string.Format("D:\\ygo\\{0}.webp", F_RDPB_CardNo);//本地路径 WebClient myWebClient = new WebClient(); myWebClient.DownloadFile(url, filePath); msg = string.Format("卡片{0}拉取成功!", F_RDPB_CardNo); } catch (Exception ex) { msg = string.Format("卡片{0}拉取失败!错误信息{1}请检查此卡段是否存在卡片!", F_RDPB_CardNo, ex.Message); flag = false; //continue; } finally { OperateResult val2 = new OperateResult(); val2.Message = msg; val2.Name = "卡片编码" + F_RDPB_CardNo; val2.Number = F_RDPB_CardNo; val2.PKValue = o["Id"]; val2.SuccessStatus = true; val2.MessageType = MessageType.Normal; if (!flag) { val2.SuccessStatus = false; val2.MessageType = MessageType.Warning; } this.OperationResult.OperateResult.Insert(indexRow, val2); indexRow++; } } } ``` - 弹窗返回值 处理系统自带的多余返回值 注:以上操作是绑定在空操作 【操作插件】 上 ```csharp public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) { base.AfterExecuteOperationTransaction(e); var result = this.OperationResult.OperateResult; for (int i = result.Count - 1; i >= 0; i--) { if (result[i].Message.Contains("操作插件成功")) { result.RemoveAt(i); } } //设置操作完成后显示操作结果            this.OperationResult.IsShowMessage = true; } ```

操作服务插件案例

`服务插件参数说明`- 背景:BOS平台抽象了领域模型,针对领域模型定义各种操作并提供操作服务。但很多时候,内置的操作并不一定满足需要。...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息