操作服务插件案例
`服务插件参数说明`
- 背景: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平台抽象了领域模型,针对领域模型定义各种操作并提供操作服务。但很多时候,内置的操作并不一定满足需要。...
点击下载文档
本文2024-09-16 18:19:53发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-21449.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章