Реагируйте на рендеринг нового представления с отфильтрованными данными в PowerApps на основе модели - PullRequest
1 голос
/ 06 ноября 2019

В настоящее время я внедряю пользовательский список в приложение, управляемое моделью. Я заметил, что при фильтрации данных вызывается метод 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 Ответ

0 голосов
/ 06 ноября 2019

Вам нужно вызвать notifyOutputChanged, который будет вызывать updateView

PCM PM :

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

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

В React Framework - вы должны сделать, как показано ниже:

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

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

Узнать больше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...