コード例 #1
0
        private void LoadPackage()
        {
            string contents = String.Empty;

            Microsoft.SqlServer.Dts.Runtime.Package package = new Microsoft.SqlServer.Dts.Runtime.Package();

            using (StreamReader r = new StreamReader("DemoPackageWithoutDesignTimeProperties.dtsx"))
            {
                contents = r.ReadToEnd();
            }

            package.LoadFromXML(contents, null);

            ControlFlowGraphModelElement controlFlowGraphModelElement = new ControlFlowGraphModelElement();

            controlFlowGraphModelElement.Initialize(package as IDTSSequence);

            ModelElement m = controlFlowGraphModelElement.GetModelElement("{FFE5461A-385C-4A35-984A-91B6A8E43119}");

            GraphModelElement graphModelElement = new GraphModelElement();

            graphModelElement.Container = controlFlowGraphModelElement.Container;

            GraphLayout graphLayout = GraphLayout.GetLayout(graphModelElement);

            GraphControl graphControl = new GraphControl();

            graphControl.Width       = 1000;
            graphControl.Height      = 1000;
            graphControl.DataContext = m;

            GraphPanelEx p1 = new GraphPanelEx();

            p1.Width      = 1000;
            p1.Height     = 1000;
            p1.GraphModel = graphModelElement;
            p1.UpdateEx(true);

            GraphControlEx graphControlEx = new GraphControlEx();

            graphControlEx.DataContext = controlFlowGraphModelElement.Container;

            graphControlEx.AssignLayout(controlFlowGraphModelElement.Container, new Point(100, 100));
            graphControlEx.UpdateLayout();

            GraphModelElementEx graphModelElementEx = new GraphModelElementEx();

            graphModelElementEx.GraphControl = graphControl;
            graphModelElementEx.Container    = controlFlowGraphModelElement.Container;
            graphModelElementEx.RefreshGraph(controlFlowGraphModelElement.Container);

            GraphPanelEx graphPanelEx = new GraphPanelEx();

            graphPanelEx.Width        = 1000;
            graphPanelEx.Height       = 1000;
            graphPanelEx.DataContext  = graphModelElement;
            graphPanelEx.GraphModel   = graphModelElement;
            graphPanelEx.LayoutEngine = new Microsoft.SqlServer.Graph.LayoutEngine.Sugiyama.MsaglLayoutGraph();

            graphPanelEx.UpdateEx();

            //MethodInfo dynMethod = graphPanelEx.GetType().GetMethod("CalculateLayout", BindingFlags.NonPublic | BindingFlags.Instance);
            //dynMethod.Invoke(this, new object[] { false });

            graphLayout.ApplyLayout(graphModelElementEx);

            ContainerModelElementEx x = controlFlowGraphModelElement.Container as ContainerModelElementEx;
            var children = ContainerModelElementEx.GetAllChildren(controlFlowGraphModelElement.Container);
            var bounds   = ContainerModelElementEx.GetBounds(x.Children);

            graphModelElementEx.RefreshGraph(graphModelElementEx.Container);

            LayoutGraph layoutGraph = new LayoutGraph();

            graphLayout.AppendLayout(controlFlowGraphModelElement.Container.Children);
            graphLayout.ApplyLayout(controlFlowGraphModelElement);

            // Should contain the serialized GraphLayout XML Data with correct coordinates...
            var graphLayoutXml = SerializerHelper.Save(graphModelElement);
        }