Files
c4c-download/README.md

3.1 KiB
Raw Blame History

SAP C4C 附件批量下载工具

从 SAP C4C 下载 Ticket 附件并上传到群晖 DSM。


环境要求

  • Python >= 3.8
  • Ubuntu 20.04+ 或 macOS

安装

pip install -r requirements.txt
python -m playwright install chromium
# Ubuntu 需额外执行(需要 sudo
python -m playwright install-deps chromium

文件说明

文件 说明
sap-c4c-AttachmentFolder.py 核心下载脚本,支持单个 Ticket 下载
batch_download.py 批量下载脚本,从 CSV 读取 ID 并行执行
get_ticket_ids.py 从 CSV 提取 Ticket ID 工具
datasource/ 存放 SAP Analytics 导出的 CSV 文件
downloads/ 本地临时下载目录(上传 DSM 后自动清理)
error_log.txt 错误日志,每次批量运行时重置
failed_tickets.csv 失败的 Ticket ID 列表,可用于下次重试

单个 Ticket 下载

python sap-c4c-AttachmentFolder.py \
  --tenant https://my300375.c4c.saphybriscloud.cn \
  --user admin \
  --password 'your_password' \
  --ticket 20950 \
  --output-dir ./downloads

同时上传到群晖 DSM

python sap-c4c-AttachmentFolder.py \
  --tenant https://my300375.c4c.saphybriscloud.cn \
  --user admin \
  --password 'your_password' \
  --ticket 20950 \
  --output-dir ./downloads \
  --dsm-url http://10.0.10.235:5000 \
  --dsm-user PLM \
  --dsm-password 'dsm_password' \
  --dsm-path /Newgonow/AU-SPFJ

仅列出附件不下载

python sap-c4c-AttachmentFolder.py ... --list-only

JSON 输出模式

python sap-c4c-AttachmentFolder.py ... --json

批量下载

将 SAP Analytics 导出的 CSV 文件放入 datasource/ 目录,然后运行:

python batch_download.py
  • 读取 datasource 目录下 CSV/xlsx 的第二列,获取所有 Ticket ID
  • 最多 5 个任务并行执行
  • 每个 Ticket 使用独立子目录 downloads/{ticket_id},避免并行冲突
  • 上传 DSM 完成后自动清理本地文件和子目录
  • 错误记录到 error_log.txt,失败的 Ticket ID 保存到 failed_tickets.csv

重试失败的 Ticket

将上一次运行生成的 failed_tickets.csv 移动到 datasource/ 目录,然后重新运行:

mv failed_tickets.csv datasource/
python batch_download.py

修改并行数或 Ticket 数量

编辑 batch_download.py 顶部配置:

WORKERS = 5   # 并行数
# get_ticket_ids(10) 中的 10 为读取数量

DSM 目录结构

上传后文件按以下结构组织:

{dsm_path}/
└── {ticket_id}_{serial_id}/
    └── {issue_id}_{issue_description}/
        └── 附件文件

Quote & Chassis 类型的附件会同时复制到所有其他 issue 目录下。


环境变量(可选)

也可通过环境变量代替命令行参数:

环境变量 对应参数
C4C_TENANT --tenant
C4C_USERNAME --user
C4C_PASSWORD --password
DSM_URL --dsm-url
DSM_USERNAME --dsm-user
DSM_PASSWORD --dsm-password
DSM_PATH --dsm-path