Acumatica如何将外部REST服务数据加载到自定义选项卡的网格中
Acumatica外部API数据绑定到网格解决方案
Acumatica UI控件仅支持绑定继承自PXSelectBase的视图对象,直接使用List<T>无法适配绑定规则,按照以下步骤操作即可实现数据展示:
步骤1:调整自定义DAC配置
你的自定义DAC需要标记为非持久化虚拟对象,避免系统尝试向数据库读写该类数据:
[Serializable] [PXVirtual] // 核心特性:标记为非持久化虚拟DAC [PXCacheName("外部接口数据")] public class ExternalApiData : IBqlTable { // 示例字段定义,所有字段按此格式声明 #region Id [PXInt(IsKey = true)] [PXUIField(DisplayName = "数据ID")] public virtual int? Id { get; set; } public abstract class id : PX.Data.BQL.BqlInt.Field<id> { } #endregion // 其余接口对应字段按上面格式依次添加即可 }
步骤2:在业务逻辑Graph中定义绑定视图
无需写数据库查询BQL,直接定义PXProcessing类型的视图承载API拉取的数据:
public class YourCustomGraph : PXGraph<YourCustomGraph> { // 网格绑定用的视图,泛型参数替换为你的自定义DAC类型 public PXProcessing<ExternalApiData> ApiDataView; // 你原有拉取API数据的方法,可以绑定到按钮触发,也可以在页面初始化时调用 public void LoadDataFromApi() { // 这里替换为你原有调用REST API获取List<ExternalApiData>的逻辑 List<ExternalApiData> apiResult = GetDataFromExternalRestApi(); // 清空视图缓存的旧数据 ApiDataView.Cache.Clear(); // 将拉取到的所有数据插入视图缓存 foreach (var dataItem in apiResult) { ApiDataView.Cache.Insert(dataItem); } } }
步骤3:绑定网格控件
在自定义页面配置中,将网格的DataMember属性设置为上面Graph中定义的视图名称ApiDataView,再将网格列绑定到自定义DAC的对应字段即可。如果使用Acumatica自定义项目编辑器配置页面,直接在可视化界面选中对应视图作为网格数据源即可。
常见问题排查
- 网格显示空白:检查DAC字段是否添加了
PXUIField特性,且未手动设置Visible = false - 提示数据表不存在:确认自定义DAC类已添加
[PXVirtual]特性 - 数据更新后网格不刷新:如果是按钮触发拉取操作,给按钮添加
AutoCallBack配置,指定刷新网格所在的容器即可
内容的提问来源于stack exchange,提问作者Scott S
相关产品推荐
相关产品推荐

