Dynamics Extentions BaseActivity

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);
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值