Реагировать на рендеринг нового представления с отфильтрованными данными в PowerApps на основе модели

В настоящее время я реализую настраиваемый список в приложении на основе модели. Я заметил, что при фильтрации данных метод init, а такжеupdateView вызывается метод, кроме того updateViewметод вызывается 3 раза. Однако новый вид не отображается.

Я предполагаю, что асинхронные обещания неправильно упорядочены и обрабатываются моими компонентами, поэтому init метод в конце сбрасывает все или перезаписывает исходные данные.

Как правильно это сделать?

  1. Первоначально визуализируйте компоненты (под этим я подразумеваю код визуализации в init или updateView метод)?
  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);

  }

1 ответ

Вам нужно позвонить в notifyOutputChanged который в свою очередь вызовет updateView

Слова PCF PM:

NotifyOutputChange вызывает уровень клиента CRM для обновления значения и делает форму грязной (сохранить перед выходом). Кроме того, задействуется вся логика бизнес-уровня, такая как clientAPI, PBL и проверка полей. Если в этом нет необходимости и элементу управления нужно просто изменить пользовательский интерфейс, вы можете пропустить notifyOutputChange.

Обновление элемента управления, изменение размера страницы и внешняя бизнес-логика, обновляющая значение элемента управления, запускают UpdateView.

В фреймворке React - вы должны сделать как показано ниже:

нам нужно создать функцию notifyChange, которая обновит выходное значение PCF и вызовет notifyOutputChanged в нашем компоненте PCF.

Мы можем передать функцию notifyChange нашему пользовательскому компоненту React как часть props. Каждый раз, когда значение обновляется в нашем компоненте React, выполняется функция notifyChange, которая впоследствии вызывает notifyOutputChanged для обновления выходного значения и впоследствии запускает событие onChange в форме PowerApps.

Учить больше

Другие вопросы по тегам