SharePoint Online
Mit dem SharePoint Online Adressprovider können Sie auf Ihre SharePoint Listen zugreifen.
Konfiguration
Um auf SharePoint Online zuzugreifen, ist die Authentifizierung über OAuth nötig. Hierfür benötigt es eine "App Registration" im Azure Active Directory. Führen Sie folgende Schritte aus:
- Melden Sie sich über das Azure Portal an.
- Wählen Sie Ihr Azure Active Directory aus & kopieren Sie die
TenantId. - Unter "App registrations" legen Sie eine neue App mit beliebigen Namen an.
- Unter "API permissions" fügen Sie die
Microsoft Graph Sites.Read.AllBerechtigung hinzu (benötigt Admin Consent). - Unter "Certificates & secrets" fügen Sie ein neues Client Secret hinzu.
<!-- AddressService -->
<AddressProvider id="E10A8313-A92D-4CB2-A12B-9AEB58F39207" order="1" active="true">
<!-- serverside SharePoint Online address provider -->
<AddressProvider id="5da866b2-e63a-11eb-ba80-0242ac130004" Title="SharePoint">
<HostUrl>{HostUrl}</HostUrl>
<TenantId>{TenantId}</TenantId>
<ClientId>{ClientId}</ClientId>
<ClientSecret>{ClientSecret}</ClientSecret>
<Site>{SiteName}</Site>
<List>{ListName}</List>
<SearchParameters>
<SearchParameter Name="firstName" Label="Vorname/Name" Type="String" Length="100" Sort="1" />
<SearchParameter Name="street" Label="Strasse" Type="String" Length="100" Sort="2" />
</SearchParameters>
<Query>
<Filters>
<Filter>substringof('{street}', fields/Street)</Filter>
<Filter>substringof('{firstName}', fields/Vorname)</Filter>
</Filters>
<OrderBy>fields/Vorname</OrderBy>
<Top>30</Top>
<Expand>fields(expand=LinkedPerson)</Expand>
<Select>fields/Vorname, Fields/Name, fields/SpaltenName</Select>
</Query>
<Debug>true</Debug>
<Mapping>
<Map Source="Name" Target="Person_LastName"></Map>
<Map Source="Vorname" Target="Person_FirstName"></Map>
<Map Source="Adresse.address.street" Target="Person_Street" />
<Map Source="Adresse.address.city" Target="Person_City"></Map>
<Map Source="Adresse.address.postalCode" Target="Person_ZipCode"></Map>
</Mapping>
</AddressProvider>
</AddressProvider>
Parameter
- id 5da866b2-e63a-11eb-ba80-0242ac130004
- Title Titel des Address Provider. Default: "SharePoint"
- HostUrl Host-Url des SharePoint Online (ohne https://) z. B.
firma.sharepoint.com - TenantId Die TenantId des AAD
- ClientId Die AppClient ID der im AAD konfigurierten App
- ClientSecret Client Secret der im AAD konfigurierten APP (kann verschlüsselt werden)
- Site Name der Site in welcher die Liste erstellt ist
- List Name der Liste
- SearchParameter Liste mit allen Eingabemöglichkeiten
- Name Eindeutige Id für den Parameter. Entspricht dem Platzhalter in der Odata Query
- Label Angezeigter Text vor dem Eingabefeld
- Type Eingabetyp: String (Text), Long (Zahl), Boolean (Ja/Nein) oder Date (Datum)
- Length Maximale Länge für Strings
- Sort Sortierungswert gegenüber den anderen Parametern
- Query Die Query für die Abfrage am Service wird mit OData v4 geschrieben. Aus der Lister der unterstützten Operationen sind folgende möglich:
expand,filter,orderby,select,top. Die Spalten aus der Liste sind immer unterfields/abgelegt, daher ist es wichtig, das bei allen Operationen (aussertop) stets der Präfix 'fields/' aufgeführt ist. z. B.<Select>fields/Vorname</Select>. Die Suchparameter können mittels{SearchParamId}innerhalb der Query referenziert werden.- Expand Mit dem
ExpandOperator können mehrdimensionale/verlinkte Felder erweitert werden. Klassische Beispiele dafür sind verknüpfte Personen und die Adresse. Standard istfields. - Filter Mit dem
FilterOperator können die Einträge anhand der eingegebenen Suchwerte gefiltert werden. Liste der Vergleichsoperatoren. Achtung, Einschränkungen weiter unten beachten. - OrderBy Mit dem
OrderByOperator können die Einträge nach bestimmten Spalten sortiert werden. Standard ist unsortiert. - Select mit dem
SelectOperator können die zurückgegebenen Spalten/Informationen eingeschränkt werden. Standardmässig werden alle Informationen selektiert. - Top Mit dem
TopOperator kann die maximale Anzahl zurückgegebener Resultate limitiert werden. Standard ist 50.
- Expand Mit dem
- Debug Boolean -
truefalls zusätzliche Informationen geloggt werden sollen (verfügbare Werte mit Namen für das Mapping, detailliertere Fehlermeldungen) - Mapping Für SharePointlisten muss zwingend ein Standard-Kontakt-Mapping definiert werden. Ohne Mapping können die Einträge nicht verarbeitet werden. Für das Mapping werden die Spaltennamen als
SourceAttributeverwendet. Ausnahme dabei sind Felder vom TypOrtundLink.- Ort
- Ortschaftsangaben werden durch Sharepoint automatisch auf mehrere Spalten aufgeteilt. Diese enthalten dann nicht den Spaltennamen, sondern die englische Bezeichnung: Street, PostalCode, City usw. Die komplette Adresse wird mit DispName hinzugefügt. Sind mehrere Spalten vom Typ
Ortin einer Liste vorhanden, so werden diese von links nach rechts durchnummeriert, beginnend bei der zweiten Adresse mit 0, z. B.Street,Street0,Street1bei drei Adressen. - primedocs bereitet die Adressen auch noch selbst auf. Dies mit
SpaltenName.address.Cityusw.
- Ortschaftsangaben werden durch Sharepoint automatisch auf mehrere Spalten aufgeteilt. Diese enthalten dann nicht den Spaltennamen, sondern die englische Bezeichnung: Street, PostalCode, City usw. Die komplette Adresse wird mit DispName hinzugefügt. Sind mehrere Spalten vom Typ
- Link
- Links werden durch SharePoint in Url und Anzeigename aufgeteilt zurückgegeben:
SpaltenName.Url,SpaltenName.Description
- Links werden durch SharePoint in Url und Anzeigename aufgeteilt zurückgegeben:
- Ort
- Icon Base64-Icon, das dem Benutzer im Empfängerdialog angezeigt wird.
vorsicht
WARNUNG Für die Filterquery gibt es einige Einschränkungen:
- Es kann nur in indexierten Spalten gesucht werden MS-Dokumentation zum Hinzufügen indexierter Spalten.
- Entgegen der Dokumentation der Vergleichsoperatoren von Microsoft funktioniert der
contains(FieldName, 'SearchValue')Vergleichsoperator nicht! Es muss stattdessensubstringof('SearchValue',FieldName)verwendet werden. - Leere Werte gelten bei substringof nicht als Teil des Inhaltes. Dies hat als Konsequenz, dass wenn nicht alle Suchparameter einen Wert haben, kein Eintrag gefunden wird. Aus diesem Grund wurde die Filterquery so aufgebaut, dass innerhalb des
<Filters></Filters>mehrere<Filter></Filter>definiert werden können. Ein<Filter></Filter>wird nur dann beachtet, wenn für jeden darin enthaltenen Suchparameter ein Wert eingegeben wurde: -