ARAS API リレーション削除

会社技術

はじめに

この件、中々調べても出てこず困った人いそうなやつ
英語での掲示板を見かけたが、明確な回答なかったのでアクセスアップ狙いで書く!

何やるの?

以下のようにやればおけい

## まずはリレーションシップアイテムの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

消すのは黄色のIDでなく、緑のIDの方だ

ちなみにちょっと失敗するとデータベース壊れるので注意
例えば、requestでdeleteを直接指定するとダメです。
postのdataにAMLを渡すのです。

どうやって発見?

そもそも標準機能であるし、
AMLをAPIとして扱う記載がWEB上にあったので
やりとりを解析

以下画像

削除します
やりとりを覗きます

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

このアドレスにポストすればよいのかと分かります

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

payloadを見るとAMLで色々書いています。

のでポストでこれをそのまま送れば理屈上リレーションの削除が出来るはずです。
以下はコピペ

<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も一工夫したがもはややり方は忘れた。

おしまい

ブログに投げ銭機能つけたいな

コメント