using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using KPlan.Util; using Teamcenter.Schemas.Soa._2006_03.Exceptions; using Teamcenter.Services.Strong.Core; using Teamcenter.Services.Strong.Core._2007_01.DataManagement; using Teamcenter.Soa.Client.Model; using Teamcenter.Soa.Client.Model.Strong; namespace KPlan.RefActions { class TCTool { public static ArrayList BomTitleName = new ArrayList(); public static ArrayList BomPropertyKey = new ArrayList(); public static ArrayList P_ARTICLE_TYPENRs = new ArrayList(); public static ArrayList P_ARTICLE_ERPNRs = new ArrayList(); public static string lineCount = ""; public static string deleteXML = "TRUE"; static public string ZW1Name = "EPLAN数据包"; static public string PDFName = "PDF图纸"; public static Dictionary customBomPropConfig = new Dictionary(); public static void ReadConfigs() { BomTitleName.Clear(); BomPropertyKey.Clear(); P_ARTICLE_TYPENRs.Clear(); P_ARTICLE_ERPNRs.Clear(); customBomPropConfig.Clear(); string bomConfig = KUtil.GetConfigValue(KConfigure.CHECK_SECTION, KConfigure.SAVE_BOM_PROP); //KUtil.Log(bomConfig); string[] bomConfigSplit = bomConfig.Split(';'); foreach(string c in bomConfigSplit) { string[] ss = c.Split('='); if (ss.Length == 2) { // KUtil.Log(ss[0]+" = "+ss[1]); string tc = ss[0].Trim(); string eplan = ss[1].Trim(); if (!KUtil.IsEmpty(tc) && !KUtil.IsEmpty(eplan)) { if (customBomPropConfig.ContainsKey(eplan)) { KUtil.Log("重复配置:"+tc+"="+eplan); } else { customBomPropConfig.Add(eplan, tc); } } } } string config = KUtil.GetConfigValue(KConfigure.REF_SECTION, KConfigure.REF_BOM_TITILE); string[] split = config.Split(';'); foreach (string c in split) { string[] ss = c.Split('='); if (ss.Length == 2) { BomTitleName.Add(ss[0].Trim()); BomPropertyKey.Add(ss[1].Trim()); } } string erpcode = KUtil.GetConfigValue(KConfigure.REF_SECTION, KConfigure.REF_ERPCODE); string[] erpcodeSplit = erpcode.Split(';'); foreach (string c in erpcodeSplit) { string[] ss = c.Split('='); if (ss.Length == 2) { if (ss[0].Trim().StartsWith("P_ARTICLE_TYPENR")) { P_ARTICLE_TYPENRs.Add(ss[1].Trim()); } else { P_ARTICLE_ERPNRs.Add(ss[1].Trim()); } } } lineCount = KUtil.GetConfigValue(KConfigure.REF_SECTION, KConfigure.REF_LINECOUNT); deleteXML = KUtil.GetConfigValue(KConfigure.REF_SECTION, KConfigure.REF_DELETEXML); } public static string getCNString(string descString) { string target_descr = ""; if (descString.Contains("@") && descString.Contains(";")) { string[] arrStr = descString.Split(';'); int arrLen = arrStr.Length; for (int cnt = 0; cnt < arrLen; cnt++) { if (arrStr[cnt].StartsWith("zh_CN") || arrStr[cnt].StartsWith("??")) { target_descr = arrStr[cnt].Split('@')[1]; break; } } } else { target_descr = descString; } return target_descr; } public static short checkZipDatasetCheckout(Dataset dataset) { try { ModelObject[] objects2 = { dataset }; String[] attributes2 = { "is_modifiable", "checked_out", "checked_out_user" }; //TcTool.dmService.RefreshObjects(objects2); TCUtil.dmService.GetProperties(objects2, attributes2); //2019.05.14下载TC数据至EPLAN 不用检查 Teamcenter.Soa.Client.Model.Strong.User checkUserInfo = dataset.Checked_out_user as Teamcenter.Soa.Client.Model.Strong.User; if (checkUserInfo != null) { if (checkUserInfo.Uid != TCUtil.user.Uid) { MessageBox.Show("数据集由其他用户签出,无法保存数据集!", "提示"); return 2; } } } catch (Teamcenter.Soa.Exceptions.NotLoadedException ex) { MessageBox.Show("错误:\r\n" + ex.Message, "提示"); return 11; } return 0; } public static ItemRevision getLastItemRev(String item_id) { GetItemFromIdInfo OneInfo = new GetItemFromIdInfo(); GetItemFromIdInfo[] Infos = new GetItemFromIdInfo[1]; GetItemFromIdPref Pref = new GetItemFromIdPref(); OneInfo.ItemId = item_id; Infos[0] = OneInfo; GetItemFromIdResponse InfoResp = TCUtil.dmService.GetItemFromId(Infos, 1, Pref); // 1,个数,是最新版本 // MessageBox.Show(item_id + "-------------" + InfoResp.Output.Length, "提示"); if (InfoResp.Output.Length > 0) { if (InfoResp.Output[0].ItemRevOutput.Length > 0) { ItemRevision itemRev = InfoResp.Output[0].ItemRevOutput[0].ItemRevision; ModelObject[] modelobject = { itemRev }; //MessageBox.Show(item_id + "-------------" + itemRev.Uid, "提示"); //dmService.RefreshObjects(modelobject); //MessageBox.Show("RefreshObjects", "提示"); String[] attributes = { "item_id", "object_name", "item_revision_id", "creation_date", "owning_user" }; TCUtil.dmService.GetProperties(modelobject, attributes); //MessageBox.Show("item_revision_id----------" + itemRev.Item_revision_id, "提示"); //return InfoResp.Output[0].ItemRevOutput[0].ItemRevision; return itemRev; } } return null; } public static short CreateOrUpdateBom(ItemRevision parentItemRevision, List childItem_id, List childItem_num, Dictionary> custPropMap) { //Console.WriteLine("CreateOrUpdateBom------------------"+1); int childCount = childItem_id.Count; //Console.WriteLine("CreateOrUpdateBom------------------"+2); ReservationService res = ReservationService.getService(Teamcenter.ClientX.Session.getConnection()); //Console.WriteLine("CreateOrUpdateBom------------------"+3); Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo[] children_infos = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo[childCount]; //Console.WriteLine("CreateOrUpdateBom------------------"+4); for (int i = 0; i < childCount; i++) { // Console.WriteLine("CreateOrUpdateBom------------------"+5); // Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.AttributesInfo[] attr_infos = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.AttributesInfo[2]; Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.AttributesInfo[] attr_infos = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.AttributesInfo[1+custPropMap.Count]; //Console.WriteLine("CreateOrUpdateBom------------------"+6); attr_infos[0] = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.AttributesInfo(); attr_infos[0].Name = "bl_quantity"; attr_infos[0].Value = childItem_num[i]; //Console.WriteLine("CreateOrUpdateBom------------------"+7); int index = 1; foreach(string key in custPropMap.Keys) { //KUtil.Log(key+":"+custPropMap[key].Count); string val = custPropMap[key][i]; //KUtil.Log((i+1)+". 添加BOM同步信息:" + key+" = "+val); attr_infos[index] = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.AttributesInfo(); attr_infos[index].Name = key; attr_infos[index].Value =val; index++; } /*attr_infos[1] = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.AttributesInfo(); //attr_infos[1].Name = "YSR8_InstallP_bom";//安川项目 attr_infos[1].Name = "SF6_InstallP_bom";//毛思达 // attr_infos[1].Name = "SF2_InstallP_bom";//仇俊永 attr_infos[1].Value = childItem_installpos[i]; attr_infos[2] = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.AttributesInfo(); attr_infos[2].Name = "SF6_Manufacturer";//毛思达 attr_infos[2].Value = childItem_manufacturer[i];*/ //Console.WriteLine("CreateOrUpdateBom------------------"+8); Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelOccInfo occ_info = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelOccInfo(); occ_info.AttrsToSet = attr_infos; //Console.WriteLine("CreateOrUpdateBom------------------"+9); ItemRevision itemrev = getLastItemRev(childItem_id[i]); //Console.WriteLine("CreateOrUpdateBom------------------"+10); if (itemrev == null) { MessageBox.Show("获取版本对象失败!\r\n" + childItem_id[i], "提示"); return 1; } //Console.WriteLine("CreateOrUpdateBom------------------"+11); Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo children_info = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo(); children_info.Child = itemrev; children_info.OccInfo = occ_info; children_infos[i] = children_info; } Teamcenter.Services.Strong.Cad._2007_12.StructureManagement.CreateOrUpdateRelativeStructureInfo2[] struct_infos = new Teamcenter.Services.Strong.Cad._2007_12.StructureManagement.CreateOrUpdateRelativeStructureInfo2[1]; Teamcenter.Services.Strong.Cad._2007_12.StructureManagement.CreateOrUpdateRelativeStructureInfo2 struct_info = new Teamcenter.Services.Strong.Cad._2007_12.StructureManagement.CreateOrUpdateRelativeStructureInfo2(); struct_info.ChildInfo = children_infos; struct_info.Parent = parentItemRevision; struct_info.Precise = false; struct_infos[0] = struct_info; ModelObject[] objpirs = { parentItemRevision }; String[] attris = { "structure_revisions" }; //dmService.RefreshObjects(objpirs); ServiceData s_data = TCUtil.dmService.GetProperties(objpirs, attris); //Console.WriteLine("CreateOrUpdateBom------------------"+12); Teamcenter.Soa.Client.Model.Strong.PSBOMViewRevision ps_rev = null; try { for (int j = 0; j < parentItemRevision.Structure_revisions.Length; j++) { ps_rev = parentItemRevision.Structure_revisions[j]; ModelObject[] objs2 = { ps_rev }; String[] attris2 = { "is_modifiable", "object_string", "checked_out" }; //dmService.RefreshObjects(objs2); TCUtil.dmService.GetProperties(objs2, attris2); if (!ps_rev.Is_modifiable) { MessageBox.Show("当前用户无权修改BOM!", "提示"); return 11; } if (ps_rev.Checked_out == "Y") { MessageBox.Show("BOM已经签出,请确认签入后再执行本操作!", "提示"); return 12; } string bvr_name = ps_rev.Object_string; // Console.WriteLine("bvr_name------------------" + bvr_name); ModelObject[] objbvrs = new ModelObject[1]; objbvrs[0] = ps_rev; s_data = res.Checkout(objbvrs, "", ""); if (s_data.sizeOfPartialErrors() > 0) { MessageBox.Show("签出BOM失败,请重新执行操作!", "提示"); return 13; } } } catch (ServiceException ex) { MessageBox.Show(ex.Message); return 14; } Console.WriteLine("CreateOrUpdateBom------------------" + 13); Teamcenter.Services.Strong.Cad.StructureManagementService ss_service = Teamcenter.Services.Strong.Cad.StructureManagementService.getService(Teamcenter.ClientX.Session.getConnection()); Teamcenter.Services.Strong.Cad._2007_12.StructureManagement.CreateOrUpdateRelativeStructurePref2 struct_pref = new Teamcenter.Services.Strong.Cad._2007_12.StructureManagement.CreateOrUpdateRelativeStructurePref2(); try { Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.CreateOrUpdateRelativeStructureResponse cursResp = ss_service.CreateOrUpdateRelativeStructure(struct_infos, "view", true, struct_pref); // ss_service.DeleteRelativeStructure if (cursResp.Output.Count == 0) { // MessageBox.Show("Bom删除成功\n"); //}else{ MessageBox.Show("Bom创建失败!", "提示"); } } catch (System.Exception ex) { MessageBox.Show(ex.Message); return 21; } finally { if (ps_rev != null) { ModelObject[] checkIn_vec = new ModelObject[1]; checkIn_vec[0] = ps_rev; try { res.Checkin(checkIn_vec); } catch (ServiceException ex) { MessageBox.Show(ex.Message); } } } return 0; } public static Dataset getDataset(ItemRevision itemRevision, string dsType, string dsName) { GetItemFromIdPref pref = new GetItemFromIdPref(); 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] = dsType; 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 = TCUtil.dmService.ExpandGRMRelationsForPrimary(primaryObjects, myPref); 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++) { Teamcenter.Services.Strong.Core._2007_06.DataManagement.ExpandGRMRelationsData otherSideData = grmOutput.OtherSideObjData[l]; if (otherSideData.OtherSideObjects.Length > 0) { for (int m = 0; m < otherSideData.OtherSideObjects.Length; m++) { //Teamcenter.Soa.Client.Model.ServiceData sData; Dataset dataset = otherSideData.OtherSideObjects[m] as Dataset; string ds_name = dataset.Object_string; if (ds_name == dsName) { return dataset; } } } } } return null; } public static short checkDatasetCheckout(Dataset dataset) { try { ModelObject[] objects2 = { dataset }; String[] attributes2 = { "is_modifiable", "checked_out", "checked_out_user" }; //TcTool.dmService.RefreshObjects(objects2); TCUtil.dmService.GetProperties(objects2, attributes2); if (!dataset.Is_modifiable) { MessageBox.Show("数据集为只读格式,无法保存数据集!", "提示"); return 1; } Teamcenter.Soa.Client.Model.Strong.User checkUserInfo = dataset.Checked_out_user as Teamcenter.Soa.Client.Model.Strong.User; if (checkUserInfo != null) { if (checkUserInfo.Uid != TCUtil.user.Uid) { MessageBox.Show("数据集由其他用户签出,无法保存数据集!", "提示"); return 2; } } } catch (Teamcenter.Soa.Exceptions.NotLoadedException ex) { MessageBox.Show("错误:\r\n" + ex.Message, "提示"); return 11; } return 0; } public static Dataset createDataset(ItemRevision itemRevision, string type, string name) { // MessageBox.Show("数组越界--------------1", "提示"); Teamcenter.Services.Strong.Core._2008_06.DataManagement.DatasetProperties2[] data_tts = new Teamcenter.Services.Strong.Core._2008_06.DataManagement.DatasetProperties2[1]; // MessageBox.Show("数组越界--------------2", "提示"); Teamcenter.Services.Strong.Core._2008_06.DataManagement.DatasetProperties2 one_data_tt = new Teamcenter.Services.Strong.Core._2008_06.DataManagement.DatasetProperties2(); //MessageBox.Show("数组越界--------------3", "提示"); one_data_tt.ClientId = "esappCreateDatasetClientID"; //MessageBox.Show("数组越界--------------4", "提示"); one_data_tt.Type = type; one_data_tt.Name = name; one_data_tt.Description = name; one_data_tt.Container = null; // MessageBox.Show("数组越界--------------5", "提示"); data_tts[0] = one_data_tt; //MessageBox.Show("数组越界--------------6", "提示"); Teamcenter.Services.Strong.Core._2006_03.DataManagement.CreateDatasetsResponse dsResp = TCUtil.dmService.CreateDatasets2(data_tts); //MessageBox.Show("数组越界--------------7", "提示"); TCUtil.ThrowServiceDataError(dsResp.ServiceData); Dataset createdataset = dsResp.Output[0].Dataset; //MessageBox.Show("数组越界--------------8", "提示"); if (createdataset == null) { MessageBox.Show("创建数据集失败!", "提示"); return null; } //MessageBox.Show("数组越界--------------9", "提示"); string clientid = dsResp.Output[0].ClientId; //MessageBox.Show("数组越界--------------10", "提示"); Teamcenter.Services.Strong.Core._2006_03.DataManagement.Relationship[] rela_vec = new Teamcenter.Services.Strong.Core._2006_03.DataManagement.Relationship[1]; // MessageBox.Show("数组越界--------------11", "提示"); Teamcenter.Services.Strong.Core._2006_03.DataManagement.Relationship one_rela = new Teamcenter.Services.Strong.Core._2006_03.DataManagement.Relationship(); //MessageBox.Show("数组越界--------------12", "提示"); one_rela.ClientId = ""; one_rela.PrimaryObject = itemRevision; 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 = TCUtil.dmService.CreateRelations(rela_vec); TCUtil.ThrowServiceDataError(reResp.ServiceData); if (reResp.Output.Length == 0) { MessageBox.Show("创建数据集关系失败,可能的原因是没有所选电气子项目的权限!", "提示"); return null; } return createdataset; } public static int checkItem(string item_id) { GetItemFromIdInfo OneInfo = new GetItemFromIdInfo(); GetItemFromIdInfo[] Infos = new GetItemFromIdInfo[1]; GetItemFromIdPref Pref = new GetItemFromIdPref(); OneInfo.ItemId = item_id; Infos[0] = OneInfo; GetItemFromIdResponse InfoResp = TCUtil.dmService.GetItemFromId(Infos, 1, Pref); // 1,个数,是最新版本 return InfoResp.Output.Length; } } }