Geçtiğimiz günlerde birkaç proje için C# ile Sharepoint listelerinden veri çekmem gerekti. Daha sonra aynı işlemi Flutter ile yapmak istedim. Bu sebeple bu yazı içeriğinde Flutter sharepoint veri çekme işlemini anlatacağım.

Flutter Sharepoint Veri Çekme

Flutter ile sharepoint listelerimizden istediğimiz veriyi çekebiliriz. Bunu yapmak için öncelikle aşağıdaki link ile uygulama bilgileri oluşturuyoruz. “Mryed” benim sharepoint uygulamasındaki site ismim. Siz oraya kendi sitenizin ismini yazabilirsiniz.

https://{tenantismi}.sharepoint.com/sites/Mryed/_layouts/15/appregnew.aspx

“appregnew” sayfasındaki istemci kimliği ve gizli anahtarı bir metin belgesine not edebilirsiniz. Uygulama etki alanına deneme amaçlı “localhost”, URL alanına da “https://localhost” yazdım. Daha sonra;

https://{tenantismi}.sharepoint.com/sites/Mryed/_layouts/15/appinv.aspx

sayfasına girerek bir önceki sayfada not aldığımız uygulama kimliğini buraya yazıyoruz. Arama tuşuna bastığınızda o uygulama kimliği altındaki alanlarda dolacaktır. Formun altında bulunan “İzin İsteği XML’si:” alanına da aşağıdaki kodu yazıyoruz.

<AppPermissionRequests AllowAppOnlyPolicy="true">  
   <AppPermissionRequest Scope="http://sharepoint/content/sitecollection" 
    Right="FullControl" />
</AppPermissionRequests>

Sharepoint izin XML kodları için daha fazla detay; Medium.

Oluştur butonuna bastıktan sonra “{Başlık} uygulamasına güveniyor musunuz?” yazan bir onay alanı çıkacak. Buradan “güven” butonuna tıklıyoruzve “Site Ayarları” sayfasına yönlendiriliyoruz. Site ayarları sayfasında “Site koleksiyonu uygulama izinleri” alanına giriyoruz. Oluşturduğunuz uygulama iznini burada görüntüleyebilirsiniz. Buradaki uygulama tanımlayıcısı sütununda yazan alanı not alabilirsiniz. Özellikle “@” işaretinden sonraki kısmı kullanacağız.

Bu aşamadan sonra sharepoint tarafı ile işimiz bitiyor. Şuan ihtiyacımız olan Flutter’dan bağlantı kurmamız için gerekli olan Bearer token. Bunun içinde postman uygulamasını kullanıyorum. Aşağıdaki linki postman url alanına giriyoruz. Kod yazan kısım not aldığımız “@” işaretinden sonraki alan.

https://accounts.accesscontrol.windows.net/{kod}/tokens/oAuth/2

Daha sonra postman içerisinde body alanına geliyoruz. İstemci kimliği ve gizli anahtar ilk aşamada metin belgesine not aldığımız bilgiler. Kod ise yine “@” işaretinden sonraki kısım.

grant_type:client_credentials
client_id:{istemci kimliği}
client_secret:{gizli anahtar}
resource:00000003-0000-0ff1-ce00-000000000000/{tenant}.sharepoint.com@{kod}

Artık “Send” butonuna tıklayabiliriz. Burada bize “token_type”: “Bearer” olan bir liste dönecek. Buradaki “access-token” alanındaki uzun kodu metin belgesine kopyalıyoruz.

Flutter RestApi

Access token bilgisine de ulaştığımıza göre artık flutter tarafına geçiş yapabiliriz. tokenValue ismindeki string değerin içine “access-token” kodunu yapıştırın. Bearer’dan sonra bir boşluk olacak ve boşluk sonrası sizin access token bilginiz olacak. Uri.parse içindeki sharepoint linkine de kendi tenant bilginizi yazmayı unutmayın.

Ben aşağıdaki kodda “Mryed” sitesindeki “Personel” listesindeki “adSoyad,Sicil” bilgilerini çektim. Siz çekmek istediğiniz veriye göre kodu değiştirebilirsiniz.

import 'dart:convert';
import 'package:http/http.dart' as http;

class Personel {
  final String adSoyad;
  final String sicil;

  Personel({required this.adSoyad, required this.sicil});

  factory Personel.fromJson(Map<String, dynamic> json) {
    return Personel(
      adSoyad: json['AdSoyad'],
      sicil: json['Sicil'],
    );
  }
  static Future<List<Personel>> getPersonelList() async {
    String tokenValue =
        "Bearer {token alanı}";
    final response = await http.get(
        Uri.parse(
            'https://{tenant}.sharepoint.com/sites/MrYed/_api/web/lists/getbytitle(\'Personel\')/items?\$select=AdSoyad,Sicil'),
        headers: {
          'Accept': 'application/json;odata=verbose',
          'Authorization': '$tokenValue'
        });
    if (response.statusCode == 200) {
      print("Basarili");
      final data = jsonDecode(response.body)['d']['results'] as List<dynamic>;
      return data.map((item) => Personel.fromJson(item)).toList();
    } else {
      throw Exception('Failed to load data');
    }
  }
}

Flutter Sharepoint veri çekme işlemi bu kadar. İlerleyen aşamalarda flutter ile sharepoint verisi çekme, silme ve güncelleme işlemleri yapabilirim. Bir sonraki yazı içeriğinde görüşmek üzere…