操作插件异常处理
金蝶云社区-马拴宝
马拴宝
0人赞赏了该文章 885次浏览 未经作者许可,禁止转载编辑于2017年10月10日 21:37:10

有些业务需求中需要在当前单据调用其他单据的操作服务,而且调用操作服务之后需要将对应的异常及操作校验信息反馈到当前单据上,如下描述怎么实现(比如当前单据审核后,需要调用下游单据的提交、审核等操作):
调用操作服务后,会得到一个IOperationResult,处理其中的异常信息、校验信息。
[code]public class Audit : AbstractOperationServicePlugIn
{
public override void EndOperationTransaction(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.EndOperationTransactionArgs e)
{
base.EndOperationTransaction(e);
DynamicObject[] dataEntitys = e.DataEntitys;
List destIds = null;
string destFormId = "ER_ExpReimbursement";
BusinessInfo bizInfo = MetaDataServiceHelper.GetFormMetaData(this.Context, destFormId).BusinessInfo;
for (int i = 0; i < dataEntitys.Length; i++)
{
DynamicObject dynamicObject = dataEntitys[i];
destIds = CommonServiceHelper.GetExpenseReimbIds(this.Context, Convert.ToInt64(dynamicObject["Id"]));
if (destIds == null || destIds.Count <= 0)
{
continue;
}
// 调用目标单的提交服务
SubmitService submitService = new SubmitService();
IOperationResult submitResult = submitService.Submit(this.Context, bizInfo, destIds.ToArray(), "Submit", OperateOption.Create());
string str = ResManager.LoadKDString("下游费用报销单提交失败,", "ExpenseReimb_SubmitError", "TP", new object[0]);
if (submitResult != null && !submitResult.IsSuccess)
{
string sMessage = str + this.ErrorMessage(submitResult);
throw new KDBusinessException(string.Empty, sMessage);
}
// 调用目标单的审核服务
str = ResManager.LoadKDString("下游费用报销单审核失败,", "ExpenseReimb_AuditError", "TP", new object[0]);
IAuditService auditService = new AuditService();// Kingdee.BOS.Contracts.ServiceFactory.GetAuditService(this.Context);
IOperationResult auditResult = auditService.Audit(this.Context, bizInfo, destIds.ToArray(), OperateOption.Create());
if (auditResult != null && !auditResult.IsSuccess)
{
string sMessage = str + this.ErrorMessage(auditResult);
throw new KDBusinessException(string.Empty, sMessage);
}
}
}

private string ErrorMessage(IOperationResult oresult)
{
StringBuilder stringBuilder = new StringBuilder();
foreach (OperateResult current in oresult.OperateResult)
{
stringBuilder.AppendLine(current.Message);
}
foreach (ValidationErrorInfo current2 in oresult.ValidationErrors)
{
stringBuilder.AppendLine(current2.Message);
}
return stringBuilder.ToString();
}
}[/code]