public static void ShowObject(Nodes.Node.ObjectPair obj) { BehaviorTreeList behaviorTreeList = BehaviorManager.Instance as BehaviorTreeList; if (behaviorTreeList == null) return; Nodes.Node node = null; Attachments.Attachment attach = null; if (obj.Obj is Nodes.Node) { node = (Nodes.Node)obj.Obj; } else if (obj.Obj is Attachments.Attachment) { attach = (Attachments.Attachment)obj.Obj; node = attach.Node; } if (node != null) { behaviorTreeList.ShowNode(node, obj.Root); if (BehaviorTreeViewDock.LastFocused != null) { BehaviorTreeView behaviorTreeView = BehaviorTreeViewDock.LastFocused.BehaviorTreeView; if (behaviorTreeView != null) { behaviorTreeView.SelectedNodePending = node; behaviorTreeView.SelectedAttachmentPending = attach; behaviorTreeView.Refresh(); } } } }
public static string hitJoint(Nodes.Node n, Rectangle rect, int x, int y, bool inputsOnly) { //assume using a padded rect //missed the balls. if (x > rect.Left + ballSize && x < rect.Right - ballSize) return null; rect.Y += nodeTitleFont.Height; if (n.getExtra() != null) { rect.Y += nodeExtraFont.Height; } if (y < rect.Y) return null; Point pos; foreach (var kvp in n.getProperties()) { if ((kvp.Value.isInput && inputsOnly) || (kvp.Value.isOutput && !inputsOnly)) { pos = getJointPos(n, kvp.Key, inputsOnly); pos.X -= x; pos.Y -= y; //intentionally dividing by 2 instead of 4 to expand the 'okay' selection radius. if (pos.X * pos.X + pos.Y * pos.Y < ballSize * ballSize / 2) { return kvp.Key; } } } return null; }
public Candidate(ServerIdentifier serverIdentifier, IElectionTimer electionTimer, IObserver<RequestVoteMessage> requestVote, IObservable<RequestVoteResultMessage> voteReply, IVotingSystem votingSystem, IElection election, ILogReplication logReplication, Nodes nodes, ILoggerFactory loggerFactory, RaftOptions options) { isDispose = false; _electionTimer = electionTimer; _requestVote = requestVote; _voteReply = voteReply; _votingSystem = votingSystem; _serverIdentifier = serverIdentifier; _election = election; _options = options; _logger = loggerFactory.CreateLogger(nameof(Candidate) + " " + serverIdentifier); _election.CurrentTerm++; _election.VotedFor = _serverIdentifier.Id; _logReplication = logReplication; _nodes = nodes; if (_options.UseLogging) _logger.LogInformation($"{nameof(ServerStateType.Candidate)}"); RequestElection(); }
/// <summary> /// Creates a new file manager. /// </summary> /// <param name="filename">The filename we want to load from or save to.</param> /// <param name="node">The behaviour we want to save. For loading use null.</param> public FileManager(string filename, Nodes.BehaviorNode node) { Debug.Check( Path.IsPathRooted(filename) ); _filename = filename; _behavior = node; }
protected Attachment(Nodes.Node node, string label, string description) { _node = node; _label = label; _baselabel = label; _description = description; }
public override void RenderChildren(IParrotWriter writer, Nodes.Statement statement, IRendererFactory rendererFactory, IDictionary<string, object> documentHost, object model, string defaultTag = null) { if (string.IsNullOrEmpty(defaultTag)) { defaultTag = DefaultChildTag; } //get model from parameter //required - do not remove if (statement.Parameters != null && statement.Parameters.Count == 1) { var localModel = GetLocalModel(documentHost, statement, model); if (localModel is IEnumerable) { //create locals object to handle local values to the method Locals locals = new Locals(documentHost); IList<object> items = ToList(model as IEnumerable); for (int i = 0; i < items.Count; i++) { var localItem = items[i]; locals.Push(IteratorItem(i, items)); base.RenderChildren(writer, statement.Children, rendererFactory, documentHost, defaultTag, localItem); locals.Pop(); } } } else { base.RenderChildren(writer, statement.Children, rendererFactory, documentHost, defaultTag, model); } }
public void SetPar(ParInfo par, Nodes.Node rootNode, bool isNewPar) { Debug.Check(par != null && rootNode != null); _isNewPar = isNewPar; _initialized = false; this.Text = isNewPar ? Resources.NewPar : Resources.EditPar; _par = par; _parTemp = par.Clone(); _rootNode = rootNode; setParTypes(); if (par != null) { _isArray = Plugin.IsArrayType(par.Type); Type type = _isArray ? par.Type.GetGenericArguments()[0] : par.Type; nameTextBox.Text = par.Name; arrayCheckBox.Checked = _isArray; typeComboBox.Text = Plugin.GetMemberValueTypeName(type); descTextBox.Text = par.BasicDescription; setValue(type); } enableOkButton(); _initialized = true; }
private static Nodes.Assignment ArrayAssignment(Lexer.Lexem currLexem, Nodes.Node.Coords coords) { Nodes.Expression index = Expr(); if (Lexer.LookAhead().LexType != Lexer.LexType.CloseSquadBracket) ErrorList.Add(new Error(ParserException.NeedCloseSquadBracket, Lexer.LookBack().EndCoords)); else Lexer.NextLexem(); if (Lexer.LookAhead().LexType == Lexer.LexType.EqualSign) { Lexer.NextLexem(); Nodes.Expression value = Expr(); /*if (Lexer.LookAhead().LexType != Lexer.LexType.Semicolon) ErrorList.Add(new Error(ParserException.NeedSemicolon, Lexer.LookBack().EndCoords)); else Lexer.NextLexem();*/ Nodes.Assignment result = new Nodes.Assignment(new Nodes.ElementOfArray(currLexem.VarName, index), value, coords); result.Head = result; result.Tail = result; return result; } else { while (Lexer.LookBack().LexType != Lexer.LexType.Variable) Lexer.RollBack(); Lexer.RollBack(); return null; } }
protected override Tags.Base ResolveSpecific(Nodes.Base node) { if (node is Nodes.Mapping) return new Tags.Mapping(); if (node is Nodes.Sequence) return new Tags.Sequence(); // overkill var scalarNode = (Nodes.Scalar)node; var value = scalarNode.Content; if (nullExpression.IsMatch(value)) return new Tags.Null(); if (boolExpression.IsMatch(value)) return new Tags.Boolean(); if (intExpression.IsMatch(value)) return new Tags.Integer(); if (floatExpression.IsMatch(value)) return new Tags.FloatingPoint(); return new Tags.String(); }
/// <summary> /// Creates an instance of <see cref="NodeUserControl"/> class. /// </summary> public NodeUserControl() { InitializeComponent(); m_dataContext = new Nodes(16); m_dataContext.PropertyChanged += new PropertyChangedEventHandler(ViewModel_PropertyChanged); this.DataContext = m_dataContext; }
private object ConstructDocument(Nodes.Base node) { var data = this.ConstructObject(node); this.constructedObjects.Clear(); this.recursiveObjects.Clear(); return data; }
public void InspectObject(AgentType agentType, string agentFullname, Nodes.Node node) { _agentFullname = agentFullname; preLayout(); deleteAllRowControls(); if (agentType != null) { IList<PropertyDef> properties = agentType.GetProperties(); foreach (PropertyDef p in properties) { addRowControl(p, null); } } else if (node != null) { List<ParInfo> allPars = node.Pars; foreach (ParInfo par in allPars) { addRowControl(null, par); } } postLayout(); }
public string type = ""; // type of undo operation (delete, create, edit, move, changeLineColor, changeLineWidth, changeNodeColor) #endregion Fields #region Constructors /*************************************************************************************************************************/ // CONSTRUCTORS public UndoOperation( string type, Nodes nodes = null, Lines lines = null, int group = 0, Position position = null, int layer = 0 ) { this.type = type; this.group = group; this.position.set(position); this.layer = layer; if (nodes != null) { foreach (Node node in nodes) { this.nodes.Add(new Node(node)); } } if (lines != null) { foreach (Line line in lines) { this.lines.Add(new Line(line)); } } }
public Assignment(ElementOfArray array, Nodes.Expression expr, Node.Coords coords) { Var = null; Value = expr; Array = array; this.Coords = coords; }
public Assignment(Variable var, Nodes.Expression expr, Node.Coords coords) { Var = var; Value = expr; Array = null; this.Coords = coords; }
protected override Tags.Base ResolveSpecific(Nodes.Base node) { if (node is Nodes.Mapping) return new Tags.Mapping(); if (node is Nodes.Sequence) return new Tags.Sequence(); var scalarNode = (Nodes.Scalar)node; var value = scalarNode.Content; switch (value) { case "null": return new Tags.Null(); case "true": case "false": return new Tags.Boolean(); } if (intExpression.IsMatch(value)) return new Tags.Integer(); if (floatExpression.IsMatch(value)) return new Tags.FloatingPoint(); return null; }
/// <summary> /// Creates a new exporter. /// </summary> /// <param name="node">The behaviour hich will be exported.</param> /// <param name="outputFolder">The folder we want to export the behaviour to.</param> /// <param name="filename">The relative filename we want to export to. You have to add your file extension.</param> public Exporter(Nodes.BehaviorNode node, string outputFolder, string filename, List<string> includedFilenames = null) { _node = node; _outputFolder = outputFolder; _filename = filename; _includedFilenames = includedFilenames; }
public static Rectangle getPaddedRect(Nodes.Node n) { Rectangle r = getRect(n); r.X -= ballSize / 2; r.Y -= ballSize / 2; r.Width += ballSize; r.Height += ballSize; return r; }
protected override Tags.Base ResolveSpecific(Nodes.Base node) { return this .Tags .Reverse() .Where(t => t.Validate(node)) .First(); }
public static IEnumerable<INode> Propagate(Nodes nodes) { while (!nodes.IsEmpty) { var node = nodes.Pop(); yield return node; nodes.Push(React(node)); } }
/// <summary> /// Returns whether a behaviour was checked to be saved or not. /// </summary> /// <param name="node">The behaviour you want to check.</param> /// <returns>Returns true if the user wants the behaviour to be saved.</returns> internal bool IsSelected(Nodes.BehaviorNode node) { foreach(object obj in behaviorListBox.CheckedItems) { if (node == obj) { return true; } } return false; }
public override void Render(Parrot.Infrastructure.IParrotWriter writer, IRendererFactory rendererFactory, Nodes.Statement statement, IDictionary<string, object> documentHost, object model) { var localModel = GetLocalModel(documentHost, statement, model); if (localModel is bool && (bool)localModel) { RenderChildren(writer, statement.Children, rendererFactory, documentHost, base.DefaultChildTag, model); } }
/// <summary> /// Creates an attachment from a given type. /// </summary> /// <param name="type">The type we want to create an attachment of.</param> /// <param name="node">The node this will be added to.</param> /// <returns>Returns the created event.</returns> public static Attachment Create(Type type, Nodes.Node node) { Debug.Check(type != null); Attachment atta = (Attachment)type.InvokeMember(string.Empty, System.Reflection.BindingFlags.CreateInstance, null, null, new object[] { node }); if (atta == null) { throw new Exception(Resources.ExceptionMissingEventConstructor); } return atta; }
internal static BehaviorTreeView GetBehaviorTreeView(Nodes.BehaviorNode node) { foreach(BehaviorTreeViewDock dock in __instances) { if(dock.BehaviorTreeView.RootNode ==node) return dock.BehaviorTreeView; } return null; }
/// <summary> /// Creates an event from a given type. /// </summary> /// <param name="type">The type we want to create an event of.</param> /// <param name="node">The node the event will be added to.</param> /// <returns>Returns the created event.</returns> public static Event Create(Type type, Nodes.Node node) { Debug.Check(type !=null); Event evnt= (Event)type.InvokeMember(string.Empty, System.Reflection.BindingFlags.CreateInstance, null, null, new object[] { node }); if(evnt ==null) throw new Exception(Resources.ExceptionMissingEventConstructor); return evnt; }
public ParseTree(string source, Nodes.ParseTreeNode rootNode) { if (source == null) { throw new ArgumentNullException("source"); } this.source = source; this.RootNode = rootNode; }
public HelixWatch3DNodeViewModel(Nodes.Watch3D node, Watch3DViewModelStartupParams parameters): base(parameters) { watchNode = node; IsResizable = true; RegisterPortEventHandlers(node); watchNode.Serialized += SerializeCamera; watchNode.Deserialized += watchNode_Deserialized; Name = string.Format("{0} Preview", node.GUID); }
public static void Clear(Nodes.BehaviorNode behavior) { Debug.Check(behavior != null); string behaviorFilename = behavior.Filename; if (!string.IsNullOrEmpty(behaviorFilename) && _undoDataDict.ContainsKey(behaviorFilename)) { UndoQueue undoQueue = _undoDataDict[behaviorFilename]; undoQueue.Clear(); _undoDataDict.Remove(behaviorFilename); } }
public override void Visit(AccessColumnNode node) { Nodes.Push(new AccessColumnNode(NamingHelper.ToColumnName(node.Alias, node.Name), string.Empty, node.ReturnType, TextSpan.Empty)); }
protected void Pipe_ServerPush(PipeConnection connection, int length) { try { var msg = PushMessageBase.Parser.ParseFrom(connection.Buffer, 0, length); switch (msg.Type) { case PushMessageID.UpdateUser: UserInfo = msg.DataUser; break; case PushMessageID.UpdateTunnel: Dispatcher.Invoke(() => { foreach (var t in Tunnels) { if (t.Id == msg.DataTunnel.Id) { t.Proto = msg.DataTunnel; t.SetNodeName(Nodes.ToDictionary(k => k.Id, v => v.Name)); break; } } }); break; case PushMessageID.UpdateTunnels: LoadTunnels(msg.DataTunnels); break; case PushMessageID.UpdateNodes: Dispatcher.Invoke(() => { Nodes.Clear(); var map = new Dictionary <int, string>(); foreach (var n in msg.DataNodes.Nodes) { Nodes.Add(new NodeModel(n)); map.Add(n.Id, n.Name); } foreach (var t in Tunnels) { t.SetNodeName(map); } }); break; case PushMessageID.AppendLog: Dispatcher.Invoke(() => { foreach (var l in msg.DataLog.Data) { Log(l); } }); break; case PushMessageID.PushUpdate: Update = msg.DataUpdate; break; case PushMessageID.PushConfig: Config = msg.DataConfig; break; } } catch { } }
public void InsertBaseNode(int index, BaseNode node) { Nodes.Insert(index, node); ProcessMode(node); }
public Node GetNode(int id) { return(Nodes.FirstOrDefault(x => x.NodeId == id)); }
public ScriptNode Add(ScriptNode node) { Nodes.Add(node); return(node); }
protected Tree(TreeNode treeNode, IGitUICommandsSource uiCommands) { Nodes = new Nodes(this); _uiCommandsSource = uiCommands; TreeViewNode = treeNode; }
//----------------------------------------------------------------------------- public void Init(CResultatRequeteRechercheObjet resultat) { m_resultat = resultat; Nodes.Clear(); FillNodes(Nodes, resultat.ArbreResultats); }
private void PulseMakerRunStarted() { var nodesToUpdate = Nodes.Where(n => n.CanUpdatePeriodically); MarkNodesAsModifiedAndRequestRun(nodesToUpdate, true); }
public void RemoveNode(NodeInfo node) { Nodes.Remove(node); node.OnClosed -= OnClosed; node.OnMessage -= OnMessage; }
public void AddNode(NodeInfo node) { Nodes.Add(node); node.OnClosed += OnClosed; node.OnMessage += OnMessage; }
public OutputNode GetOutputNode() { return((OutputNode)(Nodes.FirstOrDefault(x => x is OutputNode))); }
public int WriteDotFile() { List <HasseNode> Nodes; if (subset != null) { Nodes = subset; } else { Nodes = NodeCollection.Values.ToList(); } /* * Nodes = new List<HasseNode> (); * foreach (HasseNode N in NodeCollection.Values ) * { * if (N.KeyString.Equals ("discrimination" ) ){ * N.GetThisAndAllAbove(Nodes,0); * } * } */ List <HasseNode> Nodes2 = new List <HasseNode>(Nodes); Nodes.Clear(); foreach (HasseNode N in Nodes2) { if (N.LevelFromRoot <= FilterMaxLevelFromRoot) { Nodes.Add(N); } } //Nodes.Sort(); // compare is on key strings OpenFile(FilenameAndPath); System.IO.StreamWriter LogFile = new System.IO.StreamWriter(@"C:\Users\ssampath\Documents\HasseDiagramOutput\log.txt", false); int EdgeCount = 0; int VisitCode = new System.Random().Next(); foreach (HasseNode Node in Nodes) { LogFile.WriteLine(Node.LabelText + "\t" + Node.KeyString); WriteNode(Node); } foreach (HasseNode Node in Nodes) { foreach (HasseEdge E in Node.EdgesToCovered) { if (!E.IsVisited(VisitCode)) // avoid duplication { WriteEdge(E); E.Visit(VisitCode); EdgeCount++; } } } CloseFile(); LogFile.Close(); return(EdgeCount); }
public ReceivedTreeNode(TreeNode[] subNode) { Text = CultureService.Instance.GetString(CultureText.node_Received_Text); Nodes.AddRange(subNode); SelectedImageKey = ImageKey = @"arrow_down"; }
public void Update(int i, int value) { Nodes.Remove(i); Values[i] = value; Nodes.Add(i); }
public DuoNodes(Nodes v1, Nodes v2) { Val1 = v1; Val2 = v2; }
public void Read(Stream iStream, BXML_TYPE iType) { if (iType == BXML_TYPE.BXML_PLAIN) { Signature = new byte[8] { (byte)'L', (byte)'M', (byte)'X', (byte)'B', (byte)'O', (byte)'S', (byte)'L', (byte)'B' }; Version = 3; FileSize = 85; Padding = new byte[64]; Unknown = true; OriginalPathLength = 0; // NOTE: keep whitespace text nodes (to be compliant with the whitespace TEXT_NODES in bns xml) // no we don't keep them, we remove them because it is cleaner Nodes.PreserveWhitespace = Keep_XML_WhiteSpace; Nodes.Load(iStream); // get original path from first comment node //fixed 18-08 XmlNode node = null; try { node = Nodes.DocumentElement.ChildNodes.OfType <XmlComment>().First(); } catch { } finally { if (node != null && node.NodeType == XmlNodeType.Comment) { string Text = node.InnerText; OriginalPathLength = Text.Length; OriginalPath = Encoding.Unicode.GetBytes(Text); Xor(OriginalPath, 2 * OriginalPathLength); if (Nodes.PreserveWhitespace && node.NextSibling.NodeType == XmlNodeType.Whitespace) { Nodes.DocumentElement.RemoveChild(node.NextSibling); } } else { OriginalPath = new byte[2 * OriginalPathLength]; } } } if (iType == BXML_TYPE.BXML_BINARY) { Signature = new byte[8]; BinaryReader br = new BinaryReader(iStream); br.BaseStream.Position = 0; Signature = br.ReadBytes(8); Version = br.ReadInt32(); FileSize = br.ReadInt32(); Padding = br.ReadBytes(64); Unknown = br.ReadByte() == 1; OriginalPathLength = br.ReadInt32(); OriginalPath = br.ReadBytes(2 * OriginalPathLength); AutoID = 1; ReadNode(iStream); // add original path as first comment node byte[] Path = OriginalPath; Xor(Path, 2 * OriginalPathLength); XmlComment node = Nodes.CreateComment(Encoding.Unicode.GetString(Path)); Nodes.DocumentElement.PrependChild(node); XmlNode docNode = Nodes.CreateXmlDeclaration("1.0", "utf-8", null); Nodes.PrependChild(docNode); if (FileSize != iStream.Position) { throw new Exception(String.Format("Filesize Mismatch, expected size was {0} while actual size was {1}.", FileSize, iStream.Position)); } } }
protected Node(Tree tree) { Nodes = new Nodes(tree); }
private void ReadNode(Stream iStream, XmlNode parent = null) { XmlNode node = null; BinaryReader br = new BinaryReader(iStream); int Type = 1; if (parent != null) { Type = br.ReadInt32(); } if (Type == 1) { node = Nodes.CreateElement("Text"); int ParameterCount = br.ReadInt32(); for (int i = 0; i < ParameterCount; i++) { int NameLength = br.ReadInt32(); byte[] Name = br.ReadBytes(2 * NameLength); Xor(Name, 2 * NameLength); int ValueLength = br.ReadInt32(); byte[] Value = br.ReadBytes(2 * ValueLength); Xor(Value, 2 * ValueLength); ((XmlElement)node).SetAttribute(Encoding.Unicode.GetString(Name), Encoding.Unicode.GetString(Value)); } } if (Type == 2) { node = Nodes.CreateTextNode(""); int TextLength = br.ReadInt32(); byte[] Text = br.ReadBytes(TextLength * 2); Xor(Text, 2 * TextLength); ((XmlText)node).Value = Encoding.Unicode.GetString(Text); } if (Type > 2) { throw new Exception("Unknown XML Node Type"); } bool Closed = br.ReadByte() == 1; int TagLength = br.ReadInt32(); byte[] Tag = br.ReadBytes(2 * TagLength); Xor(Tag, 2 * TagLength); if (Type == 1) { node = RenameNode(node, Encoding.Unicode.GetString(Tag)); } int ChildCount = br.ReadInt32(); AutoID = br.ReadInt32(); AutoID++; for (int i = 0; i < ChildCount; i++) { ReadNode(iStream, node); } if (parent != null) { if (Keep_XML_WhiteSpace || Type != 2 || !String.IsNullOrWhiteSpace(node.Value)) { parent.AppendChild(node); } } else { Nodes.AppendChild(node); } }
public IList <ScriptNode> MergeWith(Script script, float x, float y) { var nodeMap = new Dictionary <int, int>(); var groupMap = new Dictionary <int, int>(); var newNodes = new List <ScriptNode>(); foreach (var group in script.Groups) { var newGroup = group.CloneNew(); Groups.Add(newGroup); groupMap[group.Id] = newGroup.Id; } foreach (var node in script.Nodes) { var newNode = node.CloneNew(); if (newNode.GroupId != 0) { newNode.GroupId = groupMap[newNode.GroupId]; } newNodes.Add(newNode); Nodes.Add(newNode); nodeMap[node.Id] = newNode.Id; } foreach (var newNode in newNodes) { foreach (var pin in newNode.InputPins) { if (pin.Connection != null) { pin.Connection = new Connection(nodeMap[pin.Connection.NodeId], pin.Connection.PinId); } } foreach (var pin in newNode.ExitPins) { if (pin.Connection != null) { pin.Connection = new Connection(nodeMap[pin.Connection.NodeId], pin.Connection.PinId); } } } // Transfer layout where it's known var nodesWithoutLayout = new HashSet <int>(newNodes.Select(_ => _.Id)); if (script.Layout != null && script.Layout.Nodes.Count > 0) { Layout = Layout ?? new ScriptLayout(); var left = script.Layout.Nodes.Select(_ => _.X).Min(); var top = script.Layout.Nodes.Select(_ => _.Y).Min(); foreach (var scriptNodeLayout in script.Layout.Nodes) { var layout = scriptNodeLayout.Clone(); int targetNodeId; if (nodeMap.TryGetValue(layout.NodeId, out targetNodeId)) { layout.NodeId = targetNodeId; layout.X += x - left; layout.Y += y - top; Layout.Nodes.Add(layout); nodesWithoutLayout.Remove(layout.NodeId); } } } // Now process the rest of the nodes { foreach (var i in nodesWithoutLayout) { var layout = new ScriptNodeLayout(); layout.NodeId = i; layout.X += x; layout.Y += y; x += 10; Layout.Nodes.Add(layout); } } return(newNodes); }
/// <summary> /// Deploys an execution into the cluster. /// </summary> /// <param name="assemblyName">The full name of the assembly.</param> /// <param name="typeName">The full name of the type.</param> /// <param name="methodName">The full name of the method.</param> /// <param name="param">the serialized parameter object.</param> /// <param name="contextid">The context id of this execution.</param> /// <param name="domainKey">The domain Key of this domain.</param> public void Execute(string assemblyName, string typeName, string methodName, byte[] param, string contextid, string domainKey) { ExecutionContext context = new ExecutionContext(assemblyName, typeName, methodName, param, contextid, domainKey); Nodes.BestNode(domainKey).Execute(context); }
/// <summary> /// Add the children nodes of a particular node in the tree. /// While adding nodes if a match is found for objToSelect then nodeRepresentingCurrentChoice assigned to it /// and is returned. Otherwise if no node in the tree matches objToSelect this method returns null. /// </summary> public virtual LabelNode AddChildrenAndLookForSelected(ICmObject objToSelect, Stack <ICmObject> ownershipStack, IEnumerable <ICmObject> chosenObjs) { LabelNode nodeRepresentingCurrentChoice = null; // JohnT: if this.Nodes[0] is not a LabelNode, it is a dummy node we added so that // its parent LOOKS like something we can expand. That is the usual case for a node // we can expand. Therefore finding one of those, or finding more or less than one // node, is evidence that we haven't previously computed the real children of this, // and should do so. bool fExpanded = Nodes.Count != 1 || (Nodes[0] as LabelNode) != null; if (!fExpanded) { Nodes.Clear(); nodeRepresentingCurrentChoice = AddSecondaryNodesAndLookForSelected(this, Nodes, nodeRepresentingCurrentChoice, objToSelect, ownershipStack, chosenObjs); foreach (ObjectLabel label in ((ObjectLabel)Tag).SubItems) { if (!WantNodeForLabel(label)) { continue; } LabelNode node = Create(label, m_stylesheet, m_displayUsage); if (chosenObjs != null) { node.Checked = chosenObjs.Contains(label.Object); } Nodes.Add(node); nodeRepresentingCurrentChoice = CheckForSelection(label, objToSelect, node, nodeRepresentingCurrentChoice); nodeRepresentingCurrentChoice = AddSecondaryNodesAndLookForSelected( node, node.Nodes, nodeRepresentingCurrentChoice, objToSelect, ownershipStack, chosenObjs); } } else { // Even if we don't have to create children for this, we need to search the // children for matches, and perhaps expand some of them. foreach (LabelNode node in Nodes) { nodeRepresentingCurrentChoice = CheckForSelection(node.Label, objToSelect, node, nodeRepresentingCurrentChoice); } } if (nodeRepresentingCurrentChoice == null) { foreach (LabelNode node in Nodes) { if (ownershipStack.Contains(node.Label.Object)) { nodeRepresentingCurrentChoice = node.AddChildrenAndLookForSelected( objToSelect, ownershipStack, chosenObjs); return(nodeRepresentingCurrentChoice); } } } else { Expand(); nodeRepresentingCurrentChoice.EnsureVisible(); } return(nodeRepresentingCurrentChoice); }
/// <summary> /// Send a message to the node with the specified ID. /// </summary> /// <param name="nodeID">The node ID of the node to send the message to.</param> /// <param name="message">The message to be sent.</param> /// <param name="domainKey"> The Key of the domain to deliver the message to.</param> public void SendMessage(string nodeID, string message, string domainKey) { Nodes.SendMessage(nodeID, message, domainKey); }
/// <summary> /// Retrieve a particular node by its node id. /// </summary> /// <param name="id">The string id of the node.</param> /// <returns>The node with the specified id or null.</returns> public ClusterNode GetNodeByID(string id) { return(Nodes.GetNodeByID(id)); }
/// <summary> /// 产生一个WorkNode /// </summary> /// <param name="fk_flow">流程编号</param> /// <param name="fk_node">节点ID</param> /// <param name="workID">工作ID</param> /// <param name="fid">FID</param> /// <param name="userNo">用户编号</param> /// <returns>返回dataset</returns> public static DataSet GenerWorkNode(string fk_flow, int fk_node, Int64 workID, Int64 fid, string userNo, string fromWorkOpt = "0") { //节点. if (fk_node == 0) { fk_node = int.Parse(fk_flow + "01"); } if (workID == 0) { workID = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow, null, null, userNo, null); } Node nd = new Node(fk_node); try { nd.WorkID = workID; //为获取表单ID提供参数. MapData md = new MapData(); md.No = nd.NodeFrmID; if (md.RetrieveFromDBSources() == 0) { throw new Exception("装载错误,该表单ID=" + md.No + "丢失,请修复一次流程重新加载一次."); } Work wk = nd.HisWork; wk.OID = workID; wk.RetrieveFromDBSources(); wk.ResetDefaultVal(); // 第1.2: 调用,处理用户定义的业务逻辑. string sendWhen = nd.HisFlow.DoFlowEventEntity(EventListOfNode.FrmLoadBefore, nd, wk, null); //获得表单模版. DataSet myds = BP.Sys.CCFormAPI.GenerHisDataSet(md.No, nd.Name); //移除MapAttr myds.Tables.Remove("Sys_MapAttr"); //移除. //获取表单的mapAttr //求出集合. MapAttrs mattrs = new MapAttrs(md.No); if (fk_node != null) { /*处理表单权限控制方案*/ FrmNode frmNode = new FrmNode(); int count = frmNode.Retrieve(FrmNodeAttr.FK_Frm, md.No, FrmNodeAttr.FK_Node, fk_node); if (count != 0 && frmNode.FrmSln != 0) { FrmFields fls = new FrmFields(md.No, frmNode.FK_Node); foreach (FrmField item in fls) { foreach (MapAttr attr in mattrs) { if (attr.KeyOfEn != item.KeyOfEn) { continue; } if (item.IsSigan) { item.UIIsEnable = false; } attr.UIIsEnable = item.UIIsEnable; attr.UIVisible = item.UIVisible; attr.IsSigan = item.IsSigan; attr.DefValReal = item.DefVal; } } } } DataTable Sys_MapAttr = mattrs.ToDataTableField("Sys_MapAttr"); myds.Tables.Add(Sys_MapAttr); //把流程信息表发送过去. GenerWorkFlow gwf = new GenerWorkFlow(); gwf.WorkID = workID; gwf.RetrieveFromDBSources(); //加入WF_Node. DataTable WF_Node = nd.ToDataTableField("WF_Node"); myds.Tables.Add(WF_Node); #region 加入组件的状态信息, 在解析表单的时候使用. BP.WF.Template.FrmNodeComponent fnc = new FrmNodeComponent(nd.NodeID); nd.WorkID = workID; //为获取表单ID提供参数. if (nd.NodeFrmID != "ND" + nd.NodeID && nd.HisFormType != NodeFormType.RefOneFrmTree) { /*说明这是引用到了其他节点的表单,就需要把一些位置元素修改掉.*/ int refNodeID = int.Parse(nd.NodeFrmID.Replace("ND", "")); BP.WF.Template.FrmNodeComponent refFnc = new FrmNodeComponent(refNodeID); fnc.SetValByKey(FrmWorkCheckAttr.FWC_H, refFnc.GetValFloatByKey(FrmWorkCheckAttr.FWC_H)); fnc.SetValByKey(FrmWorkCheckAttr.FWC_W, refFnc.GetValFloatByKey(FrmWorkCheckAttr.FWC_W)); fnc.SetValByKey(FrmWorkCheckAttr.FWC_X, refFnc.GetValFloatByKey(FrmWorkCheckAttr.FWC_X)); fnc.SetValByKey(FrmWorkCheckAttr.FWC_Y, refFnc.GetValFloatByKey(FrmWorkCheckAttr.FWC_Y)); if (fnc.GetValFloatByKey(FrmWorkCheckAttr.FWC_H) <= 10) { fnc.SetValByKey(FrmWorkCheckAttr.FWC_H, 500); } if (fnc.GetValFloatByKey(FrmWorkCheckAttr.FWC_W) <= 10) { fnc.SetValByKey(FrmWorkCheckAttr.FWC_W, 600); } if (fnc.GetValFloatByKey(FrmWorkCheckAttr.FWC_X) <= 10) { fnc.SetValByKey(FrmWorkCheckAttr.FWC_X, 200); } if (fnc.GetValFloatByKey(FrmWorkCheckAttr.FWC_Y) <= 10) { fnc.SetValByKey(FrmWorkCheckAttr.FWC_Y, 200); } fnc.SetValByKey(FrmSubFlowAttr.SF_H, refFnc.GetValFloatByKey(FrmSubFlowAttr.SF_H)); fnc.SetValByKey(FrmSubFlowAttr.SF_W, refFnc.GetValFloatByKey(FrmSubFlowAttr.SF_W)); fnc.SetValByKey(FrmSubFlowAttr.SF_X, refFnc.GetValFloatByKey(FrmSubFlowAttr.SF_X)); fnc.SetValByKey(FrmSubFlowAttr.SF_Y, refFnc.GetValFloatByKey(FrmSubFlowAttr.SF_Y)); fnc.SetValByKey(FrmThreadAttr.FrmThread_H, refFnc.GetValFloatByKey(FrmThreadAttr.FrmThread_H)); fnc.SetValByKey(FrmThreadAttr.FrmThread_W, refFnc.GetValFloatByKey(FrmThreadAttr.FrmThread_W)); fnc.SetValByKey(FrmThreadAttr.FrmThread_X, refFnc.GetValFloatByKey(FrmThreadAttr.FrmThread_X)); fnc.SetValByKey(FrmThreadAttr.FrmThread_Y, refFnc.GetValFloatByKey(FrmThreadAttr.FrmThread_Y)); fnc.SetValByKey(FrmTrackAttr.FrmTrack_H, refFnc.GetValFloatByKey(FrmTrackAttr.FrmTrack_H)); fnc.SetValByKey(FrmTrackAttr.FrmTrack_W, refFnc.GetValFloatByKey(FrmTrackAttr.FrmTrack_W)); fnc.SetValByKey(FrmTrackAttr.FrmTrack_X, refFnc.GetValFloatByKey(FrmTrackAttr.FrmTrack_X)); fnc.SetValByKey(FrmTrackAttr.FrmTrack_Y, refFnc.GetValFloatByKey(FrmTrackAttr.FrmTrack_Y)); fnc.SetValByKey(FTCAttr.FTC_H, refFnc.GetValFloatByKey(FTCAttr.FTC_H)); fnc.SetValByKey(FTCAttr.FTC_W, refFnc.GetValFloatByKey(FTCAttr.FTC_W)); fnc.SetValByKey(FTCAttr.FTC_X, refFnc.GetValFloatByKey(FTCAttr.FTC_X)); fnc.SetValByKey(FTCAttr.FTC_Y, refFnc.GetValFloatByKey(FTCAttr.FTC_Y)); #region 没有审核组件分组就增加上审核组件分组. @杜需要翻译&测试. if (md.HisFrmType == FrmType.FoolForm) { //判断是否是傻瓜表单,如果是,就要判断该傻瓜表单是否有审核组件groupfield ,没有的话就增加上. DataTable gf = myds.Tables["Sys_GroupField"]; bool isHave = false; foreach (DataRow dr in gf.Rows) { string cType = dr["CtrlType"] as string; if (cType == null) { continue; } if (cType.Equals("FWC") == true) { isHave = true; } } if (isHave == false) { DataRow dr = gf.NewRow(); nd.WorkID = workID; //为获取表单ID提供参数. dr[GroupFieldAttr.OID] = 100; dr[GroupFieldAttr.FrmID] = nd.NodeFrmID; dr[GroupFieldAttr.CtrlType] = "FWC"; dr[GroupFieldAttr.CtrlID] = "FWCND" + nd.NodeID; dr[GroupFieldAttr.Idx] = 100; dr[GroupFieldAttr.Lab] = "审核信息"; gf.Rows.Add(dr); myds.Tables.Remove("Sys_GroupField"); myds.Tables.Add(gf); //执行更新,就自动生成那个丢失的字段分组. refFnc.Update(); /* * //丢失了就插入新的. * BP.Sys.GroupField gfEn = new GroupField(); * gfEn.FrmID = nd.NodeFrmID; * gfEn.CtrlType = "FWC"; * gfEn.CtrlID = "FWCND" + nd.NodeID; * gfEn.Idx = 100; * gfEn.Lab = "审核信息"; * gfEn.Insert(); */ } } #endregion 没有审核组件分组就增加上审核组件分组. } #region 没有审核组件分组就增加上审核组件分组. @杜需要翻译&测试. if (nd.NodeFrmID == "ND" + nd.NodeID && nd.HisFormType != NodeFormType.RefOneFrmTree) { // Work wk1 = nd.HisWork; if (nd.FormType == NodeFormType.FoolForm) { //判断是否是傻瓜表单,如果是,就要判断该傻瓜表单是否有审核组件groupfield ,没有的话就增加上. DataTable gf = myds.Tables["Sys_GroupField"]; bool isHave = false; foreach (DataRow dr in gf.Rows) { string cType = dr["CtrlType"] as string; if (cType == null) { continue; } if (cType.Equals("FWC") == true) { isHave = true; } } if (isHave == false) { DataRow dr = gf.NewRow(); nd.WorkID = workID; //为获取表单ID提供参数. dr[GroupFieldAttr.OID] = 100; dr[GroupFieldAttr.FrmID] = nd.NodeFrmID; dr[GroupFieldAttr.CtrlType] = "FWC"; dr[GroupFieldAttr.CtrlID] = "FWCND" + nd.NodeID; dr[GroupFieldAttr.Idx] = 100; dr[GroupFieldAttr.Lab] = "审核信息"; gf.Rows.Add(dr); myds.Tables.Remove("Sys_GroupField"); myds.Tables.Add(gf); //更新,为了让其自动增加审核分组. BP.WF.Template.FrmNodeComponent refFnc = new FrmNodeComponent(nd.NodeID); refFnc.Update(); } } } #endregion 没有审核组件分组就增加上审核组件分组. myds.Tables.Add(fnc.ToDataTableField("WF_FrmNodeComponent")); #endregion 加入组件的状态信息, 在解析表单的时候使用. #region 增加 groupfields if (nd.FormType == NodeFormType.FoolTruck && nd.IsStartNode == false && DataType.IsNullOrEmpty(wk.HisPassedFrmIDs) == false) { #region 处理字段分组排序. //查询所有的分组, 如果是查看表单的方式,就不应该把当前的表单显示出来. string myFrmIDs = ""; if (fromWorkOpt.Equals("1") == true) { if (gwf.WFState == WFState.Complete) { myFrmIDs = wk.HisPassedFrmIDs + ",'ND" + fk_node + "'"; } else { myFrmIDs = wk.HisPassedFrmIDs; //流程未完成并且是查看表单的情况. } } else { myFrmIDs = wk.HisPassedFrmIDs + ",'ND" + fk_node + "'"; } GroupFields gfs = new GroupFields(); gfs.RetrieveIn(GroupFieldAttr.FrmID, "(" + myFrmIDs + ")"); //按照时间的顺序查找出来 ids . string sqlOrder = "SELECT OID FROM Sys_GroupField WHERE FrmID IN (" + myFrmIDs + ")"; if (BP.Sys.SystemConfig.AppCenterDBType == DBType.Oracle) { myFrmIDs = myFrmIDs.Replace("'", ""); sqlOrder += " ORDER BY INSTR('" + myFrmIDs + "',FrmID) , Idx"; } if (BP.Sys.SystemConfig.AppCenterDBType == DBType.MSSQL) { myFrmIDs = myFrmIDs.Replace("'", ""); sqlOrder += " ORDER BY CHARINDEX(FrmID, '" + myFrmIDs + "'), Idx"; } if (BP.Sys.SystemConfig.AppCenterDBType == DBType.MySQL) { myFrmIDs = myFrmIDs.Replace("'", ""); sqlOrder += " ORDER BY INSTR('" + myFrmIDs + "', FrmID ), Idx"; } DataTable dtOrder = DBAccess.RunSQLReturnTable(sqlOrder); //创建容器,把排序的分组放入这个容器. GroupFields gfsNew = new GroupFields(); //遍历查询出来的分组. foreach (DataRow dr in dtOrder.Rows) { string pkOID = dr[0].ToString(); var mygf = gfs.GetEntityByKey(pkOID); gfsNew.AddEntity(mygf); //把分组字段加入里面去. } DataTable dtGF = gfsNew.ToDataTableField("Sys_GroupField"); myds.Tables.Remove("Sys_GroupField"); myds.Tables.Add(dtGF); #endregion 处理字段分组排序. #region 处理 mapattrs //求当前表单的字段集合. MapAttrs attrs = new MapAttrs(); QueryObject qo = new QueryObject(attrs); qo.AddWhere(MapAttrAttr.FK_MapData, "ND" + nd.NodeID); qo.addOrderBy(MapAttrAttr.Idx); qo.DoQuery(); //计算累加的字段集合. MapAttrs attrsLeiJia = new MapAttrs(); qo = new QueryObject(attrsLeiJia); qo.AddWhere(MapAttrAttr.FK_MapData, " IN ", "(" + wk.HisPassedFrmIDs + ")"); qo.addOrderBy(MapAttrAttr.Idx); qo.DoQuery(); //把两个集合接起来. foreach (MapAttr item in attrsLeiJia) { item.UIIsEnable = false; //设置为只读的. attrs.AddEntity(item); } //替换掉现有的. myds.Tables.Remove("Sys_MapAttr"); //移除. myds.Tables.Add(attrs.ToDataTableField("Sys_MapAttr")); //增加. #endregion 处理mapattrs #region 把枚举放入里面去. myds.Tables.Remove("Sys_Enum"); myFrmIDs = wk.HisPassedFrmIDs + ",'ND" + fk_node + "'"; SysEnums enums = new SysEnums(); enums.RetrieveInSQL(SysEnumAttr.EnumKey, "SELECT UIBindKey FROM Sys_MapAttr WHERE FK_MapData in(" + myFrmIDs + ")"); // 加入最新的枚举. myds.Tables.Add(enums.ToDataTableField("Sys_Enum")); #endregion 把枚举放入里面去. #region MapExt . myds.Tables.Remove("Sys_MapExt"); // 把扩展放入里面去. myFrmIDs = wk.HisPassedFrmIDs + ",'ND" + fk_node + "'"; BP.Sys.MapExts exts = new MapExts(); qo = new QueryObject(exts); qo.AddWhere(MapExtAttr.FK_MapData, " IN ", "(" + myFrmIDs + ")"); qo.DoQuery(); // 加入最新的MapExt. myds.Tables.Add(exts.ToDataTableField("Sys_MapExt")); #endregion MapExt . } #endregion 增加 groupfields #region 流程设置信息. if (nd.IsStartNode == false) { BP.WF.Dev2Interface.Node_SetWorkRead(fk_node, workID); // @杜. if (gwf.TodoEmps.Contains(BP.Web.WebUser.Name + ";") == false) { gwf.TodoEmps += BP.Web.WebUser.No + "," + BP.Web.WebUser.Name; gwf.Update(); } } //增加转向下拉框数据. if (nd.CondModel == CondModel.SendButtonSileSelect) { if (nd.IsStartNode == true || gwf.TodoEmps.Contains(WebUser.No + ",") == true) { /*如果当前不是主持人,如果不是主持人,就不让他显示下拉框了.*/ /*如果当前节点,是可以显示下拉框的.*/ Nodes nds = nd.HisToNodes; DataTable dtToNDs = new DataTable(); dtToNDs.TableName = "ToNodes"; dtToNDs.Columns.Add("No", typeof(string)); //节点ID. dtToNDs.Columns.Add("Name", typeof(string)); //到达的节点名称. dtToNDs.Columns.Add("IsSelectEmps", typeof(string)); //是否弹出选择人的对话框? dtToNDs.Columns.Add("IsSelected", typeof(string)); //是否选择? #region 增加到达延续子流程节点。 NodeYGFlows ygflows = new NodeYGFlows(fk_node.ToString()); if (ygflows.Count > 1 && SystemConfig.CustomerNo.Equals("CZBank") == true) { dtToNDs.Rows.Clear(); //为浙商银行做的特殊判断,如果配置了延续流程,就不让其走分支节点. } foreach (NodeYGFlow item in ygflows) { DataRow dr = dtToNDs.NewRow(); dr["No"] = item.FK_Flow + "01"; dr["Name"] = "启动:" + item.FlowName; //if (item.HisDeliveryWay == DeliveryWay.BySelected) dr["IsSelectEmps"] = "1"; //else // dr["IsSelectEmps"] = "0"; //是不是,可以选择接受人. //设置默认选择的节点. //if (defalutSelectedNodeID == item.NodeID) // dr["IsSelected"] = "1"; //else // dr["IsSelected"] = "0"; dr["IsSelected"] = "0"; dtToNDs.Rows.Add(dr); } #endregion 增加到达延续子流程节点。 #region 到达其他节点. //上一次选择的节点. int defalutSelectedNodeID = 0; if (nds.Count > 1) { string mysql = ""; // 找出来上次发送选择的节点. if (SystemConfig.AppCenterDBType == DBType.MSSQL) { mysql = "SELECT top 1 NDTo FROM ND" + int.Parse(nd.FK_Flow) + "Track A WHERE A.NDFrom=" + fk_node + " AND ActionType=1 ORDER BY WorkID DESC"; } else if (SystemConfig.AppCenterDBType == DBType.Oracle) { mysql = "SELECT * FROM ( SELECT NDTo FROM ND" + int.Parse(nd.FK_Flow) + "Track A WHERE A.NDFrom=" + fk_node + " AND ActionType=1 ORDER BY WorkID DESC ) WHERE ROWNUM =1"; } else if (SystemConfig.AppCenterDBType == DBType.MySQL) { mysql = "SELECT NDTo FROM ND" + int.Parse(nd.FK_Flow) + "Track A WHERE A.NDFrom=" + fk_node + " AND ActionType=1 ORDER BY WorkID DESC limit 1,1"; } //获得上一次发送到的节点. defalutSelectedNodeID = DBAccess.RunSQLReturnValInt(mysql, 0); } #region 为天业集团做一个特殊的判断. if (SystemConfig.CustomerNo == "TianYe" && nd.Name.Contains("董事长") == true) { /*如果是董事长节点, 如果是下一个节点默认的是备案. */ foreach (Node item in nds) { if (item.Name.Contains("备案") == true && item.Name.Contains("待") == false) { defalutSelectedNodeID = item.NodeID; break; } } } #endregion 为天业集团做一个特殊的判断. foreach (Node item in nds) { DataRow dr = dtToNDs.NewRow(); dr["No"] = item.NodeID; dr["Name"] = item.Name; //if (item.hissel if (item.HisDeliveryWay == DeliveryWay.BySelected) { dr["IsSelectEmps"] = "1"; } else { dr["IsSelectEmps"] = "0"; //是不是,可以选择接受人. } //设置默认选择的节点. if (defalutSelectedNodeID == item.NodeID) { dr["IsSelected"] = "1"; } else { dr["IsSelected"] = "0"; } dtToNDs.Rows.Add(dr); } #endregion 到达其他节点。 //增加一个下拉框, 对方判断是否有这个数据. myds.Tables.Add(dtToNDs); } } // 节点数据. //string sql = "SELECT * FROM WF_Node WHERE NodeID=" + fk_node; //DataTable dt = BP.DA.DBAccess.RunSQLReturnTable(sql); //dt.TableName = "WF_NodeBar"; //myds.Tables.Add(dt); //// 流程数据. //Flow fl = new Flow(fk_flow); //myds.Tables.Add(fl.ToDataTableField("WF_Flow")); #endregion 流程设置信息. #region 把主从表数据放入里面. //.工作数据放里面去, 放进去前执行一次装载前填充事件. //重设默认值. wk.ResetDefaultVal(); //@樊雷伟 把这部分代码搬到jflow上去. CCFlowAPI. 114行出. if (BP.Sys.SystemConfig.IsBSsystem == true) { // 处理传递过来的参数。 foreach (string k in System.Web.HttpContext.Current.Request.QueryString.AllKeys) { if (DataType.IsNullOrEmpty(k) == true) { continue; } wk.SetValByKey(k, System.Web.HttpContext.Current.Request.QueryString[k]); } // 处理传递过来的frm参数。 foreach (string k in System.Web.HttpContext.Current.Request.Form.AllKeys) { if (DataType.IsNullOrEmpty(k) == true) { continue; } wk.SetValByKey(k, System.Web.HttpContext.Current.Request.Form[k]); } //更新到数据库里. wk.DirectUpdate(); } // 执行表单事件.. string msg = md.DoEvent(FrmEventList.FrmLoadBefore, wk); if (DataType.IsNullOrEmpty(msg) == false) { throw new Exception("err@错误:" + msg); } // 执行FEE事件. string msgOfLoad = nd.HisFlow.DoFlowEventEntity(EventListOfNode.FrmLoadBefore, nd, wk, null); if (msgOfLoad != null) { wk.RetrieveFromDBSources(); } //执行装载填充. MapExt me = new MapExt(); if (me.Retrieve(MapExtAttr.ExtType, MapExtXmlList.PageLoadFull, MapExtAttr.FK_MapData, wk.NodeFrmID) == 1) { //执行通用的装载方法. MapAttrs attrs = new MapAttrs(wk.NodeFrmID); MapDtls dtls = new MapDtls(wk.NodeFrmID); wk = BP.WF.Glo.DealPageLoadFull(wk, me, attrs, dtls) as Work; } //如果是累加表单,就把整个rpt数据都放入里面去. if (nd.FormType == NodeFormType.FoolTruck && nd.IsStartNode == false && DataType.IsNullOrEmpty(wk.HisPassedFrmIDs) == false) { GERpt rpt = new GERpt("ND" + int.Parse(nd.FK_Flow) + "Rpt", workID); // nd.HisFlow.HisGERpt; rpt.ResetDefaultVal(); //rpt.Copy(wk); //加入后就出现了错误. myds.Tables.Add(rpt.ToDataTableField("MainTable")); // myds.WriteXml("C:\\XX.xml"); } else { DataTable mainTable = wk.ToDataTableField(md.No); mainTable.TableName = "MainTable"; myds.Tables.Add(mainTable); } string sql = ""; DataTable dt = null; #endregion #region 把外键表加入DataSet DataTable dtMapAttr = myds.Tables["Sys_MapAttr"]; MapExts mes = md.MapExts; foreach (DataRow dr in dtMapAttr.Rows) { string lgType = dr["LGType"].ToString(); string uiBindKey = dr["UIBindKey"].ToString(); if (DataType.IsNullOrEmpty(uiBindKey) == true) { continue; //为空就continue. } if (lgType.Equals("1") == true) { continue; //枚举值就continue; } string uiIsEnable = dr["UIIsEnable"].ToString(); if (uiIsEnable.Equals("0") == true && lgType.Equals("1") == true) { continue; //如果是外键,并且是不可以编辑的状态. } if (uiIsEnable.Equals("1") == true && lgType.Equals("0") == true) { continue; //如果是外部数据源,并且是不可以编辑的状态. } // 检查是否有下拉框自动填充。 string keyOfEn = dr["KeyOfEn"].ToString(); string fk_mapData = dr["FK_MapData"].ToString(); #region 处理下拉框数据范围. for 小杨. me = mes.GetEntityByKey(MapExtAttr.ExtType, MapExtXmlList.AutoFullDLL, MapExtAttr.AttrOfOper, keyOfEn) as MapExt; if (me != null) { string fullSQL = me.Doc.Clone() as string; fullSQL = fullSQL.Replace("~", ","); fullSQL = BP.WF.Glo.DealExp(fullSQL, wk, null); dt = DBAccess.RunSQLReturnTable(fullSQL); //重构新表 DataTable dt_FK_Dll = new DataTable(); dt_FK_Dll.TableName = keyOfEn;//可能存在隐患,如果多个字段,绑定同一个表,就存在这样的问题. dt_FK_Dll.Columns.Add("No", typeof(string)); dt_FK_Dll.Columns.Add("Name", typeof(string)); foreach (DataRow dllRow in dt.Rows) { DataRow drDll = dt_FK_Dll.NewRow(); drDll["No"] = dllRow["No"]; drDll["Name"] = dllRow["Name"]; dt_FK_Dll.Rows.Add(drDll); } myds.Tables.Add(dt_FK_Dll); continue; } #endregion 处理下拉框数据范围. // 判断是否存在. if (myds.Tables.Contains(uiBindKey) == true) { continue; } if (BP.Sys.PubClass.GetDataTableByUIBineKey(uiBindKey) != null) { myds.Tables.Add(BP.Sys.PubClass.GetDataTableByUIBineKey(uiBindKey)); } } #endregion End把外键表加入DataSet #region 处理流程-消息提示. DataTable dtAlert = new DataTable(); dtAlert.TableName = "AlertMsg"; dtAlert.Columns.Add("Title", typeof(string)); dtAlert.Columns.Add("Msg", typeof(string)); dtAlert.Columns.Add("URL", typeof(string)); // string msg = ""; switch (gwf.WFState) { case WFState.AskForReplay: // 返回加签的信息. string mysql = "SELECT * FROM ND" + int.Parse(fk_flow) + "Track WHERE WorkID=" + workID + " AND " + TrackAttr.ActionType + "=" + (int)ActionType.ForwardAskfor; DataTable mydt = BP.DA.DBAccess.RunSQLReturnTable(mysql); foreach (DataRow dr in mydt.Rows) { string msgAskFor = dr[TrackAttr.Msg].ToString(); string worker = dr[TrackAttr.EmpFrom].ToString(); string workerName = dr[TrackAttr.EmpFromT].ToString(); string rdt = dr[TrackAttr.RDT].ToString(); DataRow drMsg = dtAlert.NewRow(); drMsg["Title"] = worker + "," + workerName + "回复信息:"; drMsg["Msg"] = DataType.ParseText2Html(msgAskFor) + "<br>" + rdt; dtAlert.Rows.Add(drMsg); } break; case WFState.Askfor: //加签. sql = "SELECT * FROM ND" + int.Parse(fk_flow) + "Track WHERE WorkID=" + workID + " AND " + TrackAttr.ActionType + "=" + (int)ActionType.AskforHelp; dt = BP.DA.DBAccess.RunSQLReturnTable(sql); foreach (DataRow dr in dt.Rows) { string msgAskFor = dr[TrackAttr.Msg].ToString(); string worker = dr[TrackAttr.EmpFrom].ToString(); string workerName = dr[TrackAttr.EmpFromT].ToString(); string rdt = dr[TrackAttr.RDT].ToString(); DataRow drMsg = dtAlert.NewRow(); drMsg["Title"] = worker + "," + workerName + "请求加签:"; drMsg["Msg"] = DataType.ParseText2Html(msgAskFor) + "<br>" + rdt + "<a href='./WorkOpt/AskForRe.htm?FK_Flow=" + fk_flow + "&FK_Node=" + fk_node + "&WorkID=" + workID + "&FID=" + fid + "' >回复加签意见</a> --"; dtAlert.Rows.Add(drMsg); //提示信息. // this.FlowMsg.AlertMsg_Info(worker + "," + workerName + "请求加签:", // DataType.ParseText2Html(msgAskFor) + "<br>" + rdt + " --<a href='./WorkOpt/AskForRe.aspx?FK_Flow=" + this.FK_Flow + "&FK_Node=" + this.FK_Node + "&WorkID=" + this.WorkID + "&FID=" + this.FID + "' >回复加签意见</a> --"); } // isAskFor = true; break; case WFState.ReturnSta: /* 如果工作节点退回了*/ ReturnWorks rws = new ReturnWorks(); rws.Retrieve(ReturnWorkAttr.ReturnToNode, fk_node, ReturnWorkAttr.WorkID, workID, ReturnWorkAttr.RDT); if (rws.Count != 0) { //string msgInfo = ""; //foreach (BP.WF.ReturnWork rw in rws) //{ // DataRow drMsg = dtAlert.NewRow(); // //drMsg["Title"] = "来自节点:" + rw.ReturnNodeName + " 退回人:" + rw.ReturnerName + " " + rw.RDT + " <a href='/DataUser/ReturnLog/" + fk_flow + "/" + rw.MyPK + ".htm' target=_blank>工作日志</a>"; // drMsg["Title"] = "来自节点:" + rw.ReturnNodeName + " 退回人:" + rw.ReturnerName + " " + rw.RDT; // drMsg["Msg"] = rw.BeiZhuHtml; // dtAlert.Rows.Add(drMsg); //} string msgInfo = ""; foreach (BP.WF.ReturnWork rw in rws) { //drMsg["Title"] = "来自节点:" + rw.ReturnNodeName + " 退回人:" + rw.ReturnerName + " " + rw.RDT + " <a href='/DataUser/ReturnLog/" + fk_flow + "/" + rw.MyPK + ".htm' target=_blank>工作日志</a>"; msgInfo += "\t\n来自节点:" + rw.ReturnNodeName + " 退回人:" + rw.ReturnerName + " " + rw.RDT; msgInfo += rw.BeiZhuHtml; } string str = nd.ReturnAlert; if (str != "") { str = str.Replace("~", "'"); str = str.Replace("@PWorkID", workID.ToString()); str = str.Replace("@PNodeID", nd.NodeID.ToString()); str = str.Replace("@FK_Node", nd.NodeID.ToString()); str = str.Replace("@PFlowNo", fk_flow); str = str.Replace("@FK_Flow", fk_flow); str = str.Replace("@PWorkID", workID.ToString()); str = str.Replace("@WorkID", workID.ToString()); str = str.Replace("@OID", workID.ToString()); DataRow drMsg = dtAlert.NewRow(); drMsg["Title"] = "退回信息"; drMsg["Msg"] = msgInfo + "\t\n" + str; dtAlert.Rows.Add(drMsg); } else { DataRow drMsg = dtAlert.NewRow(); drMsg["Title"] = "退回信息"; drMsg["Msg"] = msgInfo + "\t\n" + str; dtAlert.Rows.Add(drMsg); } } break; case WFState.Shift: /* 判断移交过来的。 */ ShiftWorks fws = new ShiftWorks(); BP.En.QueryObject qo = new QueryObject(fws); qo.AddWhere(ShiftWorkAttr.WorkID, workID); qo.addAnd(); qo.AddWhere(ShiftWorkAttr.FK_Node, fk_node); qo.addOrderBy(ShiftWorkAttr.RDT); qo.DoQuery(); if (fws.Count >= 1) { DataRow drMsg = dtAlert.NewRow(); drMsg["Title"] = "移交历史信息"; msg = ""; foreach (ShiftWork fw in fws) { string temp = "@移交人[" + fw.FK_Emp + "," + fw.FK_EmpName + "]。@接受人:" + fw.ToEmp + "," + fw.ToEmpName + "。<br>移交原因:-------------" + fw.NoteHtml; if (fw.FK_Emp == WebUser.No) { temp = "<b>" + temp + "</b>"; } temp = temp.Replace("@", "<br>@"); msg += temp + "<hr/>"; } drMsg["Msg"] = msg; dtAlert.Rows.Add(drMsg); } break; default: break; } #endregion #region 增加流程节点表单绑定信息. if (nd.HisFormType == NodeFormType.RefOneFrmTree) { /* 独立流程节点表单. */ nd.WorkID = workID; //为获取表单ID ( NodeFrmID )提供参数. FrmNode fn = new FrmNode(); fn.MyPK = nd.NodeFrmID + "_" + nd.NodeID + "_" + nd.FK_Flow; fn.Retrieve(); myds.Tables.Add(fn.ToDataTableField("FrmNode")); } #endregion 增加流程节点表单绑定信息. myds.Tables.Add(dtAlert); return(myds); } catch (Exception ex) { Log.DebugWriteError(ex.StackTrace); throw new Exception(ex.Message); } }
public void AddBaseNode(BaseNode node) { Nodes.Add(node); ProcessMode(node); }
private static void AddXTreeItem(XTreeCollection xTreeList, NodeInfo nodeInfo) { s_IsShow = RolePermissions.AccessCheckNodePermission(OperateCode.NodeContentPreview, nodeInfo.NodeId); s_IsInput = RolePermissions.AccessCheckNodePermission(OperateCode.NodeContentInput, nodeInfo.NodeId); s_IsManage = RolePermissions.AccessCheckNodePermission(OperateCode.NodeContentManage, nodeInfo.NodeId); string str = ""; if (!s_IsAdministrator) { if (nodeInfo.ArrChildId.IndexOf(",", StringComparison.Ordinal) > 0) { foreach (NodeInfo info in Nodes.GetNodesListInArrChildId(nodeInfo.ArrChildId)) { s_IsChildNodePurview = (RolePermissions.AccessCheckNodePermission(OperateCode.NodeContentPreview, info.NodeId) || RolePermissions.AccessCheckNodePermission(OperateCode.NodeContentInput, info.NodeId)) || RolePermissions.AccessCheckNodePermission(OperateCode.ContentManage, info.NodeId); if (s_IsChildNodePurview) { break; } } } else { s_EnableAddWhenHasChild = true; } } if (ModelManager.GetNodesModelTemplateRelationShip(nodeInfo.NodeId, DataConverter.CLng(HttpContext.Current.Request["ModelId"])).IsNull) { s_IsInput = false; s_IsManage = false; } if ((s_IsShow || s_IsInput) || (s_IsManage || s_IsChildNodePurview)) { XTreeItem item = new XTreeItem(); item.Text = nodeInfo.NodeName; item.ArrModelId = "0"; item.ArrModelName = ""; item.NodeId = nodeInfo.NodeId.ToString(); item.Target = ""; item.Expand = "0"; if (nodeInfo.Child > 0) { item.XmlSrc = string.Concat(new object[] { "ContentSelectTreeXml.aspx?NodeID=", nodeInfo.NodeId, "&ModelId=", HttpContext.Current.Request["ModelId"] }); } if (!s_IsInput && !s_IsManage) { str = "Forbid"; item.AnchorType = "0"; } else { switch (nodeInfo.PurviewType) { case 0: str = "Container"; break; case 1: str = "HalfOpen"; break; case 2: str = "Purview"; break; default: str = "Container"; break; } item.AnchorType = "2"; if (!s_EnableAddWhenHasChild) { str = "Forbid"; item.AnchorType = "0"; } } item.Icon = str; xTreeList.Add(item); } }
public override void Visit(AccessCallChainNode node) { Nodes.Push(new AccessColumnNode(node.ToString(), string.Empty, node.ReturnType, TextSpan.Empty)); }
public override void Visit(FieldNode node) { base.Visit(node); Expression = Nodes.Pop() as FieldNode; }
public void StartAll() { Task.WaitAll(Nodes.Where(n => n.State == CoreNodeState.Stopped).Select(n => n.StartAsync()).ToArray()); }
public override ExecutionStep CreateStep() => new ParallelStep(Nodes.Select(t => t.CreateStep()).ToArray());
public Leader(IElection election, IHartbeatTimer hartbeat, IObservable<AppendEntryResultMessage> reply, IObserver<AppendEntryMessage> append, IObserver<ClientResultMessage> clientReply, IObservable<ClientMessage> client, ILogReplication logReplication, Nodes nodes, ILoggerFactory loggerFactory, RaftOptions options, ServerIdentifier serverIdentifier) { _isDispose = false; _hartbeat = hartbeat; _append = append; _clientReply = clientReply; _client = client; _logReplication = logReplication; _nodes = nodes; _options = options; _serverIdentifier = serverIdentifier; _election = election; _logger = loggerFactory.CreateLogger(nameof(Leader) + " " + serverIdentifier); if (_options.UseLogging) _logger.LogInformation($"{nameof(ServerStateType.Leader)}"); // Reinitialized after election NextIndex = new ConcurrentDictionary<ServerIdentifier, int>(); MatchIndex = new ConcurrentDictionary<ServerIdentifier, int>(); _hartbeat.Leader(SendHartbeat); _replyDispose = reply.Subscribe(EntryReplyMessageRecived); _clientReplyDispose = client.Subscribe(ClientMessageRecived); }
public LeaderBaseTests() { var mocker = new AutoMocker(); ServerIdentifier = new ServerIdentifier(); mocker.Use(ServerIdentifier); Election = new Election(); AppendEntryResult = new Subject<AppendEntryResultMessage>(); AppendEntry = new Subject<AppendEntryMessage>(); LogReplication = new LogReplication(); Nodes = new Nodes(); Leader = new Rafting.States.Leader( Election, mocker.Get<IHartbeatTimer>(), AppendEntryResult, AppendEntry, mocker.Get<IObserver<ClientResultMessage>>(), mocker.Get<IObservable<ClientMessage>>(), LogReplication, Nodes, mocker.Get<ILoggerFactory>(), new RaftOptions(), mocker.Get<ServerIdentifier>()); }