请注意,本站并不支持低于IE8的浏览器,为了获得最佳效果,请下载最新的浏览器,推荐下载 Chrome浏览器
欢迎光临。交流群:166852192

orchard工作流中动作(Task)的定义 给百度推送文章


前一篇介绍了Task和Event,本节就来对Task进行应用。
定义 public class PostToBaiduActivity:Task{} 继承自Task.
一、来设置这个动作的名称:要重写Task的Name属性,如下
 public override string Name
        {
            get { return "PosttoBaidu"; }
        }
二、定义分类,重写Category
 public override LocalizedString Category
        {
            get { return T("Baidu"); }
        }
三、描述说明 Description
 public override LocalizedString Description
        {
            get { return T("给百度提交网址"); }
        }
四、返回所有可能的结果,重写GetPossibleOutcomes,
        public override IEnumerable<LocalizedString> GetPossibleOutcomes(WorkflowContext workflowContext, ActivityContext activityContext)
        {
            return new[] { T("成功") , T("失败")};
        }
当然具体返回什么结果,要在执行中根据情况返回。
五、是否可以执行,是否需要根据条件执行,可以重写CanExecute
如果这个工作流里没有内容,那肯定不能执行,如果有内容,但是没有外部访问的网址,那也不让它执行,如重写如下:
 public override bool CanExecute(WorkflowContext workflowContext, ActivityContext activityContext)
        {
            if (workflowContext.Content == null)
                return false;
            if (workflowContext.Content.As<AutoroutePart>() == null)
                return false;
            


            return true;
        }
六、具体的动作,要重写Execute
  public override IEnumerable<LocalizedString> Execute(WorkflowContext workflowContext, ActivityContext activityContext)
        {
            bool canSubmit = true;
            if (workflowContext.Content.As<AutoroutePart>() == null)
            {
                canSubmit = false;
            }
            var url =_wca.GetContext().CurrentSite.BaseUrl.TrimEnd('/')+"/"+ workflowContext.Content.As<AutoroutePart>().Path;
            bool successflag = false;

            if (canSubmit)
            {
                try
                {
                    var part = _wca.GetContext().CurrentSite.As<PostToBaiduSiteSettingPart>();
                    string formUrl = string.Format(PostToBaiduConfig.FormatPostUrl, part.Site, part.Token);


                    string formData = "";


                    //如果已经提交过,就不再提交;
                    if (_postToBaiduRecord.Count(x => (x.Url == url) && x.Success) > 0)
                    {
                        successflag = true;
                    }
                    else
                    {
                        formData += url;
                        byte[] postData = System.Text.Encoding.UTF8.GetBytes(formData);


                        // 设置提交的相关参数 
                        System.Net.HttpWebRequest request = System.Net.WebRequest.Create(formUrl) as System.Net.HttpWebRequest;
                        System.Text.Encoding myEncoding = System.Text.Encoding.UTF8;
                        request.Method = "POST";
                        request.KeepAlive = false;
                        request.AllowAutoRedirect = true;
                        request.ContentType = "text/plain";
                        request.UserAgent = "curl/7.12.1";
                        request.ContentLength = postData.Length;


                        // 提交请求数据 
                        System.IO.Stream outputStream = request.GetRequestStream();
                        outputStream.Write(postData, 0, postData.Length);
                        outputStream.Close();


                        System.Net.HttpWebResponse response;
                        System.IO.Stream responseStream;
                        System.IO.StreamReader reader;
                        BaiduResult result;
                        response = request.GetResponse() as System.Net.HttpWebResponse;
                        responseStream = response.GetResponseStream();
                        if (response.StatusCode == System.Net.HttpStatusCode.OK)
                        {
                            reader = new System.IO.StreamReader(responseStream, System.Text.Encoding.GetEncoding("UTF-8"));
                            result = _jsonConverter.Deserialize<BaiduResult>(reader.ReadToEnd());
                            // dynamic result = srcString;   //返回值赋值
                            reader.Close();
                            if (result.Error > 0 && !string.IsNullOrEmpty(result.Message))
                            {
                                successflag = false;
                                Logger.Error("给百度推送网址出错,ErrorCode:" + result.Error.ToString() + " Message: " + result.Message);
                            }
                            else
                            {
                                successflag = true;
                                part.Remain = result.Remain;
                                var record = new PostToBaiduRecord { Url = url, CreateTime = DateTime.Now, LastUpdate = DateTime.Now, UpdateNum = 1 };


                                if (result.NotSameSite != null && result.NotSameSite.Contains(url))
                                {
                                    record.Message = PostToBaiduConfig.NotSameSite;
                                    record.Success = false;
                                }
                                else if (result.NotValid != null && result.NotValid.Contains(url))
                                {
                                    record.Message = PostToBaiduConfig.NotValid;
                                    record.Success = false;
                                }
                                else
                                {
                                    record.Message = PostToBaiduConfig.Success;
                                    record.Success = true;
                                }
                                _postToBaiduRecord.Create(record);
                            }
                        }
                    }
                }
                catch //(Exception ex)
                {
                    successflag = false;
                  //  Logger.Error(ex, "给百度推送网址出错");


                }
            }
            if (successflag)
            {
                yield return T("成功");
            }
            else
            {
                yield return T("失败");
            }


        }
七、关于表单,由于这个流程不需要提供其它参数,所以不需要Form,可以重写如下,或者不重写,因为基类本身就是null
public override string Form
        {
            get
            {
                return null;
            }
        }
如果需要设置参数,则这里应该返回表单的shapename,然后通过实现 IFormProvider( Orchard.Forms.Services 空间下)来定义表单。
如上这个动作已经定义完了。
为了网站后台编辑工作流时不报404,可以在Styles文件夹下添加workflows-activity-postto-baidu.css 空文件
orchard的工作默认给每一动作或事件都添加有css文件,规则为workflows-activity-Name属性以每一个大写字母开始分隔,每一个之间加短线。

作者原创内容不容易,如果觉得内容不错,请点击右侧“打赏”,赏俩给作者花花,也算是对作者付出的肯定,也可以鼓励作者原创更多更好内容。
更多详情欢迎到QQ群 166852192 交流。