using System.Text; using Kingdee.CDP.WebApi.SDK; using MES.Service.Dto.webApi.PLM; namespace MES.Service.service.PLM; public class PLMManager { public List RetrieveDrawings(string ItemNo) { var baseObjects = GetPlmCfgBase(ItemNo); var relatedObjects = GetPlmCfgRelatedObject(baseObjects[0].FID); // 检查返回结果是否为空 if (relatedObjects == null || !relatedObjects.Any()) throw new NotImplementedException("返回结果为空"); var stdDocuments = GetPlmStdDocument(relatedObjects); return stdDocuments; } #region 1.通过物料编码(需要唯一)获取物料id public List GetPlmCfgBase(string ItemNo) { //注意 1:此处不再使用参数形式传入用户名及密码等敏感信息,改为在登录配置文件中设置。 //注意 2:必须先配置第三方系统登录授权信息后,再进行业务操作,详情参考各语言版本SDK介绍中的登录配置文件说明。 //读取配置,初始化SDK var client = new K3CloudApi(); //用于记录结果 var Info = new StringBuilder(); //业务对象标识 //string formId = "PLM_STD_DOCUMENT"; var formId = "PLM_CFG_BASE"; var dt = DateTime.Now; //查询字段集合,即返回哪些数据,不能为空,根据不同业务单据填写不同的字段名,以下仅为示例 //string fieldKeys = "FCode,FFileId,FRelevantObject"; //string FilterString = "FID='-2146304'"; var fieldKeys = "FID,FCode,FName"; var FilterString = string.Format(@"FCode='{0}'", ItemNo); var OrderString = ""; var TopRowCount = 0; var StartRow = 0; var Limit = 0; var param = new QueryParam { FormId = formId, FieldKeys = fieldKeys, FilterString = FilterString, OrderString = OrderString, TopRowCount = TopRowCount, StartRow = StartRow, Limit = Limit }; //调用接口 var result = client.ExecuteBillQuery(param.ToJson()); return result.Select(s => { var entity = new BaseObject { FID = (long)s[0], FCode = (string)s[1], FName = (string)s[2] }; return entity; }).ToList(); } #endregion #region 2.通过物料id获取相关对象【下载需要的文档】的id public List GetPlmCfgRelatedObject(long? FRelatedObject) { //注意 1:此处不再使用参数形式传入用户名及密码等敏感信息,改为在登录配置文件中设置。 //注意 2:必须先配置第三方系统登录授权信息后,再进行业务操作,详情参考各语言版本SDK介绍中的登录配置文件说明。 //读取配置,初始化SDK var client = new K3CloudApi(); //用于记录结果 var Info = new StringBuilder(); //业务对象标识 //string formId = "PLM_STD_DOCUMENT"; var formId = "PLM_CFG_RELATEDOBJECT"; var dt = DateTime.Now; //查询字段集合,即返回哪些数据,不能为空,根据不同业务单据填写不同的字段名,以下仅为示例 //string fieldKeys = "FCode,FFileId,FRelevantObject"; //string FilterString = "FID='-2146304'"; var fieldKeys = "FID,FRE_FCode,FRelatedObject"; var FilterString = string.Format(@"FRelatedObject='{0}'", FRelatedObject); var OrderString = ""; var TopRowCount = 0; var StartRow = 0; var Limit = 0; var param = new QueryParam { FormId = formId, FieldKeys = fieldKeys, FilterString = FilterString, OrderString = OrderString, TopRowCount = TopRowCount, StartRow = StartRow, Limit = Limit }; //调用接口 var result = client.ExecuteBillQuery(param.ToJson()); return result.Select(s => { var entity = new RelatedObject { FID = (long)s[0], FRE_FCode = (string)s[1], FRelatedObject = (long)s[2] }; return entity; }).ToList(); } #endregion #region 3.根据文档id获取文档物理文件id public List GetPlmStdDocument( List relatedObjects) { //注意 1:此处不再使用参数形式传入用户名及密码等敏感信息,改为在登录配置文件中设置。 //注意 2:必须先配置第三方系统登录授权信息后,再进行业务操作,详情参考各语言版本SDK介绍中的登录配置文件说明。 //读取配置,初始化SDK var client = new K3CloudApi(); //用于记录结果 var Info = new StringBuilder(); //业务对象标识 var formId = "PLM_STD_DOCUMENT"; var dt = DateTime.Now; //查询字段集合,即返回哪些数据,不能为空,根据不同业务单据填写不同的字段名,以下仅为示例 var fieldKeys = "FID,FCode,FName,FPhysicalFileName,FFileId,FRelevantObject"; // 提取 FID 值 var fidList = relatedObjects.Select(obj => obj.FID.ToString()).ToList(); // 将 FID 值用逗号分隔,并包裹在单引号中 var fids = string.Join(",", fidList.Select(fid => $"'{fid}'")); // 构建 FilterString var FilterString = $"FID in ({fids})"; var OrderString = ""; var TopRowCount = 0; var StartRow = 0; var Limit = 0; var param = new QueryParam { FormId = formId, FieldKeys = fieldKeys, FilterString = FilterString, OrderString = OrderString, TopRowCount = TopRowCount, StartRow = StartRow, Limit = Limit }; //调用接口 var result = client.ExecuteBillQuery(param.ToJson()); return result.Select(s => { var entity = new StdDocument { FID = (long)s[0], FCode = (string)s[1], FName = (string)s[2], FPhysicalFileName = (string)s[3], FFileId = (string)s[4], FRelevantObject = (string)s[5] }; return entity; }).ToList(); } #endregion }