Реагировать на рендеринг нового представления с отфильтрованными данными в PowerApps на основе модели
В настоящее время я реализую настраиваемый список в приложении на основе модели. Я заметил, что при фильтрации данных метод init, а такжеupdateView
вызывается метод, кроме того updateView
метод вызывается 3 раза. Однако новый вид не отображается.
Я предполагаю, что асинхронные обещания неправильно упорядочены и обрабатываются моими компонентами, поэтому init
метод в конце сбрасывает все или перезаписывает исходные данные.
Как правильно это сделать?
- Первоначально визуализируйте компоненты (под этим я подразумеваю код визуализации в
init
илиupdateView
метод)? - если данные обновляются, как нужно обрабатывать асинхронные вызовы, чтобы снова отобразить представление?
На данный момент код выглядит следующим образом:
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
NotifyOutputChange вызывает уровень клиента CRM для обновления значения и делает форму грязной (сохранить перед выходом). Кроме того, задействуется вся логика бизнес-уровня, такая как clientAPI, PBL и проверка полей. Если в этом нет необходимости и элементу управления нужно просто изменить пользовательский интерфейс, вы можете пропустить notifyOutputChange.
Обновление элемента управления, изменение размера страницы и внешняя бизнес-логика, обновляющая значение элемента управления, запускают UpdateView.
В фреймворке React - вы должны сделать как показано ниже:
нам нужно создать функцию notifyChange, которая обновит выходное значение PCF и вызовет notifyOutputChanged в нашем компоненте PCF.
Мы можем передать функцию notifyChange нашему пользовательскому компоненту React как часть props. Каждый раз, когда значение обновляется в нашем компоненте React, выполняется функция notifyChange, которая впоследствии вызывает notifyOutputChanged для обновления выходного значения и впоследствии запускает событие onChange в форме PowerApps.