Microsoft Universal Print 与 SAP 集成教程
引言
从 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 和存储帐户的访问权限。
部署后端打印解决方案
1. 从 Azure 门户中打开 Azure Cloud Shell (Powershell)。
2. 在 Cloud Shell 编辑器中创建新文件。将以下脚本复制并粘贴到其中,并使用 ps1 扩展名保存(例如:setup.ps1)。保存文件后,您可以单击刷新按钮并在根目录上找到该文件。打开文件,然后调整参数(说明如下),使其适合你的 SAP 环境。
$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_PATHGet-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 $scriptPathInvoke-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 | 字符串 | “/家/约翰” |
3. 在 PowerShell 上,执行命令:
./setup.ps1
4. 脚本执行完毕后,您将在您的 Azure 订阅中整齐地部署了控制面板和后端打印工作者。
授权 API 连接到 Universal Print
5. 跳转到 Azure 门户中的工作负载平面资源组。
6. 找到 API 连接资源并点击“编辑 API 连接”按钮。
7. 点击“授权”以与 Universal Print API 建立连接。弹出窗口关闭后,记得点击“保存”按钮以保存授权连接。
将 SAP 打印队列配置添加到函数应用
8. 打开函数应用并在概览屏幕上找到验证器函数。
9. 点击“代码 + 测试”。
10. 点击“测试/运行”按钮。
11. 在正文部分,放入下面提供的 JSON 负载并按“运行”。如果你看到一个愉快的“200 OK”响应代码,你就准备好了!如果不是,错误信息将为你提供修复任何小问题的线索。
通过 Powershell 或图形 API 从 Azure 门户获取打印机共享 ID。

通过重复上述配置步骤添加更多队列或 SAP 环境。
{"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 上找到。
- 如果您希望集成特殊标签打印机,请参阅相关文档。
相关文章:
Microsoft Universal Print 与 SAP 集成教程
引言 从 SAP 环境打印是许多客户的要求。例如数据列表打印、批量打印或标签打印。此类生产和批量打印方案通常使用专用硬件、驱动程序和打印解决方案来解决。 Microsoft Universal Print 是一种基于云的打印解决方案,它允许组织以集中化的方式管理打印机和打印机驱…...
VBA在Excel中字母、数字的相互转化
VBA在Excel中字母、数字的相互转化 字母转数字的方法 数字转字母的方法 众所周知,Excel表中的行以数字展示,列用字母展示,如下图: 编程时,很多时候需要将列的字母转变为数字使用,如cells(num1,num2).value等,不知大家是怎么将字母转化为数字的,Excel是否有其他方式…...
【C语言】——联合体与枚举
【C语言】——联合体与枚举 一、联合体1.1、联合体类型的声明1.2、联合体的特点1.3、相同成员的结构体和联合体对比1.4、联合体的大小计算1.5、联合体的应用举例 二、枚举2.1、枚举类型的声明2.2、枚举类型的优点 一、联合体 1.1、联合体类型的声明 联合体也叫做共用体 与…...
java线上问题排查之内存分析(三)
java线上问题排查之内存分析 使用top命令 top命令显示的结果列表中,会看到%MEM这一列,这里可以看到你的进程可能对内存的使用率特别高。以查看正在运行的进程和系统负载信息,包括cpu负载、内存使用、各个进程所占系统资源等。 2.用jstat命令…...
中电金信:金Gien乐道 | 4月要闻速览,精彩再回顾
中国电子党组副书记、总经理李立功一行调研中电金信 4月10日,中国电子党组副书记、总经理李立功一行赴中电金信进行调研,深入听取了中电金信经营发展情况、研发工作及“源启”行业数字底座平台的汇报,并参观了公司展厅和科技研发场所…...
Java将文件目录转成树结构
在实际开发中经常会遇到返回树形结构的场景,特别是在处理文件系统或者是文件管理系统中。下面就介绍一下怎么将文件路径转成需要的树形结构。 在Java中,将List<String>转换成树状结构,需要定义一个树节点类(TreeNode&#…...
硬件工程师必读:10条职业发展黄金法则!
在快速发展的科技时代,硬件工程师作为推动技术创新和产业升级的重要力量,其职业发展之路既充满挑战也蕴含无限机遇。为了在这条道路上稳步前行,我们首先需要了解硬件产品的研发流程。 在这个过程中,公司内的每个岗位都发挥着不可或…...
Redis是什么? 日常运维 Redis 需要注意什么 ? 怎么降低Redis 内存使用 节省内存?
你的项目或许已经使用 Redis 很长时间了,但在使用过程中,你可能还会或多或少地遇到以下问题: 我的 Redis 内存为什么增长这么快?为什么我的 Redis 操作延迟变大了?如何降低 Redis 故障发生的频率?日常运维…...
【Android项目】“追茶到底”项目介绍
没有多的介绍,这里只是展示我的项目效果,后面会给出具体的代码实现。 一、用户模块 1、注册(第一次登陆的话需要先注册账号) 2、登陆(具有记住最近登录用户功能) 二、点单模块 1、展示饮品列表 2、双向联动…...
机试:进制转换问题
十进制转任意进制 简单回忆一下十进制我们是怎么转换成二进制的(短除法): 我们会将十进制数不断的进行除2操作,并且记录下每一次的余数(这个余数就是我们最终求的二进制数的组成部分)。 以下以12D举例&a…...
目标检测实战(十五): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
文章目录 一、目标检测介绍二、YOLOv7介绍三、源码/论文获取四、环境搭建4.1 环境检测 五、数据集准备六、 模型训练七、模型验证八、模型测试九、错误总结9.1 错误1-numpy jas mp attribute int9.2 错误2-测试代码未能跑出检测框9.3 错误3- Command git tag returned non-zero…...
github中fasttext库README官文文档翻译
参考链接:fastText/python/README.md at main facebookresearch/fastText (github.com) fastText模块介绍 fastText 是一个用于高效学习单词表述和句子分类的库。在本文档中,我们将介绍如何在 python 中使用 fastText。 环境要求 fastText 可在现代 …...
WouoUIPagePC端实现
WouoUIPagePC端实现 WouoUIPage是一个与硬件平台无关,纯C语言的UI库(目前只能应用于128*64的单色OLED屏幕上,后期会改进,支持更多尺寸)。因此,我们可以在PC上实现它,本文就以在PC上使用 VScode…...
W801学习笔记十九:古诗学习应用——下
经过前两章的内容,背唐诗的功能基本可以使用了。然而,仅有一种模式未免显得过于单一。因此,在本章中对其进行扩展,增加几种不同的玩法,并且这几种玩法将采用完全不同的判断方式。 玩法一:三分钟限时挑战—…...
类加载器ClassLoad-jdk1.8
类加载器ClassLoad-jdk1.8 1. 类加载器的作用2. 类加载器的种类(JDK8)3. jvm内置类加载器如何搜索加载类--双亲委派模型4. 如何打破双亲委派模型--自定义类加载器5. 自定义一个类加载器5.1 为什么需要自定义类加载器5.2 自定义一个类加载器 6. java代码加…...
24年最新AI数字人简单混剪
24年最新AI数字人简单混剪 网盘自动获取 链接:https://pan.baidu.com/s/1lpzKPim76qettahxvxtjaQ?pwd0b8x 提取码:0b8x...
免备案香港主机会影响网站收录?
免备案香港主机会影响网站收录?前几天遇到一个做电子商务的朋友说到这个使用免备案香港主机的完整会不会影响网站的收录问题,这个问题也是站长关注较多的问题之一。小编查阅了百度官方规则说明,应该属于比较全面的。下面小编给大家介绍一下使用免备案香…...
低代码工业组态数字孪生平台
2024 两会热词「新质生产力」凭借其主要特征——高科技、高效能及高质量,引发各界关注。在探索构建新质生产力的重要议题中,数据要素被视为土地、劳动力、资本和技术之后的第五大生产要素。数据要素赋能新质生产力发展主要体现为:生产力由生产…...
代码随想录第三十八天(完全背包问题)|爬楼梯(第八期模拟笔试)|零钱兑换|完全平方数
爬楼梯(第八期模拟笔试) 该题也是昨天的完全背包排列问题,解法相同,将遍历顺序进行调换 import java.util.*; public class Main{public static void main (String[] args) {Scanner scnew Scanner(System.in);int nsc.nextInt(…...
idea常用知识点随记
idea常用知识点随记 1. 打开idea隐藏的commit窗口2. idea中拉取Git分支代码3. idea提示代码报错,项目编译没有报错4. idea中实体类自动生成序列号5. idea隐藏当前分支未commit代码6. idea拉取新建分支的方法 1. 打开idea隐藏的commit窗口 idea左上角File→Settings…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...
VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...
