はじめに
ここでは実践のみ。
準備
以下を持つアイテムを作成する
・名称
・リスト
・フィルターリスト
・アイテム参照
・アイテム関連付
変数名は記録しておく。
実践
AML編
こちらを参考に基本を学習する。
データ取得
ここではwhereで対象のアイテムを絞っている。
whereがないとすべてのアイテムが出力される。
<Item type="Test_Item_katsu" action="get" where="[Test_Item_katsu].name='aeiou'"></Item>
リレーションを取得するには<Relationships>が必要
<Item type="Test_Item_katsu" action="get" where="[Test_Item_katsu].name='あいうえお'">
<Relationships><Item type="Test_Item_katsu_Test_" action="get"></Item></Relationships>
</Item>
データ登録
アイテムを作成と既存アイテムを参照、リレーションを示す。参照や関連付けの場合は「get」を使う!タブで囲まれた値は""で囲まない
<Item type="Test_Item_katsu" action="add">
<name>aaa</name>
<list>001</list>
<item_item><Item type="Test_Item_katsu" action="get"><name>aeiou</name></Item></item_item>
<Relationships><Item type="Test_Item_katsu_Test_" action="add"><related_id><Item type="Test_Item_katsu" action="get"><name>aeiou</name></Item></related_id></Item></Relationships>
</Item>
データ編集
アイテムを編集する。Getのようにアイテムを指定して、作成時のように変えたいものを入れるが、リレーションについてはIDを取得しないとどうにもならなそう。<Relationships>以外は試してOKだった。deleteする場合は全IDを取得する必要があるのか。。
<Item type="Test_Item_katsu" action="edit" where="[Test_Item_katsu].name='bbb'">
<name>bbb</name>
<list>002</list>
<item_item><Item type="Test_Item_katsu" action="get"><name>あいうえお</name></Item></item_item>
<Relationships><Item type="Test_Item_katsu_Test_" action="delete" where="[Test_Item_katsu_Test_].related_id='******************'"></Item></Relationships>
</Item>
rest編
こちら(ブログ)とこちら、(英語マニュアル)のRestAPIを参考に。
import requests
import json
import hashlib
import pandas as pd
###トークン関係のクラス###
class GetAccessToken:
def __init__(self):
self.baseURL = "" #
self.database = "" #
self.username = "" #
self.password = "" #
self.access_token = "" #
def access_tokenn(self): #アクセストークンの取得
#パスワードをMD5ハッシュ値へ変換
oauth_password_hs = hashlib.md5(self.password.encode()).hexdigest()
#OAuthServerURLの取得
url = self.baseURL + "Server/OAuthServerDiscovery.aspx"
response1 = requests.get(url)
oauth_Server_URL = response1.json()["locations"][0]["uri"]
#Token EndPointの取得
url2 = oauth_Server_URL + ".well-known/openid-configuration"
response2 = requests.get(url2)
oauth_ServerToken_URL = response2.json()["token_endpoint"]
#Tokenの取得
payload = {'grant_type': 'password', 'scope': 'Innovator', 'client_id': 'IOMApp',
'username': self.username, 'password': oauth_password_hs, 'database': self.database} #oauth_username
response3 = requests.post(oauth_ServerToken_URL, data=payload)
self.access_token = response3.json()["access_token"]
###DBから情報を取得する関数(引数:テーブル名)###
def seach_info(data, baseURL=baseURL, header=header):
tmp = requests.get(baseURL + "server/odata/{}".format(data), headers=header)
return pd.DataFrame(tmp.json()["value"])
##ログイン準備##
baseURL = "http://192.168.0.101/InnovatorServer/" #適宜
database = "****" #適宜
#ログインID
username = "admin" #適宜
#ログインパスワード
password = "innovator" #適宜
##トークンゲット##
token = GetAccessToken()
token.baseURL = baseURL
token.database = database
token.username = username
token.password = password
token.access_tokenn()
# print(token.access_token)
##トークンはヘッダーで扱う##
header={"Authorization":"Bearer " + token.access_token}
###getするとき###
#対象のITEM_Type
get_data="Test_Item_katsu"
#どのアイテムの中身が欲しいか?
joken="?$filter=keyed_name eq 'abcdef'"
#抜き出したいプロパティは?
joken1="&$select=id, keyed_name, list" #複数条件は「,」
#参照アイテムの情報を見るときは?
joken2="&$expand=item_item" #アイテム参照
tmp=requests.get(baseURL + "server/odata/{0}".format(get_data+
joken+joken1+joken2), headers=header)
#リレーションを見るとき
joken3="&$expand=Test_Item_katsu_Test_($select=id, keyed_name, list)" #リレーション()がないと全部
tmp=requests.get(baseURL + "server/odata/{0}".format(get_data+
joken+joken1+joken3), headers=header)
#応用
joken4="&$expand=item_item($select=id, keyed_name, list), Test_Item_katsu_Test_($select=id, keyed_name, list)"
tmp=requests.get(baseURL + "server/odata/{0}".format(get_data+
joken+joken1+joken4), headers=header)
#filterで検索絞って、selectで表示を決め、expandで参照する。参照の表示範囲はfilterで上手く()で式を作る#
###post,patchするとき###
#対象のITEM_Type
get_data="Test_Item_katsu"
#送るときのデータ
'''
json_data={
"name":"abcdef",
"list":"001",
"item_item@odata.bind":"Test_Item_katsu('E9EAB55118714958930B5931C20ACB35')", #item参照
"Test_Item_katsu_Test_":[{ #item関連
'related_id@odata.bind':"Test_Item_katsu('E9EAB55118714958930B5931C20ACB35')"
}]
}
'''
##新規作成postのとき
#tmp=requests.post(baseURL + "server/odata/{0}".format(get_data), headers=header, json=json_data)
##編集patchのとき。「filterは使えない?」
#tmp=requests.patch(baseURL + "server/odata/{0}".format(get_data+"('EDF25C76A7C7479B93EE9B81EC72703F')"),
# headers=header, json=json_data)
print(tmp.json())
##以上 ARASのAPI##
感想
データベース側で色々機能をつけると改修が難しくなる。設備になるため。
外部で制御可能なものは自前で用意したほうがよいと思う。





コメント