Beispiel #1
0
        /// <summary>
        /// 将Record添加到subprocess
        /// </summary>
        private static void Post_processSubprocess(IEvent ev, IDictionary <string, string> record)
        {
            if (record == null)
            {
                return;
            }

            CSubProcessEvent sp = (CSubProcessEvent)ev;

            List <UI_MISSION> miss = GetHistoryMissions(sp.WfEntityId);

            WorkFlows wfs = new WorkFlows();

            foreach (UI_MISSION mi in miss)
            {
                List <Process_Record> prs = new List <Process_Record>();
                foreach (var re in record)
                {
                    Process_Record pr = new Process_Record();
                    pr.Re_Name  = re.Key;
                    pr.Re_Value = re.Value;
                    prs.Add(pr);
                }
                wfs.LinkRecordInfoToMiss(mi.Miss_Id, prs);
            }
            //SubmitSignal(sp.WfEntityId, new Dictionary<string, string>(), record);
        }
Beispiel #2
0
		/// <summary>
		/// 从XML中解析出事件列表(Events)
		/// </summary>
		/// <param name="xmlNode"></param>
		private void ParseEvents(XmlNode xmlNode){
            if (xmlNode.Name != "events")
                return;

            foreach (XmlNode ev in xmlNode.ChildNodes)
            {
                if (ev.Name != "event")
                    continue;
                switch (ev.Attributes["type"].Value)
                {
                    case "combevent":
                        CCombEvent ce = new CCombEvent(this);
                        ce.InstFromXmlNode(ev);
                        m_events.Add(ce.name, ce);
                        break;

                    case "endevent":
                        CEndEvent ee = new CEndEvent(this);
                        ee.InstFromXmlNode(ev);
                        m_events.Add(ee.name, ee);
                        break;

                    case "startevent":
                        CStartEvent se = new CStartEvent(this);
                        se.InstFromXmlNode(ev);
                        m_events.Add(se.name, se);
                        break;

                    case "normlevent":
                    case "normalevent":
                        CNormlEvent ne = new CNormlEvent(this);
                        ne.InstFromXmlNode(ev);
                        m_events.Add(ne.name, ne);
                        break;

                    case "subprocess":
                        CSubProcessEvent sp = new CSubProcessEvent(this);
                        sp.InstFromXmlNode(ev);
                        m_events.Add(sp.name, sp);
                        break;

                    case "loopevent":
                        CLoopEvent le = new CLoopEvent(this);
                        le.InstFromXmlNode(ev);
                        m_events.Add(le.name, le);
                        break;

                    default:
                        break;
                }
            }
		}
Beispiel #3
0
        /// <summary>
        /// 检查SubProcess的状态
        /// </summary>
        private void CheckSubEventStatus()
        {
            //如果当前状态是SubProcess, 则要检测子时间是否已经执行完毕,
            //若已经执行完毕,则需要将返回值从子事件中取回
            if (m_events[m_courrentEvent].GetType().Name == "CSubProcessEvent")
            {
                CSubProcessEvent subE = (CSubProcessEvent)(m_events[m_courrentEvent]);
                WorkFlows wfs = new WorkFlows();

                WorkFlow_Entity wfe = wfs.GetWorkFlowEntity(subE.WfEntityId);
                //自流程已执行完成
                if (wfe.WE_Status == WE_STATUS.DONE)
                {
                    CWorkFlow subWf = new CWorkFlow();
                    XmlDocument doc = new XmlDocument();
                    doc.LoadXml(Encoding.Default.GetString(wfs.GetWorkFlowEntity(subE.WfEntityId).WE_Binary));
                    subWf.InstFromXmlNode(doc.DocumentElement);
                    subWf.EntityID = subE.WfEntityId;

                    IEvent subEnd = subWf.GetCurrentEvent();
                    //将变量返回回来
                    foreach (var p in subE.m_paramsFrom)
                    {
                        subE.paramlist[p.Key].value = subEnd.paramlist[p.Value].value;
                    }
                    //若子工作流的工作方式为串行, 则父工作流在子流程完成后继续向下执行
                    if (subE.WorkingMode == "serial")
                    {
                        StateTransfer("");
                        if (m_events[m_courrentEvent].GetType().Name == "CEndEvent")
                        {
                            //将该工作流置为已完成(结束)
                            UpdateEntity(WE_STATUS.DONE);
                            //2016.1.3 添加子事件返回

                        }
                        else
                            //更新工作流到数据库,不改变状态
                            UpdateEntity(WE_STATUS.INVALID);
                    }
                }


            }
        }