Dynamics 365/CRM 工作流插件基础扩展,插件继承此类后,可以简化一些基础服务的初始化
以下为基本使用方式,更多能力请自动探索
using lce.ext.providers;
using lce.mscrm.engine;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Workflow;
using Newtonsoft.Json;
using System;
using System.Activities;
using System.Collections.Generic;
namespace MSCRM.CRM.WorkflowActivities.VS.VehOrder
{
/// <summary>
/// test
/// </summary>
public class TestActivity : BaseActivity
{
[Output("Message")]
public OutArgument<string> Message { get; set; }
[Input("QueryData")]
public InArgument<string> QueryData { get; set; }
public override void HandleExecute(IOrganizationService service, IOrganizationService caller, ITracingService tracing, CodeActivityContext context, IWorkflowContext wfContext)
{
var query = QueryData.Get(context);
HandleLogic(service, context, wfContext.InitiatingUserId, query);
}
public void HandleLogic(IOrganizationService service, CodeActivityContext context, Guid userid, string query)
{
try
{
//do something.
Message.Set(context, ret.ToJson());
return;
}
catch (Exception ex)
{
ShowErrorMessage($"{ex.Message}");
}
}
}
}
以下为BaseActivity扩展类源代码
/* file name:lce.mscrm.engine.BaseActivity.cs
* author:lynx lynx.kor@163.com @ 2018/10/28 13:13:00
* copyright (c) 2020 Copyright@lynxce.com
* desc:
* > add description for BaseActivity
* revision:
*
*/
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Workflow;
using System;
using System.Activities;
using System.ServiceModel;
namespace lce.mscrm.engine
{
public abstract class BaseActivity : CodeActivity
{
/// <summary>
/// 工作流回滚,弹出消息。
/// </summary>
/// <param name="msg">消息类容</param>
public static void ShowErrorMessage(string msg)
{
throw new InvalidPluginExecutionException(msg);
}
/// <summary>
/// 工作流继承 BaseActivity 后实现些方法,进行业务处理
/// </summary>
public abstract void HandleExecute(IOrganizationService service, IOrganizationService caller, ITracingService tracing
, CodeActivityContext context, IWorkflowContext wfContext);
/// <summary>
/// </summary>
/// <param name="context">上下文</param>
protected override void Execute(CodeActivityContext context)
{
var tracing = context.GetExtension<ITracingService>(); //跟踪服务
var wfContext = context.GetExtension<IWorkflowContext>(); //工作流上下文
var factory = context.GetExtension<IOrganizationServiceFactory>(); //服务工厂
var caller = factory.CreateOrganizationService(wfContext.UserId); //用户权限服务
var service = factory.CreateOrganizationService(null); //管理员权限服务
try
{
//UserId = wfContext.UserId;
HandleExecute(service, caller, tracing, context, wfContext);
}
catch (InvalidPluginExecutionException ex)
{
throw ex;
}
catch (FaultException<OrganizationServiceFault> ex)
{
var msg = $"业务错误:{ex.Message}";
if (null != ex.InnerException)
msg = $"{msg}=>{ex.InnerException.Message}";
tracing.Trace($"业务错误:{msg}{ex.StackTrace}");
//LogExt.e(msg, ex, $"activity.{wfContext.MessageName}");
throw new InvalidPluginExecutionException(msg);
}
catch (Exception ex)
{
var msg = $"系统错误:{ex.Message}";
if (null != ex.InnerException)
msg = $"{msg}=>{ex.InnerException.Message}";
tracing.Trace($"系统内部错误:{msg}{ex.StackTrace}");
//LogExt.e(msg, ex, $"activity.{wfContext.MessageName}");
throw new InvalidPluginExecutionException(msg);
}
}
}
}