μ¬κΈ° λ΄κ° μ¬μ©νλ κ²μ΄ μμ΅λλ€.
site_url = "https://mycompany.sharepoint.com/sites/mysite/"
clientid = "12345"
clientsecret = "67890"
clientcredentials = ClientCredential(clientid, clientsecret)
ctx = ClientContext(site_url).with_credentials(clientcredentials)
target_list = "ListIWant"
list_object = ctx.web.lists.get_by_title(target_list)
items = list_object.get_items()
ctx.load(items)
ctx.execute_query()
λͺ¨λ κ²μ΄ μ€λ₯ μμ΄ μ€νλμ§λ§ κ²°κ΅ λ΄ list_objectμλ νλͺ©μ΄λ νλκ° μμ΅λλ€... list_objectμμ resource_urlμ 보면 μ¬λ°λ₯Έ URLμ΄ μλλλ€. λͺ©λ‘ μ΄λ¦ μλ€μ μΆκ° λ°±μ¬λμκ° μμ΅λλ€. μ¬λμλ₯Ό μ κ±°νκ³ Edge μ£Όμ νμμ€μ 볡μ¬νλ©΄ λͺ©λ‘μ λν μ λ³΄κ° ν¬ν¨λ XML νμΌμ΄ λ€μ΄λ‘λλμ§λ§ κ·Έλλ‘λ μλνμ§ μμ΅λλ€. κ·Έκ²μ κ³ μΉλ λ°©λ².
λ무 μΉν΄μ§ κ² κ°μμ... λμμ€ μ¬λ μλμ?
κ±°μ λ€ μμ΅λλ€.
items
κ°μ²΄λ ListItemCollection
μ νμ
λλ€.
len(items)
λ₯Ό μλνλ©΄ 컬λ μ
μ νλͺ© μλ₯Ό λ°νν΄μΌ ν©λλ€.
μ΄μ ν΄λΉ νλͺ©μ μ΄κ±°ν μ μμ΅λλ€.
for item in items:
print(item.properties)
κ° νλͺ©μ μ΄μ μ‘°μν μ μλ ListItem
μ νμ
λλ€.
λν μΆκ° λ°±μ¬λμλ νμ΄μ¬ λ¬Έμμ΄μμ '
λ₯Ό μ΄μ€μΌμ΄ννκΈ° μν κ²μ΄λ―λ‘ μμ ν μ μμ
λλ€.
κ±°μ λ€ μμ΅λλ€.
items
κ°μ²΄λListItemCollection
μ νμ λλ€.
len(item)
λ₯Ό μλνλ©΄ 컬λ μ μ νλͺ© μλ₯Ό λ°νν΄μΌ ν©λλ€.
μ΄μ ν΄λΉ νλͺ©μ μ΄κ±°ν μ μμ΅λλ€.for item in items: print(item.properties)
κ° νλͺ©μ μ΄μ μ‘°μν μ μλ
ListItem
μ νμ λλ€.
λμμ μ£Όμ μ κ°μ¬ν©λλ€. κ·Έλ¬λ print(len(items))λ 0μ λ°νν©λλ€.
resource_urlμ λ¬Έμ κ° μλ€λ©΄. SharePoint μ¬μ΄νΈμ λν΄ μ€μ ν μ± κΆνμ λ¬Έμ κ° μμ μ μμ΅λκΉ? https://docs.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azureacs (κΆν μμ² XML μ€μ ν¬ν¨)μ μ§μΉ¨μ λ°λμ§λ§ _layouts/15 /appinv.aspx νμ΄μ§μμ λ΄ ν΄λΌμ΄μΈνΈ IDλ₯Ό 보면 κΆν μμ² XML νλκ° νμ λΉμ΄ μμ΅λλ€... μ²μ ν΄λ³΄λ μμ μ΄λΌ μ λλ‘ μλνλμ§ λͺ¨λ₯΄κ² μ΅λλ€.
xmlμ λν΄ μ΄λ¬ν μ€μ μ μ¬μ©νκ³ μμ΅λλ€(κ·Έλ¦¬κ³ λΆλͺ ν μμ© νλ‘κ·Έλ¨μ μ λ’°νλλ‘ μ ννμ΅λλ€).
<AppPermissionRequests AllowAppOnlyPolicy="true">
<AppPermissionRequest Scope="http://mycompany.sharepoint.com/sites/mysite" Right="FullControl" />
</AppPermissionRequests>
μ΄κ²μ docs.microsoft.comμμ μ°Ύμ μ§μΉ¨κ³Ό μ½κ° λ€λ₯΄μ§λ§ ν λνΈκ° μλ λ΄ μ¬μ΄νΈμ λν μ‘μΈμ€ κΆνλ§ λΆμ¬ν μ μμ΅λλ€. μ±μ λμ€μ 'μ¬μ΄νΈ λͺ¨μ μ± κΆν'μ λμ΄λλ―λ‘ μλνλ κ²μΌλ‘ κ°μ ν©λλ€... νμ§λ§ appinv.aspxλ‘ λμκ° λ xml κΆνμ΄ νμλμ§ μλλ€λ μ¬μ€μ λλ€.
μ’μ μ§λ¬Έμ
λλ€. μ κΈ°μ΅μΌλ‘λ κΆν λ¬Έμ λ₯Ό λ€λ£° λ λ§€μ° λͺ
ννμ΅λλ€.
μ€μ λ‘ μΉμΈλ μ±μ _layouts/15/AppPrincipals.aspx
κ·Έλ¦¬κ³ appinvμμ xmlμ΄ λ³΄μ΄μ§ μλ κ²μ΄ μ μμ
λλ€.
λ΄ κΈ°μ΅μ΄ λ§λ€λ©΄ λ΄κ° μ¬μ©ν λ²μλ http://sharepoint/site/sitecollection
μ΄μ§λ§
(νΈμ§:) μΉνΈ μνΈλ λ€μκ³Ό κ°μ΅λλ€. https://medium.com/ng-sp/sharepoint-add-in-permission-xml-cheat-sheet-64b87d8d7600
μ°νΈ λ°°λ¬λΆλ₯Ό ν΅ν΄ APIμ μ°κ²°μ μλ νμ΅λκΉ?
λ€μμ νμ¬ μ°κ²°λμ΄ μλ ν΅μμ¬λ‘λΆν° μ»μ μ 보μ λλ€.
>>> items = ctx.web.lists.get_by_title('Events').items
>>> items
<office365.sharepoint.listitems.listItem_collection.ListItemCollection object at 0x10d064af0>
>>> len(items)
0
>>> ctx.load(items)
>>> ctx.execute_query()
>>> len(items)
2
μΈμ¬λ§,
κ±°μ λ€ μμ΅λλ€.
items
κ°μ²΄λListItemCollection
μ νμ λλ€.
len(items)
λ₯Ό μλνλ©΄ 컬λ μ μ νλͺ© μλ₯Ό λ°νν΄μΌ ν©λλ€.
μ΄μ ν΄λΉ νλͺ©μ μ΄κ±°ν μ μμ΅λλ€.for item in items: print(item.properties)
κ° νλͺ©μ μ΄μ μ‘°μν μ μλ
ListItem
μ νμ λλ€.λν μΆκ° λ°±μ¬λμλ νμ΄μ¬ λ¬Έμμ΄μμ
'
λ₯Ό μ΄μ€μΌμ΄ννκΈ° μν κ²μ΄λ―λ‘ μμ ν μ μμ λλ€.
λμνκ³ μ€μ λ‘ μΆκ° λ°±μ¬λμλ OData URLμ μ ν¨ νκ² λ§λ€κΈ° μν΄ μν¬μ€νΈλ‘νΌ λ¬Έμλ₯Ό μ΄μ€μΌμ΄ννλ λ° νμμ λλ€.
μ΄ μ견μ κ·Όλ³Έ μμΈμ λ°νλ κ² κ°μ΅λλ€.
xmlμ λν΄ μ΄λ¬ν μ€μ μ μ¬μ©νκ³ μμ΅λλ€(κ·Έλ¦¬κ³ λΆλͺ ν μμ© νλ‘κ·Έλ¨μ μ λ’°νλλ‘ μ ννμ΅λλ€).
<AppPermissionRequests AllowAppOnlyPolicy="true"> <AppPermissionRequest Scope="http://mycompany.sharepoint.com/sites/mysite" Right="FullControl" /> </AppPermissionRequests>
μ΄κ²μ docs.microsoft.comμμ μ°Ύμ μ§μΉ¨κ³Ό μ½κ° λ€λ₯΄μ§λ§ ν λνΈκ° μλ λ΄ μ¬μ΄νΈμ λν μ‘μΈμ€ κΆνλ§ λΆμ¬ν μ μμ΅λλ€. μ±μ λμ€μ 'μ¬μ΄νΈ λͺ¨μ μ± κΆν'μ λμ΄λλ―λ‘ μλνλ κ²μΌλ‘ κ°μ ν©λλ€... νμ§λ§ appinv.aspxλ‘ λμκ° λ xml κΆνμ΄ νμλμ§ μλλ€λ μ¬μ€μ λλ€.
μ 곡λ λ²μκ° _invalid_ 보μ
λλ€: http://mycompany.sharepoint.com/sites/mysite
mycompany
: λμ sharepoint
미리 μ μλ μ리 νμμμ¬μΌ ν©λλ€.sites/mysite
λμΌ, _valid_ μ리 νμμμ¬μΌ ν©λλ€(μ: content/sitecollection
λλ content/sitecollection/web
λ°λΌμ μ루μ μ _valid_ κΆν μμ²μ μ 곡νμ¬ μ± κΆν μ
μ¬μ΄νΈ λͺ¨μ λΉ:
<AppPermissionRequests AllowAppOnlyPolicy="true">
<AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="FullControl" />
</AppPermissionRequests>
μΉ λΉ :
<AppPermissionRequests AllowAppOnlyPolicy="true">
<AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web" Right="FullControl" />
</AppPermissionRequests>
_κΆν λ²μ_ λͺ©λ‘μ μΆκ° κΈ°λ₯ κΆνμμ μ°Ύμ μ μμ΅λλ€.
λ§μ§λ§μΌλ‘ μ± λ³΄μ 주체λ₯Ό μ€μ νκ³ κΆνμ λΆμ¬νλ λ°©λ²μ λν λ¨κ³λ³ μ§μΉ¨λ μ 곡νλ μν€ νμ΄μ§ κ° μμ΅λλ€.
κ°μ¬ν©λλ€! μ. XML κΆν λ²μκ° λ¬Έμ μ κ·Όλ³Έ μμΈμΈ κ² κ°μ΅λλ€!
μ΄κΈ° ν
μ€νΈμμ μ§κΈμ μλνλ κ²μΌλ‘ 보μ
λλ€.
μ΄κ²μ νλ₯ν©λλ€. μ λ μ§λ 1λ λμ MS Accessμμ VBA μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νμ¬ SharePoint λͺ©λ‘μ μ λ°μ΄νΈνμ΅λλ€. μ΄ λΆλΆμ νμ νλ©΄ λͺ¨λ κ²μ PythonμΌλ‘ μ΄μνλ λ° ν κ±Έμ λ λ€κ°κ° μ μμ΅λλ€.