はじめに
この件、中々調べても出てこず困った人いそうなやつ
英語での掲示板を見かけたが、明確な回答なかったのでアクセスアップ狙いで書く!
何やるの?
以下のようにやればおけい
## まずはリレーションシップアイテムのIDを入手する
tmp=requests.get(baseURL + "server/odata/{0}".format("Test_Item_katsu('208D096EF5C6415AAE848E49E965BD4F')
/Test_Item_katsu_Test_?$expand=related_id"), headers=header)
tmp.json()
## 次にAMLを準備してpost
## AMLをポスト
aml=f'''
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<ApplyAML>
<AML>
<Item type="Test_Item_katsu" action="edit" where="[Test_Item_katsu].id='208D096EF5C6415AAE848E49E965BD4F'">
<Relationships>
<Item type="Test_Item_katsu_Test_" action="delete"
where="[Test_Item_katsu_Test_].related_id='2D69EB95C91B4276A67954E4E59D7446'"/>
</Relationships>
</Item>
</AML>
</ApplyAML>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
'''
aml=aml.encode("utf-8")
## headerがいつもと違う ##
headerAML={"Authorization":"Bearer " + token.access_token,
"Content-type":"text/xml; charset=UTF-8",
"Soapaction":"ApplyAML"
}
tmp1=requests.post("http://192.168.0.101/InnovatorServer/Server/InnovatorServer.aspx",
headers=headerAML, data=aml)
## ここで実行結果をチェック ##
tmp1.text

ちなみにちょっと失敗するとデータベース壊れるので注意
例えば、requestでdeleteを直接指定するとダメです。
postのdataにAMLを渡すのです。
どうやって発見?
そもそも標準機能であるし、
AMLをAPIとして扱う記載がWEB上にあったので
やりとりを解析
以下画像


すると、色々な情報が分かります。

何を添えてポストするのかは以下を見る。

のでポストでこれをそのまま送れば理屈上リレーションの削除が出来るはずです。
以下はコピペ
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" >
<SOAP-ENV:Body><ApplyItem>
<Item type="Test_Item_katsu" typeId="68B846AC5C3D45D497602BD935150C66" id="208D096EF5C6415AAE848E49E965BD4F" loadedPartialy="0" isEditState="1" action="update" isDirty="1" LastModifiedOn="1732628019519">
<config_id keyed_name="あいうえお" type="Test_Item_katsu">208D096EF5C6415AAE848E49E965BD4F</config_id>
<created_by_id keyed_name="Innovator Admin" type="User">30B991F927274FA3829655F50C99472E</created_by_id>
<created_on>2022-12-07T21:45:01</created_on>
<filterlist>2001</filterlist>
<generation>1</generation>
<id keyed_name="あいうえお" type="Test_Item_katsu">208D096EF5C6415AAE848E49E965BD4F</id>
<is_current>1</is_current>
<is_released>0</is_released>
<item_foreighn>001</item_foreighn>
<item_item keyed_name="aeiou" type="Test_Item_katsu">E9EAB55118714958930B5931C20ACB35</item_item>
<keyed_name>あいうえお</keyed_name>
<list>001</list><locked_by_id keyed_name="Innovator Admin" type="User">30B991F927274FA3829655F50C99472E</locked_by_id>
<major_rev>A</major_rev>
<modified_by_id keyed_name="Innovator Admin" type="User">30B991F927274FA3829655F50C99472E</modified_by_id>
<modified_on>2024-11-26T22:33:29</modified_on>
<new_version>1</new_version>
<not_lockable>0</not_lockable>
<name>あいうえお</name>
<Relationships><Item type="Test_Item_katsu_Test_" typeId="08929227E6A24FE0A5ACF9BC5421FF25" id="E7339EBC5AA04D37903802DA847D881D" action="delete"/></Relationships>
<fed_css/></Item>
</ApplyItem></SOAP-ENV:Body></SOAP-ENV:Envelope>
このうち重要なコードだけ抜き出すと
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" >
<SOAP-ENV:Body>
<ApplyItem>
<Item type="Test_Item_katsu"
id="208D096EF5C6415AAE848E49E965BD4F" action="update">
<Relationships>
<Item type="Test_Item_katsu_Test_"
id="E7339EBC5AA04D37903802DA847D881D"
action="delete"/>
</Relationships>
</Item>
</ApplyItem>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
これをpostしたのが前にやったことである。実際はちょっと違うが、、、
あと、headerも一工夫したがもはややり方は忘れた。
おしまい
ブログに投げ銭機能つけたいな


コメント