You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

455 lines
21 KiB

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ZwSoft.ZwCAD.DatabaseServices;
using ZwSoft.ZwCAD.Runtime;
using ZwSoft.ZwCAD.Geometry;
using ZwSoft.ZwCAD.ApplicationServices;
using ZwSoft.ZwCAD.EditorInput;
using Teamcenter.Hello;
using Teamcenter.Soa.Client;
using Teamcenter.ClientX;
using Teamcenter.Services.Strong.Core;
using Teamcenter.Soa.Client.Model;
using Teamcenter.Soa.Exceptions;
using Teamcenter.Services.Strong.Query;
using Teamcenter.Services.Strong.Core._2007_06.DataManagement;
using User = Teamcenter.Soa.Client.Model.Strong.User;
using Folder = Teamcenter.Soa.Client.Model.Strong.Folder;
using WorkspaceObject = Teamcenter.Soa.Client.Model.Strong.WorkspaceObject;
using Item = Teamcenter.Soa.Client.Model.Strong.Item;
using ItemRevision = Teamcenter.Soa.Client.Model.Strong.ItemRevision;
using ImanQuery = Teamcenter.Soa.Client.Model.Strong.ImanQuery;
using DataSet = Teamcenter.Soa.Client.Model.Strong.Dataset;
public struct ALLOBJECT
{
public TreeNode treenode;
public WorkspaceObject workobject;
public string name;
public string uid;
}
namespace HelloTeamcenter.form
{
public partial class OpenFromTC : Form
{
public List<ALLOBJECT> alllist = new List<ALLOBJECT>();
public List<ALLOBJECT> folderlist = new List<ALLOBJECT>();
public List<ALLOBJECT> itemlist = new List<ALLOBJECT>();
public List<ALLOBJECT> itemvisionlist = new List<ALLOBJECT>();
public List<ALLOBJECT> datasetlist = new List<ALLOBJECT>();
public OpenFromTC()
{
InitializeComponent();
}
public Document appodc;
public User user;
public bool first = true;
public Folder home = null;
Editor ed;
private void OpenFromTC_Load(object sender, EventArgs e)
{
ed = appodc.Editor;
treeView1.Nodes.Clear();
TreeNode rootnode = new TreeNode("Home", 7, 7);
treeView1.Nodes.Add(rootnode);
WorkspaceObject[] contents = null;
DataManagementService dmService = DataManagementService.getService(Session.getConnection());
try
{
home = user.Home_folder;
}
catch (NotLoadedException ex)
{
ed.WriteMessage(ex.Message);
return;
}
try
{
ModelObject[] objects = { home };
String[] attributes = { "contents" };
dmService.RefreshObjects(objects);
dmService.GetProperties(objects, attributes);
contents = home.Contents;
}
catch (NotLoadedException ex) { ed.WriteMessage(ex.Message); }
//ALLOBJECT topobject = new ALLOBJECT();
//topobject.treenode = rootnode;
//topobject.workobject = home;
//alllist.Add(topobject);
//folderlist.Add(topobject);
for (int i = 0; i < contents.Length; i++)
{
WorkspaceObject childobj = contents[i];
ModelObject[] objects = { childobj };
String[] attributes = { "object_string" ,"object_type" };
dmService.RefreshObjects(objects);
dmService.GetProperties(objects, attributes);
string name = childobj.Object_string;
string type = childobj.Object_type;
if (type == "Folder" || type == "Newstuff Folder" || type == "Mail Folder")
{
ALLOBJECT perobject = new ALLOBJECT();
perobject.workobject = childobj;
Folder fl = childobj as Folder;
if (type == "Folder")
{
TreeNode childnode = new TreeNode(name, 1, 1);
perobject.treenode = childnode;
perobject.name = name;
perobject.uid = childobj.Uid;
rootnode.Nodes.Add(childnode);
}
else if (type == "Newstuff Folder")
{
TreeNode childnode = new TreeNode(name, 6, 6);
perobject.treenode = childnode;
perobject.name = name;
perobject.uid = childobj.Uid;
rootnode.Nodes.Add(childnode);
}
else if (type == "Mail Folder")
{
TreeNode childnode = new TreeNode(name, 5, 5);
perobject.treenode = childnode;
perobject.name = name;
perobject.uid = childobj.Uid;
rootnode.Nodes.Add(childnode);
}
alllist.Add(perobject);
folderlist.Add(perobject);
}
else if (type == "Item" || type == "D5Product"
|| type == "D5AsmPart" || type == "D5Part"
|| type == "D5StdFasteners" || type == "D5CommonParts")
{
ALLOBJECT perobject = new ALLOBJECT();
perobject.workobject = childobj;
Item item = childobj as Item;
TreeNode childnode = new TreeNode(name, 3, 3);
perobject.treenode = childnode;
perobject.name = name;
perobject.uid = childobj.Uid;
rootnode.Nodes.Add(childnode);
alllist.Add(perobject);
itemlist.Add(perobject);
}
}
foreach(TreeNode ch in rootnode.Nodes)
{
ch.EnsureVisible();
}
}
private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
{
//MessageBox.Show("获得");
TreeNode nownode = this.treeView1.SelectedNode;
getChild(nownode);
foreach (TreeNode ch in nownode.Nodes)
{
ch.EnsureVisible();
}
}
private void getChild(TreeNode nownode)
{
nownode.Nodes.Clear();
DataManagementService dmService = DataManagementService.getService(Session.getConnection());
WorkspaceObject[] contents = null;
//dmService.GetProperties(objects, attributes);
string nodetext = nownode.Text;
int imageindex = nownode.SelectedImageIndex;
List<ALLOBJECT> templist = new List<ALLOBJECT>();
if (imageindex == 1)
{
foreach (ALLOBJECT perobject in folderlist)
{
if (perobject.treenode.Equals(nownode))
{
Folder fl = perobject.workobject as Folder;
ModelObject[] objects = { fl };
String[] attributes = { "contents" };
dmService.RefreshObjects(objects);
dmService.GetProperties(objects, attributes);
contents = fl.Contents;
for (int i = 0; i < contents.Length; i++)
{
WorkspaceObject childobj = contents[i];
ModelObject[] objects1 = { childobj };
String[] attributes1 = { "object_string", "object_type" };
dmService.RefreshObjects(objects1);
dmService.GetProperties(objects1, attributes1);
string name = childobj.Object_string;
string type = childobj.Object_type;
if (type == "Folder" || type == "Newstuff Folder" || type == "Mail Folder")
{
ALLOBJECT inperobject = new ALLOBJECT();
inperobject.workobject = childobj;
Folder infl = childobj as Folder;
if (type == "Folder")
{
TreeNode childnode = new TreeNode(name, 1, 1);
inperobject.treenode = childnode;
nownode.Nodes.Add(childnode);
}
else if (type == "Newstuff Folder")
{
TreeNode childnode = new TreeNode(name, 6, 6);
inperobject.treenode = childnode;
nownode.Nodes.Add(childnode);
}
else if (type == "Mail Folder")
{
TreeNode childnode = new TreeNode(name, 5, 5);
inperobject.treenode = childnode;
nownode.Nodes.Add(childnode);
}
templist.Add(inperobject);
folderlist.Add(inperobject);
}
else if (type == "Item" || type == "D5Product"
|| type == "D5AsmPart" || type == "D5Part"
|| type == "D5StdFasteners" || type == "D5CommonParts")
{
ALLOBJECT inperobject = new ALLOBJECT();
inperobject.workobject = childobj;
Item item = childobj as Item;
TreeNode childnode = new TreeNode(name, 3, 3);
inperobject.treenode = childnode;
nownode.Nodes.Add(childnode);
templist.Add(inperobject);
itemlist.Add(inperobject);
}
}
break;
}
}
if (templist.Count > 0 && templist != null)
{
alllist.AddRange(templist);
templist.Clear();
}
return;
}
else if (imageindex == 3)
{
foreach (ALLOBJECT perobject in itemlist)
{
if (perobject.treenode.Equals(nownode))
{
Item item = perobject.workobject as Item;
ModelObject[] itemrevisionlist = null;
ModelObject[] objects = { item };
String[] attributes = { "revision_list" };
dmService.RefreshObjects(objects);
dmService.GetProperties(objects, attributes);
itemrevisionlist = item.Revision_list;
for (int i = 0; i < itemrevisionlist.Length; i++)
{
ItemRevision itemrevision = itemrevisionlist[i] as ItemRevision;
ModelObject[] objects1 = { itemrevision };
String[] attributes1 = { "object_string", "object_type" };
dmService.RefreshObjects(objects1);
dmService.GetProperties(objects1, attributes1);
string name = itemrevision.Object_string;
string type = itemrevision.Object_type;
ALLOBJECT inperobject = new ALLOBJECT();
inperobject.workobject = itemrevision;
TreeNode childnode = new TreeNode(name, 4, 4);
inperobject.treenode = childnode;
nownode.Nodes.Add(childnode);
templist.Add(inperobject);
itemvisionlist.Add(inperobject);
}
break;
}
}
if (templist.Count > 0 && templist != null)
{
alllist.AddRange(templist);
templist.Clear();
}
return;
}
else if (imageindex == 4)
{
foreach (ALLOBJECT perobject in itemvisionlist)
{
if (perobject.treenode.Equals(nownode))
{
ItemRevision itemrevision = perobject.workobject as ItemRevision;
ExpandGRMRelationsPref myPref = new ExpandGRMRelationsPref();
RelationAndTypesFilter2 myFilter = new RelationAndTypesFilter2();
myFilter.RelationName = "IMAN_specification";
String[] typeVec = { "D5DWG", "Folder" };
myFilter.ObjectTypeNames = typeVec;
myPref.ExpItemRev = false;
RelationAndTypesFilter2[] myfilter = { myFilter };
myPref.Info = myfilter;
ModelObject[] objects1 = { itemrevision };
ExpandGRMRelationsResponse myResp = dmService.ExpandGRMRelationsForPrimary(objects1,myPref);
ExpandGRMRelationsOutput[] myoutput = myResp.Output;
for (int i = 0; i < myoutput.Length; i++)
{
ExpandGRMRelationsOutput one_out = myoutput[i];
for (int j = 0; j < one_out.OtherSideObjData.Length; j++)
{
ExpandGRMRelationsData otherSideData = one_out.OtherSideObjData[j];
for (int k = 0; k < otherSideData.OtherSideObjects.Length; k++)
{
Type typeinfo = otherSideData.OtherSideObjects[k].GetType();
string typename = typeinfo.Name;
if (typename == "Folder")
{
Folder infold = otherSideData.OtherSideObjects[k] as Folder;
ModelObject[] objects = { infold };
String[] attributes = { "object_string", "object_type" };
dmService.RefreshObjects(objects);
dmService.GetProperties(objects, attributes);
string name = infold.Object_string;
string type = infold.Object_type;
ALLOBJECT inperobject = new ALLOBJECT();
inperobject.workobject = infold;
TreeNode childnode = new TreeNode(name, 1, 1);
inperobject.treenode = childnode;
nownode.Nodes.Add(childnode);
templist.Add(inperobject);
folderlist.Add(inperobject);
}
else
{
DataSet dateset = otherSideData.OtherSideObjects[k] as DataSet;
ModelObject[] objects = { dateset };
String[] attributes = { "object_string" };
dmService.RefreshObjects(objects);
dmService.GetProperties(objects, attributes);
string name = dateset.Object_string;
ALLOBJECT inperobject = new ALLOBJECT();
inperobject.workobject = dateset;
inperobject.name = name;
TreeNode childnode = new TreeNode(name, 0, 0);
inperobject.treenode = childnode;
nownode.Nodes.Add(childnode);
templist.Add(inperobject);
datasetlist.Add(inperobject);
}
}
}
}
break;
}
}
if (templist.Count > 0 && templist != null)
{
alllist.AddRange(templist);
templist.Clear();
}
return;
}
else if (imageindex == 6)
{
}
else if(imageindex == 7)
{
alllist.Clear();
folderlist.Clear();
itemlist.Clear();
itemvisionlist.Clear();
datasetlist.Clear();
try
{
ModelObject[] objects = { home };
String[] attributes = { "contents" };
dmService.RefreshObjects(objects);
dmService.GetProperties(objects, attributes);
contents = home.Contents;
}
catch (NotLoadedException ex) { ed.WriteMessage(ex.Message); }
for (int i = 0; i < contents.Length; i++)
{
WorkspaceObject childobj = contents[i];
ModelObject[] objects = { childobj };
String[] attributes = { "object_string", "object_type" };
dmService.RefreshObjects(objects);
dmService.GetProperties(objects, attributes);
string name = childobj.Object_string;
string type = childobj.Object_type;
if (type == "Folder" || type == "Newstuff Folder" || type == "Mail Folder")
{
ALLOBJECT perobject = new ALLOBJECT();
perobject.workobject = childobj;
Folder fl = childobj as Folder;
if (type == "Folder")
{
TreeNode childnode = new TreeNode(name, 1, 1);
perobject.treenode = childnode;
perobject.name = name;
perobject.uid = childobj.Uid;
nownode.Nodes.Add(childnode);
}
else if (type == "Newstuff Folder")
{
TreeNode childnode = new TreeNode(name, 6, 6);
perobject.treenode = childnode;
perobject.name = name;
perobject.uid = childobj.Uid;
nownode.Nodes.Add(childnode);
}
else if (type == "Mail Folder")
{
TreeNode childnode = new TreeNode(name, 5, 5);
perobject.treenode = childnode;
perobject.name = name;
perobject.uid = childobj.Uid;
nownode.Nodes.Add(childnode);
}
alllist.Add(perobject);
folderlist.Add(perobject);
}
else if (type == "Item" || type == "D5Product"
|| type == "D5AsmPart" || type == "D5Part"
|| type == "D5StdFasteners" || type == "D5CommonParts")
{
ALLOBJECT perobject = new ALLOBJECT();
perobject.workobject = childobj;
Item item = childobj as Item;
TreeNode childnode = new TreeNode(name, 3, 3);
perobject.treenode = childnode;
perobject.name = name;
perobject.uid = childobj.Uid;
nownode.Nodes.Add(childnode);
alllist.Add(perobject);
itemlist.Add(perobject);
}
}
foreach (TreeNode ch in nownode.Nodes)
{
ch.EnsureVisible();
}
}
}
}
}