Heute bin ich zufällig wieder auf einen „alten Bekannten“ getroffen – der Single Value Taxonomy Label API-Bug. Er heißt natürlich nicht so (bin mir nicht sicher ob es einen offiziellen Namen hat) aber ich habe ihn mal eben so getauft. Ich möchte hier nur darauf aufmerksam machen, dass es den Bug (und nicht nur der…) noch gibt. Also „mind the gap“ 🙂
Folgende Voraussetzungen müssen zutreffen, damit der Bug auftritt:
- Eine Managed Metadata (Taxonomy) Spalte muss auf der Liste aktiv sein
- Die Spalte muss als „Einfache Auswahl“ (single valued) konfiguriert sein
- Ein Listenelement muss per REST API angefordert werden (entweder direkt oder wie in meinem Fall über die PnPJS-Bibliothek)
Folgender TypeScript-Code hatte ich eingesetzt (Hinweis: SPFx-Bibliothek war hier in der Version 3.18 vorhanden). Konkrete Feldnamen habe ich mit * anonymisiert:
const currentPageItem = await sp.web.lists
.getById(this.context.pageContext.list.id.toString()).items
.getById(this.context.pageContext.listItem.id).select("w****c","FileRef")();

Der bekannte Workaround ist es, das Listenelement via CAML-Abfrage zu holen (z.B. hier in diesem Post aus – sage und schreibe – Mai 2014!). Dieser Workaround ist immer noch valide, unten der Code und Output dazu – nun wird derr String korrekt zurückgegeben. Im verlinkten Post wird nur ein Query gezeigt, der alle Listenelemente zurückgibt. Das soll man bekanntlich vermeiden, gerade bei größeren Listen, daher unten die Query mit Where-Klausel.
const currentPageItem = await sp.web.lists
.getByTitle("Site Pages")
.getItemsByCAMLQuery({
ViewXml: `<View>
<Query>
<Where>
<Eq>
<FieldRef Name="ID"/>
<Value Type="Number">${this.context.pageContext.listItem.id}</Value>
</Eq>
</Where>
</Query>
</View>`
});

P.S.: Habt ihr auch so „alte Lieblinge?“. Immer her damit 🙂
