2

目前我正在模型驱动的应用程序中实现自定义列表。我注意到在过滤数据时调用了 init 方法以及该updateView方法,此外该updateView方法被调用了 3 次。但是,不会呈现新视图。

我的猜测是我的组件没有正确排序和处理异步承诺,因此init最后的方法会将所有内容重置为原始数据或用原始数据覆盖它。

这样做的正确方法是什么?

  1. 最初渲染组件(我的意思是initorupdateView方法中的渲染代码)?
  2. 如果刷新数据,如何处理异步调用以再次呈现视图?

目前,代码如下所示:

     public init(context: ComponentFramework.Context<IInputs>, notifyOutputChanged: () => void, state: ComponentFramework.Dictionary, container: HTMLDivElement) {
    this._context = context;
    //load the global context with the app properties.
    this._globalContext = Xrm.Utility.getGlobalContext();
    this._globalContext.getCurrentAppProperties().then((appProperties:any) =>{
      this._currentAppProperties = appProperties;
      this._projectList = React.createElement(ProjectDetailList,{context:this._context, appProperties: this._currentAppProperties, globalContext: this._globalContext});
      ReactDOM.render(React.createElement(Fabric, null, this._projectList), container);
    }, (error:any) =>{console.log(error)});
  }

  public updateView(context: ComponentFramework.Context<IInputs>): void {
    // storing the latest context from the control.
    this._context = context;
    this._globalContext = Xrm.Utility.getGlobalContext();
    this._globalContext.getCurrentAppProperties().then((appProperties:any) =>{
      this._currentAppProperties = appProperties;
      ReactDOM.render(React.createElement(Fabric, null, React.createElement(ProjectDetailList,{context:this._context, appProperties: this._currentAppProperties, globalContext: this._globalContext})), this._container);
    }, (error:any) =>{console.log(error)});
    console.log("NEW CONTEXT!!!! ->>>>>>>>>>>>>>>>>>>>>>>")
    console.log(this._currentAppProperties);
    console.log(context);
    console.log(this._context);

  }
4

1 回答 1

2

您需要调用notifyOutputChangedwhich 将反过来调用updateView

PCF PM 话

NotifyOutputChange 调用 CRM 客户端层来更新值,它使表单变脏(退出前保存)。此外,所有业务层逻辑(如 clientAPI、PBL 和字段验证)都被启动。如果不需要,并且控件只需要更改 UI,您可以跳过 notifyOutputChange。

控件重新加载、页面大小调整和外部业务逻辑更新控件值触发 UpdateView。

在 React 框架中 - 你应该像下面这样:

我们需要创建一个 notifyChange 函数,它会更新 PCF 的输出值,并在我们的 PCF 组件中调用 notifyOutputChanged。

我们可以将 notifyChange 函数作为 props 的一部分传递给我们的自定义 React 组件。每当在我们的 React 组件中更新值时,都会执行 notifyChange 函数,该函数随后会调用 notifyOutputChanged 来更新输出值并随后在 PowerApps Form 上触发 onChange 事件。

学到更多

于 2019-11-06T17:14:21.997 回答