引言
从 SAP 环境打印是许多客户的要求。例如数据列表打印、批量打印或标签打印。此类生产和批量打印方案通常使用专用硬件、驱动程序和打印解决方案来解决。
Microsoft Universal Print 是一种基于云的打印解决方案,它允许组织以集中化的方式管理打印机和打印机驱动程序。通过与 SAP 集成,用户可以简化打印流程,减少设备管理开销,并消除对打印驱动程序的需求。
前端打印 (Frontend Printing)
前端打印指的是通过 SAP GUI、Web 浏览器或基于 Web 的 SAP 前端应用程序进行的用户打印操作。
准备工作
在开始之前,请确保您已经拥有以下条件:
- 有效的 Microsoft 365 订阅,包含Universal Print功能。
- 访问您的 SAP 系统 的权限。
- 与SAP系统兼容的打印机,已连接到网络。
步骤 1: 配置 Microsoft Universal Print
- 登录到 Microsoft 365 管理中心。
- 导航到 " 设置" > "Universal Print"。
- 添加并注册您的打印机。
- 分配 打印机权限 给需要打印的用户。
步骤 2: 在 SAP 中配置打印机
- 登录到您的 SAP 系统。
- 打开 SPAD 打印机配置工具。
- 创建一个新的打印机队列,选择 " 远程打印机"。
- 输入通过Universal Print注册的打印机的详细信息。
步骤 3: 管理打印作业
- 在SAP中发送打印作业。
- 使用 Microsoft 365 管理中心 监控打印作业状态。
- 如有需要,可暂停、取消或重新排列打印作业。
后端打印 (Backend Printing)
后端打印指的是由应用程序而非用户发起的无人值守的批量打印作业。
前提条件
- Azure Entra ID 租户 ID
- Azure 订阅 ID
- Microsoft Universal Print 许可证
- 至少一个在 Microsoft Universal Print 中注册的物理打印机
- SAP NetWeaver:最低 SAP_BASIS 发布 7.57 或以上版本
- SAP Print Queue Management:在 SAP 中激活此功能
- 授权的 SAP 用户:有权生成和监督假脱机请求和打印队列的个人
集成方案设计
配置后端打印解决方案:
后端打印解决方案运行得就像一个润滑良好的机器,有两个主要组件和谐地工作:
- **部署基础设施(控制面板):**可以将其想象为乐队的指挥,监督设置并确保打印过程的所有部分都调整得恰到好处,随时准备行动。
- **后端打印工作者(工作负载面板):**这是团队中的音乐家,勤奋地阅读乐谱(假脱机请求)并精确小心地演奏音符(发送打印作业)给 Universal Print 设备。
控制面板
控制面板主要负责管理后端打印辅助角色和 Azure 资源的基础结构状态。控制面板使用安装脚本进行部署,由以下组件组成:
- 持久性存储:所有 Terraform 状态文件的安全位置,可跟踪基础结构的蓝图。
- Container Registry:一个数字库,用于存储后端打印工作线程的映像,随时可以部署。
工作负载面板
工作负载面板是执行操作的位置。这一切都与处理这些打印作业有关,并且是使用 Terraform 设置的。以下是它的内容:
- 应用服务计划和函数应用:后端打印辅助角色执行的阶段。
- Application Insights:一个可选但敏锐的观察者,用于监视后端打印工作人员的性能。
- Key Vault:用于存储所有机密和敏感信息的安全保管库。
- 存储帐户:用于管理打印作业的仓库。
- 逻辑应用和自定义连接器:确保打印作业传送到通用打印设备的信使。
- API 连接:将逻辑应用连接到通用打印 API 的网桥。
- 托管标识:函数应用的后台阶段阶段,授予对 Key Vault 和存储帐户的访问权限。
部署后端打印解决方案
-
从 Azure 门户中打开 Azure Cloud Shell (Powershell)。
-
在 Cloud Shell 编辑器中创建新文件。将以下脚本复制并粘贴到其中,并使用 ps1 扩展名保存(例如:setup.ps1)。保存文件后,您可以单击刷新按钮并在根目录上找到该文件。打开文件,然后调整参数(说明如下),使其适合你的 SAP 环境。
bash
$Env:CONTROL_PLANE_ENVIRONMENT_CODE="CTRL"
$Env:WORKLOAD_ENVIRONMENT_CODE="TEST"
$Env:LOCATION=""
$Env:ENTRA_ID_TENANT_ID = ""
$Env:AZURE_SUBSCRIPTION_ID = ""
$Env:SAP_VIRTUAL_NETWORK_ID = ""
$Env:BGPRINT_SUBNET_ADDRESS_PREFIX = ""
$Env:ENABLE_LOGGING_ON_FUNCTION_APP = "false"
$Env:CONTAINER_REGISTRY_NAME = ""
$Env:HOMEDRIVE = ""
$UniqueIdentifier = Read-Host "Please provide an identifier that makes the service principal names unique, for example (MGMT/CTRL)"
$confirmation = Read-Host "Do you want to create a new Application registration for Control Plane y/n?"
if ($confirmation -eq 'y') {
$Env:CONTROL_PLANE_SERVICE_PRINCIPAL_NAME = $UniqueIdentifier + "-SAP-PRINT-APP"
}
else {
$Env:CONTROL_PLANE_SERVICE_PRINCIPAL_NAME = Read-Host "Please provide the Application registration name"
}
$ENV:SAPPRINT_PATH = Join-Path -Path $Env:HOMEDRIVE -ChildPath "SAP-PRINT"
if (-not (Test-Path -Path $ENV:SAPPRINT_PATH)) {
New-Item -Path $ENV:SAPPRINT_PATH -Type Directory | Out-Null
}
Set-Location -Path $ENV:SAPPRINT_PATH
Get-ChildItem -Path $ENV:SAPPRINT_PATH -Recurse | Remove-Item -Force -Recurse
$scriptUrl = "https://raw.githubusercontent.com/Azure/universal-print-for-sap-starter-pack/main/deployer/scripts/install_backend_printing.ps1"
$scriptPath = Join-Path -Path $ENV:SAPPRINT_PATH -ChildPath "install_backend_printing.ps1"
Invoke-WebRequest -Uri $scriptUrl -OutFile $scriptPath
Invoke-Expression -Command $scriptPath
脚本参数
|------------------------------------|----------------------------------------------------------|--------|----------------------------------------|
| 名字 | 描述 | 类型 | 例 |
| CONTROL_PLANE_ENVIRONMENT_CODE | 控制平面环境代码用于为控制平面资源创建唯一名称。 | 字符串 | "CTRL", "管理" |
| WORKLOAD_ENVIRONMENT_CODE | 工作负载环境名称用于为工作负载资源创建唯一名称 | 字符串 | "PROD"、"TEST"、"DEV" |
| ENTRA_ID_TENANT_ID | Entra ID 租户 ID | 字符串 | "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" |
| AZURE_SUBSCRIPTION_ID | Azure Subcription ID | 字符串 | "yyyy-yyyy-yy-yy |
| SAP_VIRTUAL_NETWORK_ID | 部署了 SAP 系统的虚拟网络的资源 ID。 | 字符串 | |
| BGPRINT_SUBNET_ADDRESS_PREFIX | 将在其中部署后端打印服务的子网的地址前缀 | 字符串 | "10.10.10.10/25" |
| ENABLE_LOGGING_ON_FUNCTION_APP | 在 Azure 函数应用上启用日志记录 | 布尔字符串 | "真"/"假" |
| 家庭驱动器 | Azure 用户的驱动器。这是你在 Azure Cloud Shell 中看到的位置。示例:/home/john | 字符串 | "/家/约翰" |
- 在 PowerShell 上,执行命令:
bash
./setup.ps1
- 脚本执行完毕后,您将在您的 Azure 订阅中整齐地部署了控制面板和后端打印工作者。
授权 API 连接到 Universal Print
-
跳转到 Azure 门户中的工作负载平面资源组。
-
找到 API 连接资源并点击"编辑 API 连接"按钮。
-
点击"授权"以与 Universal Print API 建立连接。弹出窗口关闭后,记得点击"保存"按钮以保存授权连接。
将 SAP 打印队列配置添加到函数应用
-
打开函数应用并在概览屏幕上找到验证器函数。
-
点击"代码 + 测试"。
-
点击"测试/运行"按钮。
-
在正文部分,放入下面提供的 JSON 负载并按"运行"。如果你看到一个愉快的"200 OK"响应代码,你就准备好了!如果不是,错误信息将为你提供修复任何小问题的线索。
通过 Powershell 或图形 API 从 Azure 门户获取打印机共享 ID。
通过重复上述配置步骤添加更多队列或 SAP 环境。
bash
{
"sap_environment" : "PROD",
"sap_sid": "SID",
"sap_hostname": "http://10.186.102.6:8001",
"sap_user": "sapuser",
"sap_password": "sappassword",
"sap_print_queues": [
{
"queue_name":"ZQ1",
"print_share_id": "12345678-1234-1234-1234-123456789012"
},
{
"queue_name":"ZQ2",
"print_share_id": "12345678-1234-1234-1234-123456789012"
}
]
}
附录
- 部署指南、SAP 特定 FAQ 和社区讨论可在GitHub上找到。
- 通用打印的一般 FAQ 可在 Microsoft Learn 上找到。
- 如果您希望集成特殊标签打印机,请参阅相关文档。