private void LoadTables(PdmDiagram diagram, XmlNode symbolRootNode) { if (symbolRootNode == null) { return; } var url = GetTableReferencePath(diagram); var tableRootNode = doc.SelectSingleNode(url, nms); foreach (XmlNode child in symbolRootNode.SelectNodes("o:TableSymbol", nms)) { if (child.SelectSingleNode("c:ClonePredecessor", nms) != null) { continue; } var refNode = child.SelectSingleNode("c:Object/o:Table", nms); if (refNode != null) { var id = refNode.Attributes["Ref"].InnerText; if (existsCodes.Contains(id)) { continue; } existsCodes.Add(id); var tNode = tableRootNode.SelectSingleNode("o:Table[@Id='" + id + "']", nms); if (tNode != null) { var nameNode = tNode.SelectSingleNode("a:Name", nms); var codeNode = tNode.SelectSingleNode("a:Code", nms); var descNode = tNode.SelectSingleNode("a:Comment", nms); var table = new PdmTable(); table.Id = id; table.Name = codeNode.InnerText; if (descNode != null && !string.IsNullOrEmpty(descNode.InnerText) && nameNode.InnerText != descNode.InnerText) { table.Description = descNode.InnerText; } else { table.Description = nameNode.InnerText; } table.Uri = string.Format("{0}/o:Table[@Id='{1}']", url, id); diagram.Tables.Add(table); } } } }
private void FindColumn(PdmTable table, List <Table> result, string columnId, out Table iTable, out Column iColumn) { iTable = result.FirstOrDefault(s => s.Name == table.Name); if (iTable == null) { iColumn = null; return; } var node = doc.SelectSingleNode(table.Uri, nms); var ndColumn = node.SelectSingleNode("c:Columns/o:Column[@Id='" + columnId + "']", nms); var codeNode = ndColumn.SelectSingleNode("a:Code", nms); iColumn = iTable.Columns.FirstOrDefault(s => s.Name == codeNode.InnerText); }
public Table ParseTable(PdmTable table) { var node = doc.SelectSingleNode(table.Uri, nms); var ndColumns = node.SelectNodes("c:Columns/o:Column", nms); var newtable = SchemaExtensionManager.Build <Table>(); var pkRootNode = node.SelectSingleNode("c:PrimaryKey/o:Key", nms); var pkRefId = pkRootNode == null ? string.Empty : pkRootNode.Attributes["Ref"].InnerText; newtable.Name = table.Name; newtable.Description = table.Description; foreach (XmlNode child in ndColumns) { var id = child.Attributes["Id"].InnerText; var nameNode = child.SelectSingleNode("a:Name", nms); var codeNode = child.SelectSingleNode("a:Code", nms); var descNode = child.SelectSingleNode("a:Comment", nms); var dtNode = child.SelectSingleNode("a:DataType", nms); var lngNode = child.SelectSingleNode("a:Length", nms); var mandNode = child.SelectSingleNode("a:Column.Mandatory", nms); var idenNode = child.SelectSingleNode("a:Identity", nms); var defaultNode = child.SelectSingleNode("a:DefaultValue", nms); var column = SchemaExtensionManager.Build <Column>(newtable); column.Name = codeNode.InnerText; if (descNode != null && !string.IsNullOrEmpty(descNode.InnerText) && nameNode.InnerText != descNode.InnerText) { column.Description = descNode.InnerText; } else { column.Description = nameNode.InnerText; } if (dtNode != null) { ParseDbTypeAndPrecision(dtNode.InnerText, column); column.DbType = DbTypeManager.GetDbType(databaseType, column.DataType); } if (lngNode != null) { column.Length = lngNode.InnerText.To <long>(); } if (mandNode == null) { column.IsNullable = true; } if (idenNode != null) { column.AutoIncrement = idenNode.InnerText == "1"; } if (defaultNode != null) { column.DefaultValue = defaultNode.InnerText; } if (!string.IsNullOrEmpty(pkRefId)) { var pkNode = node.SelectSingleNode("c:Keys/o:Key[@Id='" + pkRefId + "']/c:Key.Columns/o:Column[@Ref='" + id + "']", nms); if (pkNode != null) { column.IsPrimaryKey = true; } } InitializerUnity.Initialize(column); newtable.Columns.Add(column); } InitializerUnity.Initialize(newtable); return(newtable); }