如何使用通用查询界面的XML导入功能并在BLC代码中实现同类功能?
Acumatica 实现类通用查询文件导入功能的BLC示例
1. 前端ASPX控件配置
使用Acumatica内置的PXUploadDialog控件,该控件与通用查询导入弹窗逻辑一致:
<px:PXUploadDialog ID="edUploadFile" runat="server" Key="UploadFile" DialogTitle="Import XML File" Accept=".xml,.txt" AutoSave="false" RenderStyle="Button" />
Accept=".xml,.txt":限制可选择的文件类型,匹配需求DialogTitle:自定义弹窗标题,与通用查询导入弹窗样式统一
2. BLC层核心实现
2.1 定义DAC字段(存储上传文件标识)
在自定义DAC或扩展现有DAC中添加字段:
public class MyCustomDAC : IBqlTable { // 其他业务字段... #region UploadFile [PXDBString(255, IsUnicode = true)] [PXUIField(DisplayName = "Upload File")] public virtual string UploadFile { get; set; } public abstract class uploadFile : BqlString.Field<uploadFile> { } #endregion }
2.2 文件读取与处理逻辑
在BLC中通过内置API获取文件内容并处理:
public class MyCustomGraph : PXGraph<MyCustomGraph> { public PXSelect<MyCustomDAC> CustomRecords; [PXButton(CommitChanges = true)] [PXUIField(DisplayName = "Import File")] protected virtual IEnumerable ImportFile(PXAdapter adapter) { // 获取上传的文件信息 PX.SM.FileInfo uploadedFile = PXUploadDialog.GetFile(this, "UploadFile"); if (uploadedFile == null) { throw new PXException("请选择要导入的文件"); } // 验证文件类型 if (!uploadedFile.Name.EndsWith(".xml", StringComparison.OrdinalIgnoreCase)) { throw new PXException("仅支持XML格式文件"); } // 读取文件内容为字符串 string xmlContent = Encoding.UTF8.GetString(uploadedFile.Bytes); // 此处添加XML解析、业务逻辑处理代码(比如反序列化到实体、数据入库等) // ... PXProcessing.SetInfo(this, $"文件 {uploadedFile.Name} 导入成功"); return adapter.Get(); } }
3. 关键说明
PXUploadDialog是Acumatica原生控件,与通用查询导入弹窗使用同一套前端逻辑,样式交互完全一致- 无需手动编写JS弹窗代码,控件已封装所有前端交互逻辑
- 通过
PX.SM.FileInfo可直接获取文件字节流和基本信息,转换为字符串即可处理XML内容
内容的提问来源于stack exchange,提问作者pmfith
相关产品推荐
相关产品推荐

