
【场景】单据审核后调用附件列表的文件打印
【概念描述】
星空服务器:对应IIS中部署K3Cloud的机器,
打印服务:一个自实现的一个程序或者服务,只需要保证能够直连打印机
打印机:物理打印机
【方案】
<1>方案一:审核后立刻通知打印

方案细节:
a)对应<1>,在单据审核操作,操作服务插件,事务外根据成功的数据包,发送消息到打印服务,通知打印哪个业务对象的哪个单据的附件,
其中该消息接口是自定义的,需要自行实现
b)打印服务收到请求后直接返回,避免长连接;
c)对应<2>,根据收到的表单标识和单据内码,通过星空webapi查找获取附件的文件内码和文件大小
参考:[二开案例.WebApi.单据查询.附件明细](https://vip.kingdee.com/article/345202166132162304?productLineId=1&isKnowledge=2)
d)对应<3>,根据查询得到的文件内码,调用星空webapi进行文件下载,要求版本2022-03-31及之后
参考:[webapi附件下载](https://vip.kingdee.com/article/296577252589190400?productLineId=1&isKnowledge=2)
e)对应<4>,根据文件分块组件成文件,而后直接在本地调用文件打印;需要自行实现
方案优点:
审核后立刻通知打印,响应快速
方案缺陷:
a)通知仅一次,当打印服务异常没有收到消息后不会再打印
b)要求打印服务能够被星空服务器访问,如果是公有云部署的星空,则打印服务无法使用内网ip简单发送消息(需要公网ip或者服务器)
c)需要打印服务代码逻辑健全,避免因中间失败或打印机异常导致的文件不打印(需要打印服务自行持久化打印消息和计算逻辑,重复打印等)
<2>方案二:轮序获取待打印任务列表

方案细节:
a)文件打印任务列表:需要设计一个单据,包含字段:文件内码,打印状态(未开始、进行中、完成)
b)对应<1>,在单据审核操作,操作服务插件,事务内根据成功的数据包,查询关联单据的附件内码,写入到文件打印任务列表
,打印状态为未开始
c)对应<2>,使用星空webapi,利用单据查询接口,查找打印任务状态为未开始的任务
d)对应<3>,使用星空webapi,利用单据保存接口,更新打印任务状态为进行中
e)对应<4>,根据查询得到的文件内码,调用星空webapi进行文件下载,要求版本2022-03-31及之后
参考:[webapi附件下载](https://vip.kingdee.com/article/296577252589190400?productLineId=1&isKnowledge=2)
f)对应<5