SAP IntegrationSuite Cloud Integration編

# Cloud Integrationの概要
フローを作成することで連携を実現するプロセス連携サービス
データ連携やWorkflow連携は別サービスであるので使い分けが必要

:::note info

ネットやSAPのコミュニティブログで検索する際は **HCI（SAP HANA CLOUD INTEGRATION）** や **CPI（SAP CLOUD PLATFORM INTEGRATION）** で検索すると古い情報が出てくる（旧名称）
HCIは古すぎてさすがに参考にならないかもしれないが知っておくと便利

:::
# チュートリアル
https://developers.sap.com/mission.cp-starter-integration-cpi.html

# ベストプラクティス
命名規約などの開発ルールの参考

https://community.sap.com/t5/technology-blogs-by-members/comprehensive-sap-cpi-guide-for-standards-best-practices/ba-p/13457873

# 実装における参考資料
実装は**ODataでS/4HANAからデータ取得するフローを作ろう！** とかやるとユースケースが多すぎるので参考にしたブログなどを紹介します
詰まりそうなポイントは文字でフォロー入れます

## 共通：Configured Valueの設定
設定によって変えたい値や何度も使う値をConfigured Valueとして設定する
例えば接続情報や起動タイミングなど

https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/external-properties-and-their-value-in-cpi-development-and-change/ba-p/12821372

## コネクタ・連携方式別
### OData
認証がBasicの場合などはモニター画面から接続情報（IDとパスワード）を任意の名前つけて作ってそれを指定してください

https://qiita.com/tami/items/3f4a51d80ff7acd83ce5

https://qiita.com/tami/items/c40104ecad4c58d2953b

SAP ODataの既知の制限など
V4とV2それぞれあります

https://me.sap.com/notes/2428114

### IDoc
IDocは非同期通信のためOutbound（S/4HANA→BTP）とInbound（BTP→S/4HANA）の設定方法がそれぞれ異なります

:::note info
上記のOutbound、Inbound逆じゃね？って感じる方もいるかも知れないですが、SAPの世界では主体はS/4HANAです
通信方式も異なり、OutboundはSOUP APIとしてBTPのエンドポイントを呼び出してもらいますが、InboundではCloudConnector経由でデータを送ります
:::

#### Outbound
https://blogs.sap.com/2021/01/14/send-idoc-from-abap-trail-version-npl-to-cloud-platform-integration/
#### Inbound 
https://blogs.sap.com/2021/01/17/send-idoc-from-cloud-platform-integration-to-ecc-inbound-part2/

#### IDocのデータのダウンロード方法
https://sapzero2hero.com/2019/09/18/idoc-download-idoc-to-xml/

### RFC
RFCの接続情報（IDとパスワード）はBTPのコクピット画面のCloudコネクターのところで指定
場所を統一してほしい(^o^)

https://blogs.sap.com/2021/05/18/sap-cpi-rfc-adapter-iflow/

https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/calling-a-bapi-in-an-sap-on-premise-system-from-the-cloud/ba-p/13398495

### SFTP・FTP

SFTPとFTPの設定の方法はほぼ一緒でSSH接続用のHOSTファイルの設定の有無のみの認識です

https://blogs.sap.com/2021/09/23/configuration-of-ftp-and-sftp-adapter-in-cloud-integrationcpi/

### JDBC
HANA DBとPostgreSQL以外は外部サイトからJDBCドライバーをダウンロードしてモニター画面からアップロードする必要があります
BTP上のJavaのバージョンが8だからかOracleは8関連のJDBCが必要になります
DB2は最新で動きました


#### SQL Server
https://blogs.sap.com/2021/09/14/sap-cloud-integration-cpi-hci-jdbc-adapter-everything-you-need-to-know./

#### Oracle
https://blogs.sap.com/2021/09/30/sap-cloud-integration-cpi-jdbc-adapter-step-by-step-guide-pre-requisites-and-configuration-jdbc-batch-insert-cpi/

#### JDBC その他
JDBCで実行するSQLは普通のSQLとSQLをXML形式に変換したものがサポートされています
詳しくは下記を参考ください
SQLで使えるものも違いあります

3047564 - What to check for in CPI JDBC connectivity with Oracle DB when an error occurs

https://launchpad.support.sap.com/#/notes/3047564

3073748 - FAQ: JDBC adapter in SAP Cloud Integration

https://launchpad.support.sap.com/#/notes/3073748

3140854 - Unable to upload ORACLE jdbc driver due 'jdbc driver null' error

https://launchpad.support.sap.com/#/notes/3140854

### Open Connector

SnowflakeをOpen Connectorに登録してCloudIntegrationから呼び出す

https://community.sap.com/t5/technology-blogs-by-members/snowflake-falling-from-sap-cloud-cpi-integration-with-snowflake-with/ba-p/13434910

なぜかAdapterの認証欄に認証情報入れてもうまくいかずヘッダーに変数を作って登録したらうまくいった

https://community.sap.com/t5/technology-q-a/sap-open-connectors-integration-flow-error-invalid-user-or-organization/qaq-p/12535160


## 変換処理・マッピング

### XSLT

https://www.acorel.nl/2021/11/use-xslt-to-make-like-a-tree-and-nest/

### マッピング処理

マッピングファイル(.mmap)内で処理の作成方法

https://community.sap.com/t5/technology-blogs-by-members/sap-cloud-platform-integration-cpi-use-cases-of-node-functions-in-message/ba-p/13444244

https://blogs.sap.com/2018/04/26/sap-cloud-platform-integration-multi-mapping-in-message-mapping/

https://blogs.sap.com/2021/06/17/sap-cloud-integration-message-mapping-as-artifact/


### Simple expression
Cloud Integration内で使える関数みたいなもの
時間を現在日時を取得したり出来る

:::note info
これよりも複雑な処理をしたい場合はGroovy、JSなどをサポートしてるのでそちらで対応
:::

https://community.sap.com/t5/technology-blogs-by-members/get-to-know-camel-s-simple-expression-language-in-sap-cloud-integration/ba-p/13292822

https://community.sap.com/t5/technology-blogs-by-members/a-closer-look-at-the-camelcontext/ba-p/13306641

https://help.sap.com/docs/cloud-integration/sap-cloud-integration/using-camel-simple-expression-language

https://community.sap.com/t5/technology-blogs-by-sap/sap-integration-suite-deep-dive-into-content-modifier/ba-p/13511841

### 外部jarの活用など
Groovy（Javaのスクリプト言語みたいなもの）ではjarファイルをインポートすることが出来ます
あまり推奨された方法ではないと思いますが、Resourcesタブにファイルをアップロードすることで使用可能です
このブログ書いてる時点ではJavaのバージョンは8です

https://community.sap.com/t5/technology-q-a/using-external-jars-in-cpi-groovy-script/qaq-p/12452820


## 参考：XMLからスキーマーファイルの作成
:::note info
マッピングなどで登録するにはXMLのスキーマーファイル（XMLの型情報みたいなもの）を登録する必要があります
下記のサイトにXMLデータを流すとスキーマーファイルを作成してくれます
:::

https://www.convertsimple.com/convert-xml-to-xsd-xml-schema/

## 参考：移送関連
Cloud Integrationで作成したフローを別のサブアカウントへ移動する方法はないかと思って探した結果出てきたブログ
試してないのでわからない

https://community.sap.com/t5/technology-blogs-by-members/content-transport-using-sap-cloud-platform-transport-management-service-in/ba-p/13480868