Angular & Xrm WebApi: невозможно присвоить результат переменной класса - PullRequest
1 голос
/ 03 октября 2019

Я создаю базовый веб-ресурс Angular 8.2 для Dynamics CRM, но мне не удается присвоить значение свойству класса.

Код следующий:

HTML

<div>
  Hello {{loggedInUserName}} from {{ title }}.<br/>
  <br/>
  The first retrieved user from WebApi was {{ firstUserFullName }}
</div>

и контроллер:

import {
  Component
} from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent {
  title = 'XRM-Angular-Base-App';
  loggedInUserName: String;
  firstUserFullName: String;

  ngOnInit() {
    let context = Xrm.Utility.getGlobalContext();
    this.loggedInUserName = context.userSettings.userName;
    console.log("Logged in user: " + this.loggedInUserName)
    Xrm.WebApi.retrieveMultipleRecords("systemuser", "?$select=firstname,fullname&$filter=firstname eq 'Alexandre'").then(
      function success(result) {
        alert(result.entities[0].fullname);
        this.firstUserFullName = result.entities[0].fullname;
        alert(this.firstUserFullName);
      },
      function (error) {
        alert("Error: " + error.message);
      }
    );

  }
}

При отладке (с файлами .map) код переходит к первому предупреждению (alert(result.entities[0].fullname);), показывает правильный результат ("Александр Кто-то "), но ничего не делайте с следующей инструкцией (this.firstUserFullName = result.entities[0].fullname;), и второе предупреждение никогда не отображается.

1 Ответ

1 голос
/ 03 октября 2019

Если вам нужен доступ к this, вам нужно использовать arrow operation (=>) в success callback и в error callback, как показано ниже

Xrm.WebApi.retrieveMultipleRecords("systemuser", "?$select=firstname,fullname&$filter=firstname eq 'Alexandre'").then(
  result => {
    alert(result.entities[0].fullname);
    this.firstUserFullName = result.entities[0].fullname;
    alert(this.firstUserFullName);
  },
  error => {
    alert("Error: " + error.message);
  }
);
...