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