> For AI agents: the complete documentation index is available at /resource/ucidm/docs/on-premise/dev/llms.txt, the full documentation bundle is available at /resource/ucidm/docs/on-premise/dev/llms-full.txt.

# 外部連携の前処理/後処理で実行するスクリプトの配置 \{#destination-script-placement}

各外部連携処理の前後で任意のシェルスクリプトを実行することができます。

シェルスクリプトには、第一引数に以下の情報が渡されます。

```
{
    "DN": "uid=ucidmldaptest1,ou=users,dc=srcldap,dc=com",
    "Attributes": {
        "cn": ["UCIDMTest1"],
        "givenname": ["Taro"],
        "mail": ["ucidmtest1@example.com"],
        ...
    },
    "Password": "password",
    "Member": {
        "primaryID": "ucidm-5-csvtestuser101",
        "entry": {
            "dn": "uid=csvtestuser101,ou=users,dc=srcldap2,dc=example,dc=com",
            "attributes": {
                "cn": ["test101-cn"],
                "description": ["test101-desc"],
                "givenname": ["test101-given"],
                ...
            }
        }
    },
    "ExecutionResult": {
        "Operation": "update",
        "IsSkip": false,
        "DryRun": false,
        "Message": "",
        "Mapped": {
            "DN": "uid=ucidmldaptest1,ou=people,dc=example,dc=com",
            "Attr": {
                "cn": ["UCIDMTest1"],
                "givenName": ["Taro"],
                "sn": ["Test"],
                "objectclass": ["top", "inetOrgPerson"],
                ...
            },
            "Diffs": [
                {
                    "sourceNames": ["sn"],
                    "destinationName": "sn",
                    "sourceValue": ["Test"],
                    "previousValue": ["OldTest"],
                    "currentValue": ["Test"]
                },
                ...
            ],
            "OpeType": 2
        },
        "AttrDiffs": [
            {
                "sourceNames": ["sn"],
                "destinationName": "sn",
                "sourceValue": ["Test"],
                "previousValue": ["OldTest"],
                "currentValue": ["Test"]
            },
            ...
        ],
        "SubjectPrimaryValue": "uid=ucidmldaptest1,ou=people,dc=example,dc=com",
        "MemberPrimaryValue": "",
        "Extra": null
    }
}
```

- DN: UCIDM に連携されてきたエントリの DN 情報
- Attributes: UCIDM に連携されてきたエントリの属性名と属性値の情報
- Password: ユーザーパスワード更新時に、ENABLE_SCRIPT_PASSWORD の環境変数が true に設定されている場合のみシェルスクリプトにて取得可能で、更新されたパスワードの情報が入っている
- Member: グループメンバー追加/削除時にのみシェルスクリプトで取得可能で、グループのメンバーエントリの情報が入っている
- ExecutionResult: 外部連携処理の後に呼ばれるシェルスクリプトのみで取得可能で、連携の実行結果に関する情報が入っている
  - Operation: 実行された操作種別（`"create"` / `"update"` / `"password"` / `"delete"` など）
  - IsSkip: 更新操作がスキップされた場合に `true` となる
  - DryRun: ドライランモードであれば `true` となる
  - Message: スキップ理由や補足情報の文字列があれば入る
  - Mapped: 属性マッピング適用後のエントリ情報
  - AttrDiffs: 連携前後の属性値の差分情報
  - SubjectPrimaryValue: 操作対象エントリの識別値
  - MemberPrimaryValue: グループメンバー操作時の、メンバー側エントリの識別値
  - Extra: 上記フィールドに収まらない追加情報を格納する汎用マップ

シェルスクリプトにおける終了コード 0 以外はエラーとして UCIDM で処理されます。

シェルスクリプトは、各処理種別ごとに、以下のディレクトリ上に格納する必要があります。また、スクリプトファイルには実行権限をつける必要があります。

- ユーザ追加
  - /var/opt/osstech/lib/ucidm/server-data/destination/`{DESTINATION_ID}`/scripts/UserAdded/
- ユーザ更新
  - /var/opt/osstech/lib/ucidm/server-data/destination/`{DESTINATION_ID}`/scripts/UserModified/
- ユーザ削除
  - /var/opt/osstech/lib/ucidm/server-data/destination/`{DESTINATION_ID}`/scripts/UserDeleted/
- ユーザパスワード追加
  - /var/opt/osstech/lib/ucidm/server-data/destination/`{DESTINATION_ID}`/scripts/UserPasswordAdded/
- ユーザパスワード更新
  - /var/opt/osstech/lib/ucidm/server-data/destination/`{DESTINATION_ID}`/scripts/UserPasswordModified/
- グループ追加
  - /var/opt/osstech/lib/ucidm/server-data/destination/`{DESTINATION_ID}`/scripts/GroupAdded/
- グループ更新
  - /var/opt/osstech/lib/ucidm/server-data/destination/`{DESTINATION_ID}`/scripts/GroupModified/
- グループ削除
  - /var/opt/osstech/lib/ucidm/server-data/destination/`{DESTINATION_ID}`/scripts/GroupDeleted/
- グループメンバー追加
  - /var/opt/osstech/lib/ucidm/server-data/destination/`{DESTINATION_ID}`/scripts/GroupMemberAdded/
- グループメンバー削除
  - /var/opt/osstech/lib/ucidm/server-data/destination/`{DESTINATION_ID}`/scripts/GroupMemberDeleted/

上記ディレクトリ上にシェルスクリプトを配置することで、外部連携設定画面にて、シェルスクリプトの指定が可能になります。

外部連携設定画面での設定については、以下のページをご参照ください。

[外部連携の前処理/後処理で実行するスクリプトの設定](/resource/ucidm/docs/on-premise/dev/administration/admin-ui/scriptsettings.md)
