Office Graph API: Şablona Dayalı Yeni Belge

calendar_month 15 Mayıs 2020

Geçenlerde Office Graph API kullanarak bir şablona dayalı Word belgesi oluşturmak ve ilişkili SharePoint ListItem’ın birkaç meta verisini ayarlamak istedim. “Straight-forward” bir iş olmadığı ortaya çıktı, bu da sonuçta bu makaleye yol açtı.

Sorun Özeti

İçinde belgelerin AkDocumentDoc ContentType’ına dayalı olarak oluşturulacağı bir kitaplığım var. ContentType Document türünde ve birkaç ek sütunu var.

AkDocumentDoc’un arkasında bir Word şablonu var, böylece AkDocumentDoc’a dayalı bir öğe oluşturulduğunda aynı anda bu şablonla bir Word belgesi oluşturuluyor. Şablon Pruef.dotx olarak adlandırılmış.

Şimdi bu ContentType’a dayalı olarak kitaplığa yeni öğeler oluşturan ve ilişkili SharePoint ListItem’ın meta verilerini ayarlayan bir mantık gerekli.

Tüm istekler Graph Explorer veya Postman üzerinden gönderilebilir.

Ortam

Gerekli değişkenler:

AdÖrnek DeğerAçıklama
hostnamekirmizient.sharepoint.comSharePoint Tenant
siteUrlhttps://…/sites/halklailiskilerSiteCollection
graph siteIdhostname,siteCollectionId,siteIdBirleşik
graph drive idb!EWACgmr6…Kitaplığın Drive ID’si

Site ID’yi Bulma

https://graph.microsoft.com/v1.0/sites?search=halklailiskiler

Döndürülen ID formatı: <hostname>,<siteCollectionId>,<siteId>.

Drive ID’yi Bulma

https://graph.microsoft.com/v1.0/sites/<graph siteId>/drives

Belge Oluşturma (OneDrive API)

Belge OneDrive API’sine bir PUT isteği ile oluşturulur:

https://graph.microsoft.com/v1.0/sites/<graph siteId>/drives/<graph drive id>/root:/<filename.docx>:/content

Belgeyi Güncelleme (SharePoint API)

Artık belgemizin meta verilerini güncelleyebiliriz – bunun için PATCH yöntemi kullanılır:

{
  "fields": {
    "Title": "Test-Blog-AK",
    "FileLeafRef": "akblogtest123-update.docx",
    "ContentType": "AkDocumentDoc",
    "Test1": true,
    "Test2": false
  }
}

Özet

Belge OneDrive API üzerinden oluşturulur, meta verilerin doldurulması SharePoint API üzerinden yapılır. “Straight-forward” bir yol yok – bunu göstermek istediğim buydu.