//================================================== // // @@ // //================================================== using System; using System.Collections; using Teamcenter.ClientX; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Windows; using HelloTeamcenter.hello; using HelloTeamcenter.form; using System.Windows.Forms; using System.IO; using System.Collections.Generic; using Teamcenter.Services.Strong.Core; using Teamcenter.Soa.Client.Model; using Teamcenter.Services.Strong.Core._2006_03.Reservation; using Teamcenter.Services.Strong.Core._2006_03.FileManagement; using Teamcenter.Services.Strong.Core._2006_03.DataManagement; using Teamcenter.Services.Strong.Core._2007_01.DataManagement; using Teamcenter.Services.Strong.Core._2007_06.DataManagement; using Teamcenter.Soa.Internal.Client.Model; using Teamcenter.Soa.Internal.Client; using Teamcenter.Soa.Client; using Teamcenter.Services.Strong.Query; //using Teamcenter.FMS.FCCProxy.ClientCache; using Teamcenter.Schemas.Soa._2006_03.Exceptions; using Teamcenter.Soa.Exceptions; using User = Teamcenter.Soa.Client.Model.Strong.User; using DataSet = Teamcenter.Soa.Client.Model.Strong.Dataset; using ImanFile = Teamcenter.Soa.Client.Model.Strong.ImanFile; using SavedQueryResults = Teamcenter.Services.Strong.Query._2007_06.SavedQuery.SavedQueryResults; 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 ReleaseStatus = Teamcenter.Soa.Client.Model.Strong.ReleaseStatus; using Form = Teamcenter.Soa.Client.Model.Strong.Form; using Dataset = Teamcenter.Soa.Client.Model.Strong.Dataset; using Folder = Teamcenter.Soa.Client.Model.Strong.Folder; using WorkspaceObject = Teamcenter.Soa.Client.Model.Strong.WorkspaceObject; [assembly: ExtensionApplication(typeof(Teamcenter.Hello.Hello))] [assembly: CommandClass(typeof(Teamcenter.Hello.Hello))] namespace Teamcenter.Hello { /** * This sample client application demonstrates some of the basic features of the * Teamcenter Services framework and a few of the services. * * An instance of the Connection object is created with implementations of the * ExceptionHandler, PartialErrorListener, ChangeListener, and DeleteListeners * intefaces. This client application performs the following functions: * 1. Establishes a session with the Teamcenter server * 2. Display the contents of the Home Folder * 3. Performs a simple query of the database * 4. Create, revise, and delete an Item * */ public class Hello : Autodesk.AutoCAD.Runtime.IExtensionApplication { static User loginuser; Login loginfrom; OpenFromTC openfrom; Search searchfrom; SaveToTC savefrom; static Autodesk.AutoCAD.EditorInput.Editor ed; static Autodesk.AutoCAD.ApplicationServices.Document appodc; static DocumentCollection acdocmgr; static Teamcenter.ClientX.Session session; // bool islogin = false; bool hasRight = true; string serveraddress; string username; string password; string usergroup; string userrole; //用于记录Item类型.xml文件中对应的Item类型 static OriginItemType originitemtype; static string xmlpath = ""; public void Initialize() { //addComtextMenu(); } public void Terminate() { } [CommandMethod("LOGIN")] public void login() { appodc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; acdocmgr = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager; //acdocmgr.DocumentToBeDestroyed+=new DocumentCollectionEventHandler(acdocmgr_DocumentToBeDestroyed); appodc.Database.SaveAs(appodc.Name, true, DwgVersion.Current, appodc.Database.SecurityParameters); //appodc.Database.Save(); ed = appodc.Editor; ed.WriteMessage("==========login==========\n"); //Tool tool = new Tool(); //BTLClass titleinfo = tool.getBTL("DFHM_BTL",appodc); //ed.WriteMessage("标题栏信息:\n" + "图号:" + titleinfo.Item_id.ToString()); //读取用户配置文件 //OriginTool origintool = new OriginTool(); //xmlpath = System.Environment.CurrentDirectory; xmlpath = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase; ed.WriteMessage("当前工作路径:" + xmlpath + "\n"); //origintool.checkxml(xmlpath); loginfrom = new Login(); loginfrom.appodc = appodc; loginfrom.button1.Click += new System.EventHandler(this.loginbutton1_Click); loginfrom.button2.Click += new System.EventHandler(this.loginbutton2_Click); loginfrom.Activate(); loginfrom.Show(); } private void loginbutton1_Click(object sender, EventArgs e) { loginfrom.m_WebAddress = loginfrom.textBox1.Text.ToString(); loginfrom.username = loginfrom.textBox2.Text.ToString(); loginfrom.password = loginfrom.textBox3.Text.ToString(); loginfrom.usergroup = loginfrom.textBox4.Text.ToString(); loginfrom.userrole = loginfrom.textBox5.Text.ToString(); session = new Teamcenter.ClientX.Session(loginfrom.m_WebAddress); loginuser = session.mylogin(loginfrom.username, loginfrom.password, loginfrom.usergroup, loginfrom.userrole); if (loginuser != null) { serveraddress = loginfrom.m_WebAddress; username = loginfrom.username; password = loginfrom.password; usergroup = loginfrom.usergroup; userrole = loginfrom.userrole; OriginTool.Loginuser = loginuser; ed.WriteMessage("登录成功\n"); islogin = true; string tempdir = System.Environment.GetEnvironmentVariable("TEMP").ToString(); string loginfile = tempdir + "\\login.ini"; loginfrom.Hide(); //loginfrom.Dispose(); if (File.Exists(loginfile)) { StreamWriter sw = new StreamWriter(loginfile, false); sw.WriteLine(loginfrom.m_WebAddress + "|" + loginfrom.username + "|" + loginfrom.password + "|" + loginfrom.usergroup + "|" + loginfrom.userrole + "||"); sw.Close(); } else { FileStream fs = new FileStream(loginfile, FileMode.Create, FileAccess.Write); StreamWriter sw = new StreamWriter(fs); sw.WriteLine(loginfrom.m_WebAddress + "|" + loginfrom.username + "|" + loginfrom.password + "|" + loginfrom.usergroup + "|" + loginfrom.userrole + "||"); sw.Close(); fs.Close(); } //从服务器端获取配置xml文件 OriginTool origintool = new OriginTool(); bool hasxmlfile = origintool.checkxml(xmlpath); if (hasxmlfile) { DialogResult hasresult = MessageBox.Show("当前工作目录已经存在XML配置文件,是否与服务器端同步?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (hasresult == DialogResult.No || hasresult == DialogResult.None) { ed.WriteMessage("放弃XML配置文件同步\n"); } if (hasresult == DialogResult.Yes) { Hashtable prevalues = origintool.getTCPreferences("OriginXMLFile"); if (prevalues != null && prevalues.Count > 0) { foreach (DictionaryEntry de in prevalues) { List itemidlist = origintool.getCorrespondItemID((string[])de.Value); for (int m = 0; m < itemidlist.Count; m++) { string item_id = itemidlist[m]; SavedQueryResults found = origintool.getSearchItem(item_id); if (found.NumOfObjects == 0) { ed.WriteMessage("TC系统中首选项配置内容有误,请确认\n"); return; } else { Item dmtitem = found.Objects[0] as Item; if (!origintool.downloadfile(dmtitem, xmlpath)) { ed.WriteMessage("下载模板文件出错,请检查\n"); return; } } } } } } } } else { MessageBox.Show("对不起,登录失败,请确认"); loginfrom.Dispose(); } ed.WriteMessage("\n"); } private void loginbutton2_Click(object sender, EventArgs e) { loginfrom.Hide(); loginfrom.Dispose(); } bool hadlogin = false; [CommandMethod("OPEN_FROM_TC")] public void openformtc() { if (loginuser != null) { hadlogin = true; } else login(); //if (hadlogin == false) //{ // string tempdir = System.Environment.GetEnvironmentVariable("TEMP").ToString(); // string loginfile = tempdir + "\\login.ini"; // if (File.Exists(loginfile)) // { // StreamReader sr = new StreamReader(loginfile); // string line; // if ((line = sr.ReadLine()) != null) // { // string[] ans = line.Split('|'); // for (int i = 0; i < ans.Length; i++) // { // if (i == 0) // serveraddress = ans[i].ToString(); // if (i == 1) // username = ans[i].ToString(); // if (i == 2) // password = ans[i].ToString(); // if (i == 3) // usergroup = ans[i].ToString(); // if (i == 4) // userrole = ans[i].ToString(); // } // if ((line = sr.ReadLine()) != null) // { // if (line == "#") // { // Teamcenter.ClientX.Session session = new Teamcenter.ClientX.Session(serveraddress); // try // { // loginuser = session.mylogin(username, password, usergroup, userrole); // } // catch (InvalidCredentialsException e) // { // ed.WriteMessage("用户缓存信息错误,请重新登录"); // return; // } // if (loginuser != null) // hadlogin = true; // } // } // } // sr.Close(); // } // else // { // login(); // } //} if (hadlogin == true) { openfrom = new OpenFromTC(); openfrom.appodc = appodc; openfrom.user = loginuser; openfrom.button1.Click += new System.EventHandler(this.openbutton1_Click); openfrom.button2.Click += new System.EventHandler(this.openbutton2_Click); openfrom.Activate(); openfrom.Show(); } } private void openbutton1_Click(object sender, EventArgs e) { DataManagementService dmService = DataManagementService.getService(Session.getConnection()); Reservation res = ReservationService.getService(Session.getConnection()); Editor ed1 = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor; TreeNode nownode = this.openfrom.treeView1.SelectedNode; if (nownode.SelectedImageIndex == 0) { List datasetlist = this.openfrom.datasetlist; foreach (ALLOBJECT perobject in datasetlist) { if (perobject.treenode.Equals(nownode)) { this.openfrom.textBox1.Text = perobject.name; DialogResult isopen = MessageBox.Show("您是否确定打开该图纸?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (isopen == DialogResult.None || isopen == DialogResult.No) { return; } DataSet mydateset = perobject.workobject as DataSet; ModelObject[] objects = { mydateset }; String[] attributes = { "is_modifiable", "checked_out", "ref_list" }; dmService.RefreshObjects(objects); dmService.GetProperties(objects, attributes); if (mydateset.Is_modifiable == false) { DialogResult moresult = MessageBox.Show("您没有修改权限,是否以只读方式打开?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (moresult == DialogResult.Yes) { hasRight = false; } else { return; } } if (mydateset.Is_modifiable) { DialogResult moresult = MessageBox.Show("是否签出?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (moresult == DialogResult.Yes) { if (mydateset.Checked_out == "Y") { MessageBox.Show("对不起,文件已签出!请确认文件签入后执行此操作"); return; } else { ModelObject[] dataobj = { mydateset }; res.Checkout(dataobj, "", ""); ed1.WriteMessage("文件已签出"); ed1.WriteMessage("\n"); } } } ModelObject[] dsfilevec = mydateset.Ref_list; ed1.WriteMessage("长度:" + dsfilevec.Length); ed1.WriteMessage(dsfilevec[0].GetType().ToString()); ImanFile dsfile = dsfilevec[0] as ImanFile; ModelObject[] objects1 = { dsfile }; String[] attributes1 = { "relative_directory_path", "original_file_name" }; dmService.RefreshObjects(objects1); dmService.GetProperties(objects1, attributes1); ed1.WriteMessage("路径:" + dsfile.Relative_directory_path + "\n"); ed1.WriteMessage("文件名:" + dsfile.Original_file_name + "\n"); string newfilename = dsfile.Original_file_name; ed1.WriteMessage("Original_file_name : "+newfilename+"\n"); string tempdir = System.Environment.GetEnvironmentVariable("TEMP").ToString(); ed1.WriteMessage("TEMP:" + tempdir.ToString() + "\n"); FileManagementService fmService = FileManagementService.getService(Teamcenter.ClientX.Session.getConnection()); ImanFile[] objects2 = { dsfile }; FileTicketsResponse tickets = fmService.GetFileReadTickets(objects2); ed1.WriteMessage("tickets : " + tickets.Tickets.Count + "\n"); foreach (System.Collections.DictionaryEntry ticket in tickets.Tickets) { ed1.WriteMessage("键:" + ticket.Key + "\n" + "值:" + ticket.Value + "\n"); } Teamcenter.Soa.Client.FileManagementUtility fmu = new Teamcenter.Soa.Client.FileManagementUtility(Teamcenter.ClientX.Session.getConnection()); Teamcenter.Soa.Client.GetFileResponse getFileResponse = fmu.GetFiles(dsfilevec); FileInfo[] fileinfovec = getFileResponse.GetFiles(); ed1.WriteMessage("文件个数:" + fileinfovec.Length + "\n"); FileInfo file = fileinfovec[0]; //ed.WriteMessage("file.DirectoryName:" + file.DirectoryName + "\n"); //ed.WriteMessage("file.FullName" + file.FullName + "\n"); //string datestring = ""; //datestring = DateTime.Now.ToString("yyyy_MM_dd_hh_mm_ss");//19 string newtempfile = tempdir + "\\" + newfilename; ed1.WriteMessage("拷贝路径:" + newtempfile + "\n"); System.IO.File.Copy(file.FullName, newtempfile, true); System.IO.File.SetAttributes(newtempfile, FileAttributes.Normal); this.openfrom.Hide(); this.openfrom.Dispose(); if (File.Exists(newtempfile)) { DocumentCollection acdocmgr1 = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager; acdocmgr1.Open(newtempfile, false); //Object pdata = newtempfile; //acdocmgr.ExecuteInApplicationContext(c_back,pdata); //Teamcenter.ClientX.Session session = new Teamcenter.ClientX.Session(serveraddress); //loginuser = session.mylogin(username, password, usergroup, userrole); } else { ed1.WriteMessage("对不起,用户临时目录下不存在此文件\n"); } break; } } } else { ed1.WriteMessage("请选择正确的数据集类型\n"); MessageBox.Show("请选择正确的数据集类型"); return; } } private void openbutton2_Click(object sender, EventArgs e) { this.openfrom.Hide(); this.searchfrom = new Search(); this.searchfrom.appdoc = appodc; this.searchfrom.user = loginuser; this.searchfrom.xmlpath = xmlpath; this.searchfrom.Activate(); this.searchfrom.Show(); this.openfrom.Dispose(); } private void c_back(Object data) { DocumentCollection acdocmgr = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager; if (acdocmgr.IsApplicationContext) { acdocmgr.Open(Convert.ToString(data)); } } [CommandMethod("SAVE_AS")] public void saveas() { savetotc(); } [CommandMethod("SAVE_TO_TC")] public void savetotc() { //Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.SendStringToExecute(string.Format("{0}", "QSAVE"), true, false, true); if (loginuser != null) { hadlogin = true; } else login(); if (hadlogin) { string filename = ""; DataManagementService dmService = DataManagementService.getService(Session.getConnection()); Editor ed1 = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor; OriginTool origintool = new OriginTool(); ed1.WriteMessage("\n开始获取标题栏信息...\n"); /************************************************************************/ /* 以下是取数据的代码 */ /************************************************************************/ ArrayList btllist = new ArrayList(); OriginReadXml readxml = new OriginReadXml(); btllist = readxml.OriginReadBTLXML(xmlpath); for (int i = 0; i < btllist.Count; i++) { OriginBTL onebtlinfo = (OriginBTL)btllist[i]; ed1.WriteMessage("标题栏块参照名称:" + onebtlinfo.Btlname + "\n"); ed1.WriteMessage("标题栏详细信息:" + "\n"); foreach (DictionaryEntry de in onebtlinfo.Btldatatable) { ed1.WriteMessage("CAD属性名:"+de.Key + "\tCAD属性值:"+de.Value+ "\tTC属性名:" + onebtlinfo.Btltctable[de.Key] + "\tTC系统类型:" + onebtlinfo.Btltypetable[de.Key] + "\t可写:" + onebtlinfo.Btlwritetable[de.Key] + "\n"); } } ed1.WriteMessage("开始获取明细栏信息...\n"); List mxllist = new List(); mxllist = readxml.OriginReadMXLXML(xmlpath); for (int i = 0; i < mxllist.Count;i++ ) { OriginMXL mxlinfo = mxllist[i]; ed1.WriteMessage("明细栏块参照名称:" + mxlinfo.Mxlname + "\n"); ed1.WriteMessage("明细栏"+i+"详细信息:" + "\n"); foreach (DictionaryEntry de in mxlinfo.Mxldatatable) { ed1.WriteMessage("CAD属性名:" + de.Key + "\tCAD属性值:"+de.Value+ "\tTC属性名:"+mxlinfo.Mxltctable[de.Key]+ "\tis_bomline:"+mxlinfo.Mxlisbomtable[de.Key]+ "\twritable:"+mxlinfo.Mxlupdatetable[de.Key]+"\n"); } } ed1.WriteMessage("明细栏个数为:" + mxllist.Count); ed1.WriteMessage("开始为bom结构排序\n"); mxllist = origintool.sortbomlist(mxllist); ed1.WriteMessage("排序成功...\n"); //处理标题栏 for (int btli = 0; btli < btllist.Count; btli++) { OriginBTL btlinfo = (OriginBTL)btllist[btli]; //获得item_id所对应的cad图纸信息 object key = origintool.getKeyFromValue(btlinfo.Btltctable, "item_id"); if (key == null) { ed1.WriteMessage("系统没有找到item_id所对应的图纸信息,系统中断\n"); return; } SavedQueryResults found = origintool.getSearchItem(btlinfo.Btldatatable[key].ToString()); if (found != null && found.NumOfObjects > 0) { DialogResult upresult = MessageBox.Show("找到对应标题栏Item,是否更新?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (upresult == DialogResult.No || upresult == DialogResult.None) { ed1.WriteMessage("放弃更新\n"); return; } if (upresult == DialogResult.Yes) { for (int i = 0; i < found.NumOfObjects; i++) { Item item = found.Objects[i] as Item; ModelObject[] objects = { item }; String[] attributes = { "item_id", "object_name", "object_string" }; dmService.RefreshObjects(objects); dmService.GetProperties(objects, attributes); string item_id = item.Item_id; string object_name = item.Object_name; Dataset dataset = null; GetItemFromIdInfo tempitem = new GetItemFromIdInfo(); tempitem.ItemId = item_id; GetItemFromIdInfo[] infos = new GetItemFromIdInfo[1]; infos[0] = tempitem; GetItemFromIdPref pref = new GetItemFromIdPref(); //这里可能要换成新的方式 GetItemFromIdResponse infoResp = dmService.GetItemFromId(infos, 1, pref); //这个层级上需要增加对Item属性的更新 if (btlinfo.Btltypetable.ContainsValue("Item")) { ed1.WriteMessage("正在更新Item属性\n"); Hashtable itemattrs = new Hashtable(); foreach (DictionaryEntry de in btlinfo.Btltypetable) { if (de.Value.ToString() == "Item" && btlinfo.Btlwritetable[de.Key].ToString() == "1" && btlinfo.Btlupdatetable[de.Key].ToString() == "1") { string cadstring = de.Key.ToString(); string cadvalue = btlinfo.Btldatatable[cadstring].ToString(); string tcstring = btlinfo.Btltctable[cadstring].ToString(); itemattrs.Add(tcstring, cadvalue); } } if (itemattrs.Count > 0) { ServiceData itemupdateresponse = dmService.SetDisplayProperties(objects, itemattrs); if (itemupdateresponse.sizeOfPartialErrors() <= 0) { ed1.WriteMessage("更新Item属性成功\n"); } } } for (int j = 0; j < infoResp.Output.Length; j++) { ModelObject[] objects1 = { infoResp.Output[j].Item }; String[] attributes1 = { "revision_list", "is_modifiable" }; dmService.RefreshObjects(objects1); dmService.GetProperties(objects1, attributes1); ModelObject[] revlist = infoResp.Output[j].Item.Revision_list; dmService.RefreshObjects(revlist); ItemRevision itemRev = null; string rev_id = ""; for (int k = 0; k < revlist.Length; k++) { itemRev = revlist[k] as ItemRevision; ModelObject[] objects2 = { itemRev }; String[] attributes2 = { "item_revision_id", "is_modifiable" , "checked_out","item_id","release_status_list", "IMAN_master_form_rev"}; dmService.RefreshObjects(objects2); dmService.GetProperties(objects2, attributes2); //判断图纸上是否存在配置了版本信息,如果配置了版本信息,则处理指定的版本,否则,处理最新版本 if (btlinfo.Btltctable.ContainsValue("item_revision_id")) { if (itemRev.Item_revision_id == btlinfo.Btldatatable[origintool.getKeyFromValue(btlinfo.Btltctable, "item_revision_id")].ToString()) { break; } } } if (itemRev == null) { ed1.WriteMessage("Item没有对应版本\n"); return; } rev_id = itemRev.Item_revision_id; ReleaseStatus[] releaselist = itemRev.Release_status_list; if (!itemRev.Is_modifiable) { MessageBox.Show("ItemRevision为只读,您没有保存权限!"); return; } if (releaselist.Length > 0) { string message = "Item ID为" + itemRev.Item_id + "的最新版本已发布!"; MessageBox.Show(message); return; } //这个层级上要增加对版本属性的更新 if (btlinfo.Btltypetable.ContainsValue("ItemRevision")) { ed1.WriteMessage("正在更新ItemRevision属性\n"); Hashtable itemRevattrs = new Hashtable(); ModelObject[] olditemRev = new ModelObject[1]; olditemRev[0] = itemRev; foreach (DictionaryEntry de in btlinfo.Btltypetable) { if (de.Value.ToString() == "ItemRevision" && btlinfo.Btlwritetable[de.Key].ToString() == "1" && btlinfo.Btlupdatetable[de.Key].ToString() == "1") { string cadstring = de.Key.ToString(); string cadvalue = btlinfo.Btldatatable[cadstring].ToString(); string tcstring = btlinfo.Btltctable[cadstring].ToString(); itemRevattrs.Add(tcstring, cadvalue); } } if (itemRevattrs.Count > 0) { ServiceData itemupdateresponse = dmService.SetDisplayProperties(olditemRev, itemRevattrs); if (itemupdateresponse.sizeOfPartialErrors() <= 0) { ed1.WriteMessage("更新ItemRevision属性成功\n"); } } } //更新表单信息 FormInfo forminfo = new FormInfo(); FormInfo[] forminfo_vec = new FormInfo[1]; ModelObject[] form_vec; form_vec = itemRev.IMAN_master_form_rev; for (int k = 0; k < form_vec.Length; k++) { //Type myType = form_vec[k].GetType(); //string fType = myType.Name; Form form = form_vec[k] as Form; bool frash = false; string[] props = new string[1]; Hashtable formAttrs = new Hashtable(); //如果配置了Form属性,则执行如下代码 if (btlinfo.Btltypetable.ContainsValue("Form")) { foreach (DictionaryEntry de in btlinfo.Btltypetable) { if (de.Value.ToString() == "Form" && btlinfo.Btlwritetable[de.Key].ToString() == "1" && btlinfo.Btlupdatetable[de.Key].ToString() == "1") { string cadstring = de.Key.ToString(); string cadvalue = btlinfo.Btldatatable[cadstring].ToString(); string tcstring = btlinfo.Btltctable[cadstring].ToString(); string writestring = btlinfo.Btlwritetable[cadstring].ToString(); ed1.WriteMessage("取属性" + tcstring + "\n"); props[0] = tcstring; ServiceData serviceData = dmService.GetProperties(form_vec, props); if (serviceData.sizeOfPartialErrors() > 0) { continue; } Property my_prop = form_vec[k].GetProperty(tcstring); if (cadvalue != my_prop.StringValue) { if (my_prop.StringValue == "") frash = true; else { string message = "当前标题栏图纸:" + cadstring + "属性值" + cadvalue + "与系统内:" + tcstring + "属性值" + my_prop.StringValue + "不一致,是否覆盖系统内属性?"; DialogResult updateresult = MessageBox.Show(message, "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (updateresult == DialogResult.Yes) { frash = true; } } string[] formAttrValue = new string[1]; formAttrValue[0] = ""; if (frash) formAttrValue[0] = cadvalue; else formAttrValue[0] = my_prop.StringValue; ed1.WriteMessage(tcstring + ":" + formAttrValue[0] + "\n"); formAttrs.Add(tcstring, formAttrValue); props[0] = ""; } } } } ed1.WriteMessage("formAttrs:" + formAttrs.Count + "\n"); foreach (DictionaryEntry hash in formAttrs) { ed1.WriteMessage(hash.Key + ":" + Convert.ToString(hash.Value) + "\n"); } forminfo.AttributesMap = formAttrs; forminfo.ClientId = "1"; forminfo.Description = ""; forminfo.FormObject = (Form)form; forminfo.Name = item_id + "/" + rev_id; forminfo.ParentObject = null; forminfo.RelationName = "IMAN_master_form"; forminfo.SaveDB = true; forminfo.FormType = "ItemRevision Master"; forminfo_vec[0] = forminfo; try { ed1.WriteMessage("开始更新\n"); Teamcenter.Services.Strong.Core._2007_01.DataManagement.CreateOrUpdateFormsResponse formResp = dmService.CreateOrUpdateForms(forminfo_vec); ModelObject[] respon = { formResp.ServiceData.GetUpdatedObject(0) }; dmService.RefreshObjects(respon); ed1.WriteMessage("更新完成\n"); break; } catch (ServiceException ex) { ed1.WriteMessage(ex.Message); } } ed1.WriteMessage("=======数据集=========\n"); //这里增加数据集名称的组成代码,包括type refname separator OriginReadXml originreadxml = new OriginReadXml(); OriginDataSet datasetinfo = originreadxml.OriginReadDataSetXML(xmlpath); datasetinfo = origintool.GetDataSetInfo(datasetinfo, btlinfo); ed1.WriteMessage("准备数据集数据完成\n"); bool findDateset = false; bool neworupdate = false; Teamcenter.Services.Strong.Core._2007_06.DataManagement.ExpandGRMRelationsPref myPref = new Teamcenter.Services.Strong.Core._2007_06.DataManagement.ExpandGRMRelationsPref(); Teamcenter.Services.Strong.Core._2007_06.DataManagement.RelationAndTypesFilter2 myFilter = new Teamcenter.Services.Strong.Core._2007_06.DataManagement.RelationAndTypesFilter2(); myFilter.RelationName = "IMAN_specification"; string[] typeVec = new string[1]; typeVec[0] = datasetinfo.Datatype; myFilter.ObjectTypeNames = typeVec; myPref.ExpItemRev = false; Teamcenter.Services.Strong.Core._2007_06.DataManagement.RelationAndTypesFilter2[] myFilterVec = { myFilter }; myPref.Info = myFilterVec; ModelObject[] primaryObjects = { itemRev }; Teamcenter.Services.Strong.Core._2007_06.DataManagement.ExpandGRMRelationsResponse myResp = dmService.ExpandGRMRelationsForPrimary(primaryObjects, myPref); if (myResp.Output.Length > 0) { for (int k = 0; k < myResp.Output.Length; k++) { Teamcenter.Services.Strong.Core._2007_06.DataManagement.ExpandGRMRelationsOutput grmOutput = myResp.Output[k]; for (int l = 0; l < grmOutput.OtherSideObjData.Length; l++) { ExpandGRMRelationsData otherSideData = grmOutput.OtherSideObjData[l]; if (otherSideData.OtherSideObjects.Length > 0) { for (int m = 0; m < otherSideData.OtherSideObjects.Length; m++) { Dataset tempDataset; //Teamcenter.Soa.Client.Model.ServiceData sData; tempDataset = otherSideData.OtherSideObjects[m] as Dataset; string ds_name = tempDataset.Object_string; if (ds_name == datasetinfo.Ds_name) { findDateset = true; dataset = otherSideData.OtherSideObjects[m] as Dataset; ed1.WriteMessage("找到数据集!\n"); break; } } //if (!findDateset) //{ // DialogResult updateornewdialog = MessageBox.Show("此Item已存在数据集,但名称", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question); // if (updateornewdialog == DialogResult.Yes) // { // } //} } } } } //新建或更新数据集 if (findDateset) { bool ischeckout = false; try { ModelObject[] objects2 = { dataset }; String[] attributes2 = { "is_modifiable", "checked_out", "checked_out_user" }; dmService.RefreshObjects(objects2); dmService.GetProperties(objects2, attributes2); if (!dataset.Is_modifiable) { MessageBox.Show("您打开的图纸状态为只读,将无法保存到到系统!"); return; } User checkuserinfo = dataset.Checked_out_user as User; if (checkuserinfo != null) { if (checkuserinfo.Uid != loginuser.Uid) { MessageBox.Show("该图纸已被其他用户签出,无法保存到系统!"); return; } } if (dataset.Checked_out == "Y") ischeckout = true; } catch (NotLoadedException ex) { ed1.WriteMessage(ex.Message); } Reservation res = ReservationService.getService(Session.getConnection()); //string comment = "", changeId = ""; //ModelObject[] ds_object = new ModelObject[1]; //ds_object[0] = dataset; ModelObject[] dsFileVec = null; //ed1.WriteMessage("=======22数据集22========="); try { ModelObject[] objects2 = { dataset }; String[] attributes2 = { "ref_list" }; dmService.RefreshObjects(objects2); dmService.GetProperties(objects2, attributes2); dsFileVec = dataset.Ref_list; } catch (NotLoadedException ex) { ed1.WriteMessage(ex.Message); } ImanFile dsfile = dsFileVec[0] as ImanFile; ModelObject[] objects3 = { dsfile }; String[] attributes3 = { "relative_directory_path", "original_file_name" }; dmService.RefreshObjects(objects3); dmService.GetProperties(objects3, attributes3); filename = dsfile.Original_file_name; //ed1.WriteMessage("=======33数据集33=========\n"); Teamcenter.Services.Loose.Core._2006_03.FileManagement.DatasetFileInfo[] fileInfos = new Teamcenter.Services.Loose.Core._2006_03.FileManagement.DatasetFileInfo[1]; Teamcenter.Services.Loose.Core._2006_03.FileManagement.DatasetFileInfo fileInfo = new Teamcenter.Services.Loose.Core._2006_03.FileManagement.DatasetFileInfo(); DocumentCollection inacdocmgr = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager; ed1.WriteMessage("当前文件:" + inacdocmgr.MdiActiveDocument.Name + "\n"); //inacdocmgr.MdiActiveDocument.Database.SaveAs(inacdocmgr.MdiActiveDocument.Name, DwgVersion.Current); //inacdocmgr.MdiActiveDocument.SendStringToExecute("QSAVE", true, false, true); //string tempdir = System.Environment.GetEnvironmentVariable("TEMP").ToString(); //string tempfilename = ""; //if (inacdocmgr.MdiActiveDocument.Name.IndexOf("temp") == 0) //{ // tempfilename = inacdocmgr.MdiActiveDocument.Name.Substring(23); //} //else //{ // tempfilename = inacdocmgr.MdiActiveDocument.Name; //} Document acdoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; acdoc.Database.SaveAs(acdoc.Name, true, DwgVersion.Current, acdoc.Database.SecurityParameters); string mdiactivefile = acdoc.Name; fileInfo.FileName = mdiactivefile; fileInfo.AllowReplace = true; fileInfo.IsText = false; fileInfo.NamedReferencedName = datasetinfo.Refname; fileInfos[0] = fileInfo; Teamcenter.Services.Loose.Core._2006_03.FileManagement.GetDatasetWriteTicketsInputData inputData = new Teamcenter.Services.Loose.Core._2006_03.FileManagement.GetDatasetWriteTicketsInputData(); inputData.Dataset = dataset; inputData.CreateNewVersion = false; inputData.DatasetFileInfos = fileInfos; //ed1.WriteMessage("=======44数据集44========="); Teamcenter.Services.Loose.Core._2006_03.FileManagement.GetDatasetWriteTicketsInputData[] inputs = new Teamcenter.Services.Loose.Core._2006_03.FileManagement.GetDatasetWriteTicketsInputData[1]; inputs[0] = inputData; FileManagementUtility fMSFileManagement = new FileManagementUtility(Session.getConnection()); ServiceData response = fMSFileManagement.PutFiles(inputs); if (response.sizeOfPartialErrors() > 0) ed1.WriteMessage("FileManagementService upload returned partial errors:" + response.sizeOfPartialErrors()); ModelObject[] datasets = new ModelObject[1]; datasets[0] = dataset; if (ischeckout) res.Checkin(datasets); dmService.RefreshObjects(datasets); //datasets[0] = inputs[0].Dataset; //dmService.DeleteObjects(datasets); //fMSFileManagement.Term(); ed1.WriteMessage("DateSet check in successful\n"); } else { Teamcenter.Services.Strong.Core._2006_03.DataManagement.DatasetProperties oneDatasetProp = new Teamcenter.Services.Strong.Core._2006_03.DataManagement.DatasetProperties(); Teamcenter.Services.Strong.Core._2006_03.DataManagement.DatasetProperties[] dataset_vec = new Teamcenter.Services.Strong.Core._2006_03.DataManagement.DatasetProperties[1]; oneDatasetProp.ClientId = "datasetWriteTixTestClientId"; oneDatasetProp.Type = datasetinfo.Datatype; oneDatasetProp.Name = datasetinfo.Ds_name; oneDatasetProp.Description = ""; oneDatasetProp.Container = null; dataset_vec[0] = oneDatasetProp; Teamcenter.Services.Strong.Core._2006_03.DataManagement.CreateDatasetsResponse dsResp = dmService.CreateDatasets(dataset_vec); Dataset createdataset = dsResp.Output[0].Dataset; //create relationship Teamcenter.Services.Strong.Core._2006_03.DataManagement.Relationship[] rela_vec = new Teamcenter.Services.Strong.Core._2006_03.DataManagement.Relationship[1]; Teamcenter.Services.Strong.Core._2006_03.DataManagement.Relationship one_rela = new Teamcenter.Services.Strong.Core._2006_03.DataManagement.Relationship(); one_rela.ClientId = ""; one_rela.PrimaryObject = itemRev; one_rela.SecondaryObject = createdataset; one_rela.RelationType = "IMAN_specification"; one_rela.UserData = null; rela_vec[0] = one_rela; Teamcenter.Services.Strong.Core._2006_03.DataManagement.CreateRelationsResponse reResp = dmService.CreateRelations(rela_vec); ed1.WriteMessage("数据集关系创建成功!\n"); Teamcenter.Services.Loose.Core._2006_03.FileManagement.DatasetFileInfo[] fileInfos = new Teamcenter.Services.Loose.Core._2006_03.FileManagement.DatasetFileInfo[1]; Teamcenter.Services.Loose.Core._2006_03.FileManagement.DatasetFileInfo fileInfo = new Teamcenter.Services.Loose.Core._2006_03.FileManagement.DatasetFileInfo(); DocumentCollection inacdocmgr = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager; //inacdocmgr.MdiActiveDocument.Database.SaveAs(inacdocmgr.MdiActiveDocument.Name, DwgVersion.Current); //inacdocmgr.MdiActiveDocument.SendStringToExecute("QSAVE", true, false, true); ed1.WriteMessage("当前文件:" + inacdocmgr.MdiActiveDocument.Name + "\n"); Document acdoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; acdoc.Database.SaveAs(acdoc.Name, true, DwgVersion.Current, acdoc.Database.SecurityParameters); string mdiactivefile = acdoc.Name; fileInfo.FileName = mdiactivefile; fileInfo.AllowReplace = true; fileInfo.IsText = false; fileInfo.NamedReferencedName = datasetinfo.Refname; fileInfos[0] = fileInfo; Teamcenter.Services.Loose.Core._2006_03.FileManagement.GetDatasetWriteTicketsInputData inputData = new Teamcenter.Services.Loose.Core._2006_03.FileManagement.GetDatasetWriteTicketsInputData(); inputData.Dataset = createdataset; inputData.CreateNewVersion = false; inputData.DatasetFileInfos = fileInfos; Teamcenter.Services.Loose.Core._2006_03.FileManagement.GetDatasetWriteTicketsInputData[] inputs = new Teamcenter.Services.Loose.Core._2006_03.FileManagement.GetDatasetWriteTicketsInputData[1]; inputs[0] = inputData; FileManagementUtility fMSFileManagement = new FileManagementUtility(Session.getConnection()); ServiceData response = fMSFileManagement.PutFiles(inputs); if (response.sizeOfPartialErrors() > 0) ed1.WriteMessage("FileManagementService upload returned partial errors:" + response.sizeOfPartialErrors()); ed1.WriteMessage("DateSet check in successful\n"); ModelObject[] datasets = new ModelObject[1]; datasets[0] = createdataset; dmService.RefreshObjects(datasets); dataset = createdataset; } //创建BOM if (mxllist.Count > 0) { DialogResult flushbomresult = MessageBox.Show("是否刷新BOM", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (flushbomresult == DialogResult.Yes) { Folder aimFolder = null; WorkspaceObject[] object_vec = new WorkspaceObject[1]; object_vec[0] = item; Teamcenter.Services.Strong.Core._2007_01.DataManagement.WhereReferencedResponse refResp = dmService.WhereReferenced(object_vec, 1); Teamcenter.Services.Strong.Core._2007_01.DataManagement.WhereReferencedOutput[] refOutput = refResp.Output; for (int u = 0; u < refOutput.Length; u++) { Teamcenter.Services.Strong.Core._2007_01.DataManagement.WhereReferencedInfo[] info = refOutput[u].Info; for (int p = 0; p < info.Length; p++) { Teamcenter.Services.Strong.Core._2007_01.DataManagement.WhereReferencedInfo it_info = info[p]; string type = it_info.Referencer.Object_type; if (type.Contains("Folder")) { aimFolder = it_info.Referencer as Folder; ed1.WriteMessage("找到目标文件夹\n"); break; } } } if (aimFolder == null) CreateBomStructure(itemRev, dataset, mxllist, null); else CreateBomStructure(itemRev, dataset, mxllist, aimFolder); } } }//for } } } else { this.savefrom = new SaveToTC(); this.savefrom.appdoc = appodc; this.savefrom.user = loginuser; this.savefrom.btlinfo = btlinfo; this.savefrom.bomlist = mxllist; this.savefrom.xmlpath = xmlpath; this.savefrom.button1.Click += new EventHandler(savebutton1_Click); this.savefrom.Activate(); this.savefrom.Show(); } } } } /************************************************************************ * 2012-7-3 新需求 * add by raywei * function used by savetotc * 新逻辑: * 更新ITEM时创建数据集,数据集来源是系统中对应类型模板item下的数据集内容 * 1、获得首选项 文件类型=模板ID 分割字符串 * 2、获得标题栏item类型,获得对应模板ID,根据此ID找到系统ITEM * 3、根据找到的Item获得数据集 * 4、下载数据集文件 * 5、更新ITEM * 6、创建新的数据集 * 7、命名引用 ************************************************************************/ public void updateItemDataSet( Editor ed1, BTLClass btlinfo, ItemRevision itemrevision, DataManagementService dmService, string rev_id) { //读取的首选项 Tool tool = new Tool(); Hashtable pre = tool.getTCPreferences("DFHM_dstype"); string[] prevalues = (string[])pre["DFHM_dstype"]; if (prevalues.Length <= 0) { ed1.WriteMessage("首选项DFHM_dstype配置有误\n"); } for (int i = 0; i < prevalues.Length; i++) { ed1.WriteMessage(prevalues[i].ToString() + "\n"); } //检查是否存在WORD类型数据集 ed1.WriteMessage("检查Item是否含有WORD类型数据集\n"); bool hasWordDS = checkHasWord(itemrevision, dmService); if (hasWordDS) { ed1.WriteMessage("Item已经含有WORD类型数据集\n"); } else { ed1.WriteMessage("Item不含有WORD类型数据集\n"); //获取对应模板对象ID ed1.WriteMessage("正在分析类型对应模板ID\n"); string DMTitemid = tool.getCorrespondItemID(tool.initItemType(btlinfo.Item_id, btlinfo.Materialgrade).Trim(), prevalues); string DMTFilepath = ""; if (DMTitemid != null && DMTitemid != "") { SavedQueryResults found = tool.getSearchItem(DMTitemid); //找到模板item ed1.WriteMessage("找到模板对象\n"); if (found.NumOfObjects > 0 && found != null) { Item DMTItem = found.Objects[0] as Item; DMTFilepath = downloadfile(DMTItem); ed1.WriteMessage("模板文件下载完成,路径" + DMTFilepath + "\n"); } } //增加数据集,文件来自模板 if (DMTFilepath != "") { bool uploadresult = uploadfile(DMTFilepath, btlinfo.Item_id + "/" + rev_id, itemrevision); if (uploadresult) ed1.WriteMessage("创建相应的数据集模版成功\n"); } } } //检查是否存在MSWORD类型数据集 public bool checkHasWord(ItemRevision itemrevision,DataManagementService dmService) { bool hasWordDS = false; Teamcenter.Services.Strong.Core._2007_06.DataManagement.ExpandGRMRelationsPref myPref = new Teamcenter.Services.Strong.Core._2007_06.DataManagement.ExpandGRMRelationsPref(); Teamcenter.Services.Strong.Core._2007_06.DataManagement.RelationAndTypesFilter2 myFilter = new Teamcenter.Services.Strong.Core._2007_06.DataManagement.RelationAndTypesFilter2(); myFilter.RelationName = "IMAN_specification"; string[] typeVec = new string[1]; typeVec[0] = "MSWord"; myFilter.ObjectTypeNames = typeVec; myPref.ExpItemRev = false; Teamcenter.Services.Strong.Core._2007_06.DataManagement.RelationAndTypesFilter2[] myFilterVec = { myFilter }; myPref.Info = myFilterVec; ModelObject[] primaryObjects = { itemrevision }; Teamcenter.Services.Strong.Core._2007_06.DataManagement.ExpandGRMRelationsResponse myResp = dmService.ExpandGRMRelationsForPrimary(primaryObjects, 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 == "MSWord") { hasWordDS = true; } } } } return hasWordDS; } /************************************************************************ * 2012-2-13 * add by raywei * function used by savebutton1_Click * 新逻辑: * 增加新建ITEM时创建数据集,数据集来源是系统中对应类型模板item下的数据集内容 * 1、获得首选项 文件类型=模板ID 分割字符串 * 2、获得标题栏item类型,获得对应模板ID,根据此ID找到系统ITEM * 3、根据找到的Item获得数据集 * 4、下载数据集文件 * 5、创建新的ITEM * 6、创建新的数据集 * 7、命名引用 ************************************************************************/ /************************************************************************ * 2012-2-13 * add by raywei * 获得服务器端数据集文件并下载到本地,返回文件的路径 ************************************************************************/ public string downloadfile(Item DMTItem) { string DMTFilepath = ""; DataManagementService dmService = DataManagementService.getService(Session.getConnection()); Editor ed1 = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor; ModelObject[] itemrevisionlist = null; ModelObject[] objects = { DMTItem }; String[] attributes = { "revision_list" }; dmService.RefreshObjects(objects); dmService.GetProperties(objects, attributes); itemrevisionlist = DMTItem.Revision_list; ItemRevision itemrevision = itemrevisionlist[itemrevisionlist.Length-1] as ItemRevision; ExpandGRMRelationsPref myPref = new ExpandGRMRelationsPref(); RelationAndTypesFilter2 myFilter = new RelationAndTypesFilter2(); myFilter.RelationName = "IMAN_specification"; String[] typeVec = { "MSWord" }; 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 == "MSWord") { DataSet dateset = otherSideData.OtherSideObjects[k] as DataSet; ModelObject[] objects2 = { dateset }; String[] attributes2 = { "is_modifiable", "checked_out", "ref_list" }; dmService.RefreshObjects(objects2); dmService.GetProperties(objects2, attributes2); ModelObject[] dsfilevec = dateset.Ref_list; ImanFile dsfile = dsfilevec[0] as ImanFile; ModelObject[] objects3 = { dsfile }; String[] attributes3 = { "relative_directory_path", "original_file_name" }; dmService.RefreshObjects(objects3); dmService.GetProperties(objects3, attributes3); string newfilename = dsfile.Original_file_name; ed1.WriteMessage("Original_file_name : " + newfilename + "\n"); string tempdir = System.Environment.GetEnvironmentVariable("TEMP").ToString(); ed1.WriteMessage("TEMP:" + tempdir.ToString() + "\n"); Teamcenter.Soa.Client.FileManagementUtility fmu = new Teamcenter.Soa.Client.FileManagementUtility(Teamcenter.ClientX.Session.getConnection()); Teamcenter.Soa.Client.GetFileResponse getFileResponse = fmu.GetFiles(dsfilevec); FileInfo[] fileinfovec = getFileResponse.GetFiles(); FileInfo file = fileinfovec[0]; DMTFilepath = tempdir + "\\" + newfilename; ed1.WriteMessage("拷贝路径:" + DMTFilepath + "\n"); System.IO.File.Copy(file.FullName, DMTFilepath, true); System.IO.File.SetAttributes(DMTFilepath, FileAttributes.Normal); } } } } return DMTFilepath; } //新建数据集,上传文件 public bool uploadfile(string DMTFilepath, string ds_name, ItemRevision rev) { bool result = false; DataManagementService dmService = DataManagementService.getService(Session.getConnection()); Editor ed1 = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor; Teamcenter.Services.Strong.Core._2006_03.DataManagement.DatasetProperties oneDatasetProp = new Teamcenter.Services.Strong.Core._2006_03.DataManagement.DatasetProperties(); Teamcenter.Services.Strong.Core._2006_03.DataManagement.DatasetProperties[] dataset_vec = new Teamcenter.Services.Strong.Core._2006_03.DataManagement.DatasetProperties[1]; oneDatasetProp.ClientId = "datasetWriteTixTestClientId"; oneDatasetProp.Type = "MSWord"; oneDatasetProp.Name = ds_name; ed1.WriteMessage("ds_name===="+ds_name+"\n"); oneDatasetProp.Description = ""; oneDatasetProp.Container = null; dataset_vec[0] = oneDatasetProp; Teamcenter.Services.Strong.Core._2006_03.DataManagement.CreateDatasetsResponse dsResp = dmService.CreateDatasets(dataset_vec); Dataset createdataset = dsResp.Output[0].Dataset; //create relationship Teamcenter.Services.Strong.Core._2006_03.DataManagement.Relationship[] rela_vec = new Teamcenter.Services.Strong.Core._2006_03.DataManagement.Relationship[1]; Teamcenter.Services.Strong.Core._2006_03.DataManagement.Relationship one_rela = new Teamcenter.Services.Strong.Core._2006_03.DataManagement.Relationship(); one_rela.ClientId = "AppX-myTest"; one_rela.PrimaryObject = rev; one_rela.SecondaryObject = createdataset; one_rela.RelationType = "IMAN_specification"; one_rela.UserData = null; rela_vec[0] = one_rela; Teamcenter.Services.Strong.Core._2006_03.DataManagement.CreateRelationsResponse reResp = dmService.CreateRelations(rela_vec); ed1.WriteMessage("数据集关系创建成功!\n"); Teamcenter.Services.Loose.Core._2006_03.FileManagement.DatasetFileInfo[] fileInfos = new Teamcenter.Services.Loose.Core._2006_03.FileManagement.DatasetFileInfo[1]; Teamcenter.Services.Loose.Core._2006_03.FileManagement.DatasetFileInfo fileInfo = new Teamcenter.Services.Loose.Core._2006_03.FileManagement.DatasetFileInfo(); fileInfo.FileName = DMTFilepath; ed1.WriteMessage("fileInfo.FileName===" + fileInfo.FileName+"\n"); fileInfo.AllowReplace = true; fileInfo.IsText = false; fileInfo.NamedReferencedName = "word"; fileInfos[0] = fileInfo; Teamcenter.Services.Loose.Core._2006_03.FileManagement.GetDatasetWriteTicketsInputData inputData = new Teamcenter.Services.Loose.Core._2006_03.FileManagement.GetDatasetWriteTicketsInputData(); inputData.Dataset = createdataset; inputData.CreateNewVersion = false; inputData.DatasetFileInfos = fileInfos; Teamcenter.Services.Loose.Core._2006_03.FileManagement.GetDatasetWriteTicketsInputData[] inputs = new Teamcenter.Services.Loose.Core._2006_03.FileManagement.GetDatasetWriteTicketsInputData[1]; inputs[0] = inputData; FileManagementUtility fMSFileManagement = new FileManagementUtility(Session.getConnection()); ServiceData response = fMSFileManagement.PutFiles(inputs); if (response.sizeOfPartialErrors() > 0) ed1.WriteMessage("FileManagementService upload returned partial errors:" + response.sizeOfPartialErrors()); if (response.sizeOfPartialErrors() <= 0) { ed1.WriteMessage("DateSet check in successful\n"); result = true; } ModelObject[] datasets = new ModelObject[1]; datasets[0] = createdataset; dmService.RefreshObjects(datasets); return result; } /************************************************************************ * savetotc窗口保存按键触发事件 ************************************************************************/ public void savebutton1_Click(object sender, EventArgs e) { DataManagementService dmService = DataManagementService.getService(Session.getConnection()); Reservation res = ReservationService.getService(Session.getConnection()); Editor ed1 = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor; ed1.WriteMessage("==============\n"); OriginTool origintool = new OriginTool(); OriginBTL btlinfo = this.savefrom.btlinfo; List bomlist = this.savefrom.bomlist; ed1.WriteMessage("标题栏ITEM:" + btlinfo.Btldatatable[origintool.getKeyFromValue(btlinfo.Btltctable, "item_id")].ToString()); ed1.WriteMessage("明细栏个数:"+bomlist.Count+"\n"); TreeNode nownode = this.savefrom.treeView1.SelectedNode; if(nownode.SelectedImageIndex == 1) { foreach (ALLOBJECT perobject in this.savefrom.folderlist) { if (perobject.treenode.Equals(nownode)) { ed1.WriteMessage("找到指定文件夹\n"); Folder folder = perobject.workobject as Folder; ModelObject[] objects = { folder }; String[] attributes = { "is_modifiable"}; dmService.RefreshObjects(objects); dmService.GetProperties(objects, attributes); if (!folder.Is_modifiable) { MessageBox.Show("您对目录没有写权限,请重新选择"); return; } ItemProperties oneItemProp = new ItemProperties(); CreateItemsResponse itemResp = new CreateItemsResponse(); Teamcenter.Hello.DataManagement hellomanagement = new Teamcenter.Hello.DataManagement(); string itemtype = this.savefrom.comboBox1.Text; ItemIdsAndInitialRevisionIds[] itemIds = hellomanagement.generateItemIds(1, itemtype); GetItemCreationRelatedInfoResponse relatedResponse = dmService.GetItemCreationRelatedInfo(itemtype, null); string[] formTypes = new string[relatedResponse.FormAttrs.Length]; for (int j = 0; j < relatedResponse.FormAttrs.Length; j++) { FormAttributesInfo attrInfo = relatedResponse.FormAttrs[j]; formTypes[j] = attrInfo.FormType; } ItemProperties[] itemProps = new ItemProperties[itemIds.Length]; ItemProperties itemProperty = new ItemProperties(); for (int j = 0; j < itemIds.Length; j++) { ed1.WriteMessage("start Create form in cache!\n"); ModelObject[] forms = hellomanagement.createForms(itemIds[j].NewItemId, formTypes[0], itemIds[j].NewRevId, formTypes[1], null, false); ed1.WriteMessage("Create form in cache sucessful!\n"); ed1.WriteMessage("set item properties!\n"); itemProperty.ClientId = "AppX-Test"; itemProperty.ItemId = btlinfo.Btldatatable[origintool.getKeyFromValue(btlinfo.Btltctable, "item_id")].ToString(); if (btlinfo.Btltctable.ContainsValue("item_revision_id")) itemProperty.RevId = btlinfo.Btldatatable[origintool.getKeyFromValue(btlinfo.Btltctable, "item_revision_id")].ToString(); else itemProperty.RevId = itemIds[j].NewRevId; if (btlinfo.Btltctable.ContainsValue("object_name")) itemProperty.Name = btlinfo.Btldatatable[origintool.getKeyFromValue(btlinfo.Btltctable, "object_name")].ToString(); else itemProperty.Name = ""; itemProperty.Type = itemtype; itemProperty.Description = ""; itemProperty.Uom = "EA"; itemProps[j] = itemProperty; } try { ed1.WriteMessage("start item create!\n"); itemResp = dmService.CreateItems(itemProps, folder, ""); ed1.WriteMessage("create Items: " + btlinfo.Btldatatable[origintool.getKeyFromValue(btlinfo.Btltctable, "item_id")].ToString() + "sucessful!\n"); ItemRevision rev = null; Item newitem = null; for (int j = 0; j < itemResp.Output.Length; j++) { rev = itemResp.Output[j].ItemRev; newitem = itemResp.Output[j].Item; } //增加对Item属性的更新 if (btlinfo.Btltypetable.ContainsValue("Item")) { ed1.WriteMessage("正在更新Item属性\n"); Hashtable itemattrs = new Hashtable(); ModelObject[] newitemOBJ = new ModelObject[1]; newitemOBJ[0] = newitem; foreach (DictionaryEntry de in btlinfo.Btltypetable) { if (de.Value.ToString() == "Item" && btlinfo.Btlwritetable[de.Key].ToString() == "1" && btlinfo.Btlupdatetable[de.Key].ToString() == "1") { string cadstring = de.Key.ToString(); string cadvalue = btlinfo.Btldatatable[cadstring].ToString(); string tcstring = btlinfo.Btltctable[cadstring].ToString(); itemattrs.Add(tcstring, cadvalue); } } if (itemattrs.Count > 0) { ServiceData itemupdateresponse = dmService.SetDisplayProperties(newitemOBJ, itemattrs); if (itemupdateresponse.sizeOfPartialErrors() <= 0) { ed1.WriteMessage("更新Item属性成功\n"); } } } //增加对版本属性的更新 if (btlinfo.Btltypetable.ContainsValue("ItemRevision")) { ed1.WriteMessage("正在更新ItemRevision属性\n"); Hashtable itemRevattrs = new Hashtable(); ModelObject[] newitemRev = new ModelObject[1]; newitemRev[0] = rev; foreach (DictionaryEntry de in btlinfo.Btltypetable) { if (de.Value.ToString() == "ItemRevision" && btlinfo.Btlwritetable[de.Key].ToString() == "1" && btlinfo.Btlupdatetable[de.Key].ToString() == "1") { string cadstring = de.Key.ToString(); string cadvalue = btlinfo.Btldatatable[cadstring].ToString(); string tcstring = btlinfo.Btltctable[cadstring].ToString(); itemRevattrs.Add(tcstring, cadvalue); } } if (itemRevattrs.Count > 0) { ServiceData itemupdateresponse = dmService.SetDisplayProperties(newitemRev, itemRevattrs); if (itemupdateresponse.sizeOfPartialErrors() <= 0) { ed1.WriteMessage("更新ItemRevision属性成功\n"); } } } //写form属性 FormInfo forminfo = new FormInfo(); FormInfo[] forminfo_vec; ModelObject[] form_vec = null; ModelObject[] objects1 = { rev }; String[] attributes1 = { "IMAN_master_form_rev", "is_modifiable","item_revision_id","item_id"}; dmService.RefreshObjects(objects1); dmService.GetProperties(objects1, attributes1); try { form_vec = rev.IMAN_master_form_rev; ed1.WriteMessage("get_IMAN_master_form_rev sucessful!\n"); } catch (NotLoadedException ex) { ed1.WriteMessage(ex.Message); } forminfo_vec = new FormInfo[form_vec.Length]; for (int j = 0; j < form_vec.Length; j++) { Form form = form_vec[j] as Form; Hashtable formAttrs = new Hashtable(); //如果配置了Form属性,则执行如下代码 if (btlinfo.Btltypetable.ContainsValue("Form")) { foreach (DictionaryEntry de in btlinfo.Btltypetable) { if (de.Value.ToString() == "Form" && btlinfo.Btlwritetable[de.Key].ToString() == "1" && btlinfo.Btlupdatetable[de.Key].ToString() == "1") { string cadstring = de.Key.ToString(); string cadvalue = btlinfo.Btldatatable[cadstring].ToString(); string tcstring = btlinfo.Btltctable[cadstring].ToString(); string writestring = btlinfo.Btlwritetable[cadstring].ToString(); string[] formAttrValue = new string[1]; formAttrValue[0] = ""; formAttrValue[0] = cadvalue; formAttrs.Add(tcstring, formAttrValue); } } } forminfo.AttributesMap = formAttrs; forminfo.ClientId = "1"; forminfo.Description = ""; forminfo.FormObject = form; forminfo.Name = rev.Item_id + "/" + rev.Item_revision_id; forminfo.ParentObject = null; forminfo.RelationName = "IMAN_master_form"; forminfo.SaveDB = true; forminfo.FormType = "ItemRevision Master"; forminfo_vec[j] = forminfo; try { CreateOrUpdateFormsResponse formResp = dmService.CreateOrUpdateForms(forminfo_vec); ed1.WriteMessage("update form attributes sucessful!\n"); } catch (ServiceException ex) { ed1.WriteMessage(ex.Message); } } //string ds_name; string rev_id = rev.Item_revision_id; //这里增加数据集名称的组成代码,包括type refname separator OriginReadXml originreadxml = new OriginReadXml(); OriginDataSet datasetinfo = originreadxml.OriginReadDataSetXML(xmlpath); datasetinfo = origintool.GetDataSetInfo(datasetinfo, btlinfo); ed1.WriteMessage("准备数据集数据完成\n"); Teamcenter.Services.Strong.Core._2006_03.DataManagement.DatasetProperties oneDatasetProp = new Teamcenter.Services.Strong.Core._2006_03.DataManagement.DatasetProperties(); Teamcenter.Services.Strong.Core._2006_03.DataManagement.DatasetProperties[] dataset_vec = new Teamcenter.Services.Strong.Core._2006_03.DataManagement.DatasetProperties[1]; oneDatasetProp.ClientId = "datasetWriteTixTestClientId"; oneDatasetProp.Type = datasetinfo.Datatype; oneDatasetProp.Name = datasetinfo.Ds_name; oneDatasetProp.Description = ""; oneDatasetProp.Container = null; dataset_vec[0] = oneDatasetProp; ed1.WriteMessage("准备创建数据集\n"); Teamcenter.Services.Strong.Core._2006_03.DataManagement.CreateDatasetsResponse dsResp = dmService.CreateDatasets(dataset_vec); if (dsResp.Output.Length == 0) { ed1.WriteMessage("创建数据集失败,请检查数据集.xml文件的配置信息"); return; } Dataset createdataset = dsResp.Output[0].Dataset; ed1.WriteMessage("创建数据集完成\n"); //create relationship Teamcenter.Services.Strong.Core._2006_03.DataManagement.Relationship[] rela_vec = new Teamcenter.Services.Strong.Core._2006_03.DataManagement.Relationship[1]; Teamcenter.Services.Strong.Core._2006_03.DataManagement.Relationship one_rela = new Teamcenter.Services.Strong.Core._2006_03.DataManagement.Relationship(); one_rela.ClientId = ""; one_rela.PrimaryObject = rev; one_rela.SecondaryObject = createdataset; one_rela.RelationType = "IMAN_specification"; one_rela.UserData = null; rela_vec[0] = one_rela; Teamcenter.Services.Strong.Core._2006_03.DataManagement.CreateRelationsResponse reResp = dmService.CreateRelations(rela_vec); ed1.WriteMessage("数据集关系创建成功!\n"); Teamcenter.Services.Loose.Core._2006_03.FileManagement.DatasetFileInfo[] fileInfos = new Teamcenter.Services.Loose.Core._2006_03.FileManagement.DatasetFileInfo[1]; Teamcenter.Services.Loose.Core._2006_03.FileManagement.DatasetFileInfo fileInfo = new Teamcenter.Services.Loose.Core._2006_03.FileManagement.DatasetFileInfo(); DocumentCollection inacdocmgr = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager; ed1.WriteMessage("当前文件:" + inacdocmgr.MdiActiveDocument.Name + "\n"); Document acdoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; acdoc.Database.SaveAs(acdoc.Name, true, DwgVersion.Current, acdoc.Database.SecurityParameters); string mdiactivefile = acdoc.Name; fileInfo.FileName = mdiactivefile; fileInfo.AllowReplace = true; fileInfo.IsText = false; fileInfo.NamedReferencedName = datasetinfo.Refname; fileInfos[0] = fileInfo; Teamcenter.Services.Loose.Core._2006_03.FileManagement.GetDatasetWriteTicketsInputData inputData = new Teamcenter.Services.Loose.Core._2006_03.FileManagement.GetDatasetWriteTicketsInputData(); inputData.Dataset = createdataset; inputData.CreateNewVersion = false; inputData.DatasetFileInfos = fileInfos; Teamcenter.Services.Loose.Core._2006_03.FileManagement.GetDatasetWriteTicketsInputData[] inputs = new Teamcenter.Services.Loose.Core._2006_03.FileManagement.GetDatasetWriteTicketsInputData[1]; inputs[0] = inputData; FileManagementUtility fMSFileManagement = new FileManagementUtility(Session.getConnection()); ServiceData response = fMSFileManagement.PutFiles(inputs); if (response.sizeOfPartialErrors() > 0) ed1.WriteMessage("FileManagementService upload returned partial errors:" + response.sizeOfPartialErrors()); ed1.WriteMessage("DateSet check in successful\n"); ModelObject[] datasets = new ModelObject[1]; datasets[0] = createdataset; dmService.RefreshObjects(datasets); //这里是刷新bom if(bomlist.Count > 0) { DialogResult updateresult = MessageBox.Show("是否刷新BOM", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (updateresult == DialogResult.No || updateresult == DialogResult.None) { ed1.WriteMessage("放弃刷新BOM\n"); } else { CreateBomStructure(rev, createdataset, bomlist, folder); } } this.savefrom.Hide(); this.savefrom.Dispose(); } catch (ServiceException ex) { ed1.WriteMessage(ex.Message); } } } } else { MessageBox.Show("请选择真实的文件夹!"); return; } } [CommandMethod("LOGOUT")] public void layout() { DialogResult updateresult = MessageBox.Show("请确保您已经将文件保存!以免造成数据丢失!是否保存?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (updateresult == DialogResult.Yes) { savetotc(); } else { loginuser = null; hadlogin = false; } } [CommandMethod("UPDATE_FROM_TC")] public void updateFromTc() { if (loginuser != null) { hadlogin = true; } else login(); if (hadlogin) { DataManagementService dmService = DataManagementService.getService(Session.getConnection()); Editor ed1 = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor; OriginTool origintool = new OriginTool(); ed1.WriteMessage("\n开始获取标题栏信息...\n"); /************************************************************************/ /* 以下是取数据的代码 */ /************************************************************************/ ArrayList btllist = new ArrayList(); OriginReadXml readxml = new OriginReadXml(); btllist = readxml.OriginReadBTLXML(xmlpath); for (int i = 0; i < btllist.Count; i++) { OriginBTL onebtlinfo = (OriginBTL)btllist[i]; ed1.WriteMessage("标题栏块参照名称:" + onebtlinfo.Btlname + "\n"); ed1.WriteMessage("标题栏详细信息:" + "\n"); foreach (DictionaryEntry de in onebtlinfo.Btldatatable) { ed1.WriteMessage("CAD属性名:" + de.Key + "\tCAD属性值:" + de.Value + "\tTC属性名:" + onebtlinfo.Btltctable[de.Key] + "\tTC系统类型:" + onebtlinfo.Btltypetable[de.Key] + "\t可写:" + onebtlinfo.Btlwritetable[de.Key] + "\t可同步:"+onebtlinfo.Btlfromtctable[de.Key] +"\n"); } } for (int btli = 0; btli < btllist.Count; btli++) { OriginBTL btlinfo = (OriginBTL)btllist[btli]; //获得item_id所对应的cad图纸信息 object key = origintool.getKeyFromValue(btlinfo.Btltctable, "item_id"); if (key == null) { ed1.WriteMessage("系统没有找到item_id所对应的图纸信息,系统中断\n"); return; } SavedQueryResults found = origintool.getSearchItem(btlinfo.Btldatatable[key].ToString()); if (found != null && found.NumOfObjects > 0) { DialogResult upresult = MessageBox.Show("找到对应标题栏Item,是否同步?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (upresult == DialogResult.No || upresult == DialogResult.None) { ed1.WriteMessage("放弃同步\n"); return; } if (upresult == DialogResult.Yes) { for (int i = 0; i < found.NumOfObjects; i++) { Item item = found.Objects[i] as Item; ModelObject[] objects = { item }; String[] attributes = { "item_id", "object_name", "object_string" }; dmService.RefreshObjects(objects); dmService.GetProperties(objects, attributes); string item_id = item.Item_id; GetItemFromIdInfo tempitem = new GetItemFromIdInfo(); tempitem.ItemId = item_id; GetItemFromIdInfo[] infos = new GetItemFromIdInfo[1]; infos[0] = tempitem; GetItemFromIdPref pref = new GetItemFromIdPref(); //这里可能要换成新的方式 GetItemFromIdResponse infoResp = dmService.GetItemFromId(infos, 1, pref); //准备写到CAD图纸上的信息 Hashtable tempvaluetable = new Hashtable(); //获取Item上的属性 if (btlinfo.Btltypetable.ContainsValue("Item")) { ed1.WriteMessage("正在同步Item属性\n"); foreach (DictionaryEntry de in btlinfo.Btltypetable) { if (de.Value.ToString() == "Item" && btlinfo.Btlfromtctable[de.Key].ToString() == "1") { string cadstring = de.Key.ToString(); string cadvalue = btlinfo.Btldatatable[cadstring].ToString(); string tcstring = btlinfo.Btltctable[cadstring].ToString(); ed1.WriteMessage("取属性" + tcstring + "\n"); string[] props = new string[1]; props[0] = tcstring; ServiceData serviceData = dmService.GetProperties(objects, props); if (serviceData.sizeOfPartialErrors() > 0) { continue; } Property my_prop = item.GetProperty(tcstring); string tempcadvalue = my_prop.StringValue.ToString(); ed1.WriteMessage("TC系统中的属性" + tcstring + "值为 :" + tempcadvalue + "\n"); if (cadvalue != tempcadvalue) { origintool.TableHasKey(tempvaluetable, cadstring, tempcadvalue); } } } } //获得版本上的属性 for (int j = 0; j < infoResp.Output.Length; j++) { ModelObject[] objects1 = { infoResp.Output[j].Item }; String[] attributes1 = { "revision_list", "is_modifiable" }; dmService.RefreshObjects(objects1); dmService.GetProperties(objects1, attributes1); ModelObject[] revlist = infoResp.Output[j].Item.Revision_list; dmService.RefreshObjects(revlist); ItemRevision itemRev = null; string rev_id = ""; for (int k = 0; k < revlist.Length; k++) { itemRev = revlist[k] as ItemRevision; } if (itemRev == null) { ed1.WriteMessage("Item没有对应版本\n"); return; } ModelObject[] objects2 = { itemRev }; String[] attributes2 = { "item_revision_id", "is_modifiable" , "checked_out","item_id","release_status_list", "IMAN_master_form_rev"}; dmService.RefreshObjects(objects2); dmService.GetProperties(objects2, attributes2); rev_id = itemRev.Item_revision_id; ReleaseStatus[] releaselist = itemRev.Release_status_list; if (!itemRev.Is_modifiable) { MessageBox.Show("ItemRevision为只读,您没有保存权限!"); return; } if (releaselist.Length > 0) { string message = "Item ID为" + itemRev.Item_id + "的最新版本已发布!"; MessageBox.Show(message); return; } if (btlinfo.Btltypetable.ContainsValue("ItemRevision")) { ed1.WriteMessage("正在同步ItemRevision属性\n"); foreach (DictionaryEntry de in btlinfo.Btltypetable) { if (de.Value.ToString() == "ItemRevision" && btlinfo.Btlfromtctable[de.Key].ToString() == "1") { string cadstring = de.Key.ToString(); string cadvalue = btlinfo.Btldatatable[cadstring].ToString(); string tcstring = btlinfo.Btltctable[cadstring].ToString(); ed1.WriteMessage("取属性" + tcstring + "\n"); string[] props = new string[1]; props[0] = tcstring; ServiceData serviceData = dmService.GetProperties(objects2, props); if (serviceData.sizeOfPartialErrors() > 0) { continue; } Property my_prop = itemRev.GetProperty(tcstring); string tempcadvalue = my_prop.StringValue.ToString(); ed1.WriteMessage("TC系统中的属性" + tcstring + "值为 :" + tempcadvalue+"\n"); if (cadvalue != tempcadvalue) { origintool.TableHasKey(tempvaluetable, cadstring, tempcadvalue); } } } } //获得版本表单上的属性 FormInfo forminfo = new FormInfo(); FormInfo[] forminfo_vec = new FormInfo[1]; ModelObject[] form_vec; form_vec = itemRev.IMAN_master_form_rev; dmService.RefreshObjects(form_vec); for (int k = 0; k < form_vec.Length; k++) { Form form = form_vec[k] as Form; if (btlinfo.Btltypetable.ContainsValue("Form")) { ed1.WriteMessage("正在同步ItemRevision主表单属性\n"); foreach (DictionaryEntry de in btlinfo.Btltypetable) { if (de.Value.ToString() == "Form" && btlinfo.Btlfromtctable[de.Key].ToString() == "1") { string cadstring = de.Key.ToString(); string cadvalue = btlinfo.Btldatatable[cadstring].ToString(); string tcstring = btlinfo.Btltctable[cadstring].ToString(); ed1.WriteMessage("取属性" + tcstring + "\n"); string[] props = new string[1]; props[0] = tcstring; ServiceData serviceData = dmService.GetProperties(form_vec, props); if (serviceData.sizeOfPartialErrors() > 0) { continue; } Property my_prop = form.GetProperty(tcstring); string tempcadvalue = my_prop.StringValue.ToString(); ed1.WriteMessage("TC系统中的属性" + tcstring + "值为 :" + tempcadvalue + "\n"); if (cadvalue != tempcadvalue) { origintool.TableHasKey(tempvaluetable, cadstring, tempcadvalue); } } } } } } //这里已经将需要同步的数据收集完毕 foreach (DictionaryEntry de in tempvaluetable) { ed1.WriteMessage("CAD属性:"+de.Key.ToString()+"\t值:"+de.Value.ToString() +"\n"); } //将数据写入CAD图纸 origintool.SetTitleInfo(btlinfo.Btlname, tempvaluetable); } } } } } } public bool CreateBomStructure(ItemRevision parentRev, Dataset parent_ds, List bom_Vec, Folder folder) { DataManagementService dmService = DataManagementService.getService(Session.getConnection()); Reservation res = ReservationService.getService(Session.getConnection()); Editor ed1 = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor; ed1.WriteMessage("bom_Vec size:" + bom_Vec.Count.ToString() + "\n"); //获得类型规则 OriginReadXml originreadxml = new OriginReadXml(); OriginTypeRule origintyperule = originreadxml.OriginReadRuleXML(xmlpath); ItemRevision[] revVec = new ItemRevision[bom_Vec.Count]; ed1.WriteMessage("revVec size:" + revVec.Length.ToString() + "\n"); for (int i = 0; i < bom_Vec.Count; i++) { OriginMXL it_bom = bom_Vec[i]; OriginTool origintool = new OriginTool(); if (origintool.getKeyFromValue(it_bom.Mxltctable, "item_id") == null) { ed1.WriteMessage("明细栏中没有配置item_id\n"); return false; } string item_id = it_bom.Mxldatatable[origintool.getKeyFromValue(it_bom.Mxltctable,"item_id")].ToString(); SavedQueryResults found = origintool.getSearchItem(item_id); if (found.NumOfObjects == 0) { //ItemProperties[] item_vec; //DatasetProperties[] dataset_vec; ItemProperties oneItemProp = new ItemProperties(); CreateItemsResponse itemResp = new CreateItemsResponse(); Teamcenter.Hello.DataManagement hellomanagement = new Teamcenter.Hello.DataManagement(); //获得Item类型 string tempitemtype = origintool.getItemType(it_bom, origintyperule); ItemIdsAndInitialRevisionIds[] itemIds = hellomanagement.generateItemIds(1, tempitemtype); GetItemCreationRelatedInfoResponse relatedResponse = dmService.GetItemCreationRelatedInfo(tempitemtype, null); string[] formTypes = new string[relatedResponse.FormAttrs.Length]; for (int j = 0; j < relatedResponse.FormAttrs.Length; j++) { FormAttributesInfo attrInfo = relatedResponse.FormAttrs[j]; formTypes[j] = attrInfo.FormType; } ItemProperties[] itemProps = new ItemProperties[itemIds.Length]; ItemProperties itemProperty = new ItemProperties(); for (int j = 0; j < itemIds.Length; j++) { ed1.WriteMessage("start Create form in cache!\n"); ModelObject[] forms = hellomanagement.createForms(itemIds[j].NewItemId, formTypes[0], itemIds[j].NewRevId, formTypes[1],null,false); ed1.WriteMessage("Create form in cache sucessful!\n"); ed1.WriteMessage("set item properties!\n"); itemProperty.ClientId = ""; itemProperty.ItemId = item_id; itemProperty.RevId = itemIds[j].NewRevId; if (it_bom.Mxltctable.ContainsValue("object_name")) itemProperty.Name = it_bom.Mxldatatable[origintool.getKeyFromValue(it_bom.Mxltctable, "object_name")].ToString(); else itemProperty.Name = ""; itemProperty.Type = tempitemtype; itemProperty.Description = ""; itemProperty.Uom = "EA"; itemProps[j] = itemProperty; } try { ed1.WriteMessage("start item create!\n"); if (folder == null) itemResp = dmService.CreateItems(itemProps, null, ""); else itemResp = dmService.CreateItems(itemProps, folder, ""); ed1.WriteMessage("create Items: " + item_id + "sucessful!\n"); ItemRevision rev = null; Item newitem = null; for (int j = 0; j < itemResp.Output.Length;j++ ) { rev = itemResp.Output[j].ItemRev; newitem = itemResp.Output[j].Item; } revVec[i] = rev; //写form属性 FormInfo forminfo = new FormInfo(); FormInfo[] forminfo_vec; ModelObject[] form_vec = null; ModelObject[] objects = { rev }; String[] attributes = { "IMAN_master_form_rev", "is_modifiable","item_revision_id"}; dmService.RefreshObjects(objects); dmService.GetProperties(objects, attributes); if (rev.Is_modifiable) { try { form_vec = rev.IMAN_master_form_rev; ed1.WriteMessage("get_IMAN_master_form_rev sucessful!\n"); } catch (NotLoadedException ex) { ed1.WriteMessage(ex.Message); } forminfo_vec = new FormInfo[form_vec.Length]; for (int j = 0; j < form_vec.Length; j++) { Form form = form_vec[j] as Form; Hashtable formAttrs = new Hashtable(); //如果配置了Form属性,则执行如下代码 if (it_bom.Mxltypetable.ContainsValue("Form")) { foreach (DictionaryEntry de in it_bom.Mxltypetable) { if (de.Value.ToString() == "Form" && it_bom.Mxlisbomtable[de.Key].ToString() == "0" && it_bom.Mxlupdatetable[de.Key].ToString() == "1") { string cadstring = de.Key.ToString(); string cadvalue = it_bom.Mxldatatable[cadstring].ToString(); string tcstring = it_bom.Mxltctable[cadstring].ToString(); string[] formAttrValue = new string[1]; formAttrValue[0] = ""; formAttrValue[0] = cadvalue; formAttrs.Add(tcstring, formAttrValue); } } } forminfo.AttributesMap = formAttrs; forminfo.ClientId = "1"; forminfo.Description = ""; forminfo.FormObject = form; forminfo.Name = item_id + "/" +rev.Item_revision_id; forminfo.ParentObject = null; forminfo.RelationName = "IMAN_master_form"; forminfo.SaveDB = true; forminfo.FormType = "ItemRevision Master"; forminfo_vec[j] = forminfo; try { CreateOrUpdateFormsResponse formResp =dmService.CreateOrUpdateForms(forminfo_vec); ed1.WriteMessage("update form attributes sucessful!\n"); } catch (ServiceException ex) { ed1.WriteMessage(ex.Message); } } } /*if (it_bom.Memo == "共图") { if (parent_ds != null) { ExpandGRMRelationsPref myPref = new ExpandGRMRelationsPref(); RelationAndTypesFilter2 myFilter = new RelationAndTypesFilter2(); myFilter.RelationName = "IMAN_reference"; string[] typeVec = new string[1]; typeVec[0] = "D5DWG"; myFilter.ObjectTypeNames = typeVec; myPref.ExpItemRev = false; RelationAndTypesFilter2[] myFilterVec = { myFilter }; myPref.Info = myFilterVec; ModelObject[] primaryObjects = { rev }; Teamcenter.Services.Strong.Core._2007_06.DataManagement.ExpandGRMRelationsResponse myResp = dmService.ExpandGRMRelationsForPrimary(primaryObjects, myPref); if (myResp.Output.Length > 0) { for (int k = 0; k < myResp.Output.Length; k++) { Teamcenter.Services.Strong.Core._2007_06.DataManagement.ExpandGRMRelationsOutput grmOutput = myResp.Output[k]; for (int l = 0; l < grmOutput.OtherSideObjData.Length; l++) { ExpandGRMRelationsData otherSideData = grmOutput.OtherSideObjData[l]; if (otherSideData.OtherSideObjects.Length == 0) { Relationship[] rela_vec = new Relationship[1]; Relationship one_rela = new Relationship(); one_rela.ClientId = ""; one_rela.PrimaryObject = rev; one_rela.SecondaryObject = parent_ds; one_rela.RelationType = "IMAN_reference"; one_rela.UserData = null; rela_vec[0] = one_rela; CreateRelationsResponse reResp = dmService.CreateRelations(rela_vec); ed1.WriteMessage("create IMAN_reference sucessful!\n"); } } } } } }*/ } catch (ServiceException ex) { ed1.WriteMessage(ex.Message); } } else//found { ItemRevision itemRev = null; for (int j = 0; j < found.NumOfObjects; j++) { GetItemFromIdInfo[] infos = new GetItemFromIdInfo[1]; GetItemFromIdInfo oneItem = new GetItemFromIdInfo(); oneItem.ItemId = item_id; infos[0] = oneItem; GetItemFromIdPref pref = new GetItemFromIdPref(); GetItemFromIdResponse infoResp = dmService.GetItemFromId(infos, 1, pref); for (int n = 0; n < infoResp.Output.Length; n++) { ModelObject[] objects = { infoResp.Output[n].Item }; String[] attributes = { "revision_list", "object_name","item_revision"}; dmService.RefreshObjects(objects); dmService.GetProperties(objects, attributes); ModelObject[] revList = infoResp.Output[n].Item.Revision_list; dmService.RefreshObjects(revList); for (int l = 0; l < revList.Length; l++) { itemRev = revList[l] as ItemRevision; } } } revVec[i] = itemRev; //写form属性 FormInfo forminfo = new FormInfo(); FormInfo[] forminfo_vec = new FormInfo[1]; ModelObject[] form_vec; ModelObject[] objects1 = {itemRev }; String[] attributes1 = { "IMAN_master_form_rev", "is_modifiable","item_revision_id", "date_released","item_id", "release_status_list"}; dmService.RefreshObjects(objects1); dmService.GetProperties(objects1, attributes1); ReleaseStatus[] releaselist = itemRev.Release_status_list; if (releaselist.Length > 0) { MessageBox.Show("Item ID为" + itemRev.Item_id + "的最新版本已发布!"); continue; } if (!itemRev.Is_modifiable) { MessageBox.Show("当前用户对Item ID为" + itemRev.Item_id + "无权修改或该Item最新版本已发布"); continue; } else if (itemRev.Is_modifiable) { ed1.WriteMessage("is_modifiable!\n"); form_vec = itemRev.IMAN_master_form_rev; ed1.WriteMessage("get_IMAN_master_form_rev sucessful!\n"); for (int j = 0; j < form_vec.Length; j++) { Form form = form_vec[j] as Form; bool frash = false; string[] props = new string[1]; string revId = itemRev.Object_string; Hashtable formAttrs = new Hashtable(); //如果配置了Form属性,则执行如下代码 if (it_bom.Mxltypetable.ContainsValue("Form")) { foreach (DictionaryEntry de in it_bom.Mxltypetable) { if (de.Value.ToString() == "Form" && it_bom.Mxlisbomtable[de.Key].ToString() == "0" && it_bom.Mxlupdatetable[de.Key].ToString() == "1") { string cadstring = de.Key.ToString(); string cadvalue = it_bom.Mxldatatable[cadstring].ToString(); string tcstring = it_bom.Mxltctable[cadstring].ToString(); ed1.WriteMessage("取属性" + tcstring + "\n"); props[0] = tcstring; ServiceData serviceData = dmService.GetProperties(form_vec, props); if (serviceData.sizeOfPartialErrors() > 0) { continue; } Property my_prop = form_vec[j].GetProperty(tcstring); if (cadvalue != my_prop.StringValue) { if (my_prop.StringValue == "") frash = true; else { string message = "当前明细栏图纸:" + cadstring + "属性值" + cadvalue + "与系统内:" + tcstring + "属性值" + my_prop.StringValue + "不一致,是否覆盖系统内属性?"; DialogResult updateresult = MessageBox.Show(message, "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (updateresult == DialogResult.Yes) { frash = true; } } string[] formAttrValue = new string[1]; formAttrValue[0] = ""; if (frash) formAttrValue[0] = cadvalue; else formAttrValue[0] = my_prop.StringValue; ed1.WriteMessage(tcstring + ":" + formAttrValue[0] + "\n"); formAttrs.Add(tcstring, formAttrValue); props[0] = ""; } } } } forminfo.AttributesMap = formAttrs; forminfo.ClientId = ""; forminfo.Description = ""; forminfo.FormObject = form; forminfo.Name = item_id + "/" + itemRev.Item_revision_id; forminfo.ParentObject = null; forminfo.RelationName = "IMAN_master_form"; forminfo.SaveDB = true; forminfo.FormType = "ItemRevision Master"; forminfo_vec[0] = forminfo; try { CreateOrUpdateFormsResponse formResp = dmService.CreateOrUpdateForms(forminfo_vec); } catch (SoaException ex) { ed1.WriteMessage(ex.Message); } } } ////if (it_bom.Memo == "共图") ////{ //// if (parent_ds != null) //// { //// ExpandGRMRelationsPref myPref = new ExpandGRMRelationsPref(); //// RelationAndTypesFilter2 myFilter = new RelationAndTypesFilter2(); //// myFilter.RelationName = "IMAN_reference"; //// string[] typeVec = new string[1]; //// typeVec[0] = "D5DWG"; //// myFilter.ObjectTypeNames = typeVec; //// myPref.ExpItemRev = false; //// RelationAndTypesFilter2[] myFilterVec = { myFilter }; //// myPref.Info = myFilterVec; //// ModelObject[] primaryObjects = { itemRev }; //// Teamcenter.Services.Strong.Core._2007_06.DataManagement.ExpandGRMRelationsResponse //// myResp = dmService.ExpandGRMRelationsForPrimary(primaryObjects, myPref); //// if (myResp.Output.Length > 0) //// { //// for (int k = 0; k < myResp.Output.Length; k++) //// { //// Teamcenter.Services.Strong.Core._2007_06.DataManagement.ExpandGRMRelationsOutput //// grmOutput = myResp.Output[k]; //// for (int l = 0; l < grmOutput.OtherSideObjData.Length; l++) //// { //// ExpandGRMRelationsData otherSideData = grmOutput.OtherSideObjData[l]; //// if (otherSideData.OtherSideObjects.Length == 0) //// { //// Relationship[] rela_vec = new Relationship[1]; //// Relationship one_rela = new Relationship(); //// one_rela.ClientId = ""; //// one_rela.PrimaryObject = itemRev; //// one_rela.SecondaryObject = parent_ds; //// one_rela.RelationType = "IMAN_reference"; //// one_rela.UserData = null; //// rela_vec[0] = one_rela; //// CreateRelationsResponse reResp = //// dmService.CreateRelations(rela_vec); //// ed1.WriteMessage("create IMAN_reference sucessful!\n"); //// } //// } //// } //// } //// } ////} } }//for //创建BOM Teamcenter.Services.Strong.Cad.StructureManagementService ssService = Teamcenter.Services.Strong.Cad.StructureManagementService.getService(Session.getConnection()); Teamcenter.Services.Strong.Cad._2007_12.StructureManagement.CreateOrUpdateRelativeStructureInfo2 structInfo = new Teamcenter.Services.Strong.Cad._2007_12.StructureManagement.CreateOrUpdateRelativeStructureInfo2(); Teamcenter.Services.Strong.Cad._2007_12.StructureManagement.CreateOrUpdateRelativeStructureInfo2[] structInfoVec = new Teamcenter.Services.Strong.Cad._2007_12.StructureManagement.CreateOrUpdateRelativeStructureInfo2[1]; //Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo // childInfo = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo(); Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo[] childInfoVec; //Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelOccInfo // occInfo = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelOccInfo(); //Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.AttributesInfo // attrsInfo = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.AttributesInfo(); Teamcenter.Services.Strong.Cad._2007_12.StructureManagement.CreateOrUpdateRelativeStructurePref2 sPref = new Teamcenter.Services.Strong.Cad._2007_12.StructureManagement.CreateOrUpdateRelativeStructurePref2(); //ItemRevision childRev; ed1.WriteMessage("开始准备pse属性列\n"); childInfoVec = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo[revVec.Length]; ed1.WriteMessage("childInfoVec size:"+childInfoVec.Length+"\n"); Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.AttributesInfo[] attrsToSet = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.AttributesInfo[4]; for (int i = 0; i < revVec.Length; i++) { OriginMXL bomv = bom_Vec[i]; OriginTool origintool = new OriginTool(); string item_id = bomv.Mxldatatable[origintool.getKeyFromValue(bomv.Mxltctable, "item_id")].ToString(); ed1.WriteMessage("处理" + item_id + "...\n"); int updatenum = 0; if (bomv.Mxltypetable.ContainsValue("bomline")) { foreach (DictionaryEntry de in bomv.Mxltypetable) { if (de.Value.ToString() == "bomline" && bomv.Mxlisbomtable[de.Key].ToString() == "1" && bomv.Mxlupdatetable[de.Key].ToString() =="1") { updatenum = updatenum + 1; } } } Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo childInfo = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo(); Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelOccInfo occInfo = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelOccInfo(); attrsToSet = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.AttributesInfo[updatenum]; if (bomv.Mxltypetable.ContainsValue("bomline")) { int stepnum = 0; foreach (DictionaryEntry de in bomv.Mxltypetable) { if (de.Value.ToString() == "bomline" && bomv.Mxlisbomtable[de.Key].ToString() == "1" && bomv.Mxlupdatetable[de.Key].ToString() == "1") { string cadstring = de.Key.ToString(); string cadvalue = bomv.Mxldatatable[cadstring].ToString(); string tcstring = bomv.Mxltctable[cadstring].ToString(); Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.AttributesInfo attrsInfo = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.AttributesInfo(); attrsInfo.Name = tcstring; attrsInfo.Value = cadvalue; attrsToSet[stepnum] = attrsInfo; stepnum = stepnum + 1; } } } occInfo.AttrsToSet = attrsToSet; childInfo.Child = revVec[i]; childInfo.OccInfo = occInfo; childInfoVec[i] = childInfo; } for (int j = 0; j < childInfoVec.Length; j++) { for(int k=0;k 0) { ed1.WriteMessage("checkout bom returned a partial error."); return false; } } } catch (ServiceException ex) { ed1.WriteMessage(ex.Message); } ed1.WriteMessage("开始创建Bom\n"); try { Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.CreateOrUpdateRelativeStructureResponse cursResp = ssService.CreateOrUpdateRelativeStructure(structInfoVec, "view", true, sPref); ed1.WriteMessage("Bom创建成功\n"); } catch (System.Exception ex) { ed1.WriteMessage(ex.Message); return false; } if (bvr != null) { ModelObject[] checkIn_vec = new ModelObject[1]; checkIn_vec[0] = bvr; try { res.Checkin(checkIn_vec); ed1.WriteMessage("Bomview 签入成功!\n"); } catch (ServiceException ex) { ed1.WriteMessage(ex.Message); } } return true; } private void loginbuttonclick(object Sender,EventArgs e) { login(); } private void openbuttonclick(object Sender, EventArgs e) { openformtc(); } private void savebuttonclick(object Sender, EventArgs e) { savetotc(); } private void logoutbuttonclick(object Sender, EventArgs e) { layout(); } //private void addComtextMenu() //{ // ContextMenuExtension m_contextmenu = new ContextMenuExtension(); // m_contextmenu.Title = "MyTeamCenter"; // Autodesk.AutoCAD.Windows.MenuItem mi = new Autodesk.AutoCAD.Windows.MenuItem("登录"); // Autodesk.AutoCAD.Windows.MenuItem mi1 = new Autodesk.AutoCAD.Windows.MenuItem("打开"); // Autodesk.AutoCAD.Windows.MenuItem mi2 = new Autodesk.AutoCAD.Windows.MenuItem("保存"); // Autodesk.AutoCAD.Windows.MenuItem mi3 = new Autodesk.AutoCAD.Windows.MenuItem("退出"); // mi.Click += new EventHandler (loginbuttonclick); // mi1.Click += new EventHandler(openbuttonclick); // mi2.Click += new EventHandler(savebuttonclick); // mi3.Click += new EventHandler(logoutbuttonclick); // m_contextmenu.MenuItems.Add(mi); // m_contextmenu.MenuItems.Add(mi1); // m_contextmenu.MenuItems.Add(mi2); // m_contextmenu.MenuItems.Add(mi3); // Autodesk.AutoCAD.ApplicationServices.Application.AddDefaultContextMenuExtension(m_contextmenu); //} ////退出时触发 //public void acdocmgr_DocumentToBeDestroyed(object sender, DocumentCollectionEventArgs e) //{ // DialogResult updateresult = MessageBox.Show("请确保您已经将文件保存!以免造成数据丢失!是否保存?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question); // if (updateresult == DialogResult.Yes) // { // savetotc(); // } // else // { // loginuser = null; // hadlogin = false; // } //} } }