.Net 平台应用与技巧
MRZ图表分组数据源过滤设计示例
平台应用类
OrBit平台Job配置
【序列号规则】插件使用说明
工单自定义流程节点应用说明
平台 【SVN 版本管理】工具使用说明
平台SPC应用介绍
平台WebAPI文件上传、下载(OrBitWebAPI2)
平台【元对象授权】功能使用说明
平台【分级授权】功能使用说明
平台【消息对象】使用说明
平台【表单消息升级】应用说明
平台可配置【 Excel 文件导出】功能使用说明
按产品定义采集功能使用说明
用户自定义编码及系统单据状态、单据类型的颜色配置
系统中如何增加用户密码过期更换提醒
通用在线打印功能使用说明
平台技巧类
MS-SQL 添加并引用 DLL 程序集
OrBit “自定义对话框”使用说明
Matrix标签打印(OrBitMESHelp/OrBitMetaHelp)
MES事务对象Scripter--扩展方法
MES事务帮助类OrBitMESHelp
WebView2管理类--用于展示看板
元对象Scripter--扩展方法
元对象帮助类OrBitMetaHelp
外挂Exc程序(发布为平台插件)---调用自定义对话框
自定义对话框--Xml/Json数据解析神器
OrBit-KanBan File 类型应用说明
OrBit-X 如何支持 Https 协议
OrBit-X 平台 Bartender 标签模板制作说明
OrBit-X 平台元对象多文件上传、预览
OrBit-X 平台内置 WebAPI 使用说明
OrBit-X 应用打包-扩展工具-快捷迁移
OrBit平台“调用摄像头拍照、录制视频,并上传FTP”窗体控件的应用
元对象可配置Excel导入功能应用说明
元对象嵌入看板
基于 Json 数据格式的 Mrt 模板设计说明
如何利用 Bartender 标签模板实现一拖几打印
平台 Excel 对象导入功能应用说明
平台 MES 事务对象实现网格多选效果
平台 WebAPI 应用说明
平台中 Mrz 模板实现钻取功能
平台发布接口(OrBitWebAPI&OrBitWebAPI2)
平台通过 CLR 实现企业微信消息及文件自动推送
标签/报表实现只预览不打印
通过平台 Web 服务实现远端 Wifi 打印说明
静态事务“平铺按钮”控件的应用
静态事务”调用摄像头扫码识别条码(条形码/二维码)“功能的应用与实现
钉钉机器人接口实现及其他API扩展
-
+
首页
平台【消息对象】使用说明
# 概述 平台消息功能,可以在平台内向系统用户发送消息,通知的方式可以是 站内消息、邮件消息、钉钉消息、微信消息、飞书消息、OrDroid消息。发送的内容可以有文本,文件,图片等。开发中可以使用统一的 AlarmSendNotice 存储过程接口 向系统用户发送消息通知,其中,消息发送模板可以统一在系统内进行自定义,可以依据用户/客户的要求去提前定义模板。 # 1 消息对象 # 1.1 消息对象 **1.1.1 概述** 元对象中的 消息对象(AlarmObject) 可以理解为将所有要发送的消息(Alarm) 按业务逻辑的具体用途进行了一个归类划分,让每一个发送的消息有一个用途类别的归属,所以在发送消息之前必须先 设置或创建 消息 的 消息对象。 **1.1.2 功能路径** 【对象建模】主菜单 >> 【消息对象】子菜单 >> 【消息对象】页签 ![](/media//202211/201_1667464955.png) **1.1.3 字段说明** | 字段名 | 字段说明 | | - | - | | 消息代码 | 给消息对象取一个固定的编码,用于唯一标识该消息对象,也便于在调用接口的时候作为标识传递 | | 消息对象 | 消息对象的简单描述名称 | | 消息类型 | 消息对象归属的类型,也就是给消息对象进行了一个简单的分类,可在用户编码AlarmObjectType中定义维护,如下图 ![](/media//202301/2023-01-04_163328.png)| | 普通模板 | OrBit平台站内消息 和 OrDroid消息 使用的消息模板。消息模板需要在调用接口时传递的数据源进行数据填充,模板内容结构要求请参见 [5.1.3 模板结构说明](http://121.37.203.18:8006/project-7/doc-423/#h1-5.1.3u6A21u677Fu7ED3u6784u8BF4u660E "5.1.3 模板结构说明") | | 邮件消息模板 | 发送邮件时使用的消息模板,可以是任务HTML内容。消息模板需要在调用接口时传递的数据源进行数据填充,模板内容结构要求请参见 [5.1.3 模板结构说明](http://121.37.203.18:8006/project-7/doc-423/#h1-5.1.3u6A21u677Fu7ED3u6784u8BF4u660E "5.1.3 模板结构说明") | | 钉钉消息模板 | 发送钉钉消息时使用的消息模板,可以是企业钉钉规定的格式内容 或者 任意HTML内容( 如果是HTML内容,则需要将HTML转换成图片发送 )。消息模板需要在调用接口时传递的数据源进行数据填充,模板内容结构要求请参见 [5.1.3 模板结构说明](http://121.37.203.18:8006/project-7/doc-423/#h1-5.1.3u6A21u677Fu7ED3u6784u8BF4u660E "5.1.3 模板结构说明") | | 微信消息模板 | 发送微信消息时使用的消息模板,可以是企业微信规定的格式内容 或者 任意HTML内容(如果是HTML内容,则需要将HTML转换成图片发送)。消息模板需要在调用接口时传递的数据源进行数据填充,模板内容结构要求请参见 [5.1.3 模板结构说明](http://121.37.203.18:8006/project-7/doc-423/#h1-5.1.3u6A21u677Fu7ED3u6784u8BF4u660E "5.1.3 模板结构说明") | | 飞书消息模板 | 发送飞书消息时使用的消息模板,可以是企业飞书规定的格式内容 或者 任意HTML内容(如果是HTML内容,则需要将HTML转换成图片发送)。消息模板需要在调用接口时传递的数据源进行数据填充,模板内容结构要求请参见 [5.1.3 模板结构说明](http://121.37.203.18:8006/project-7/doc-423/#h1-5.1.3u6A21u677Fu7ED3u6784u8BF4u660E "5.1.3 模板结构说明") | | 邮件模板选择 | 可以选择定制好的邮件模板来填充邮件模板内容,具体定制参见 [2 消息模板](http://121.37.203.18:8006/project-7/doc-423/#h1-2u6D88u606Fu6A21u677F "2 消息模板") | | 钉钉模板选择 | 可以选择定制好的钉钉模板来填充钉钉模板内容,具体定制参见 [2 消息模板](http://121.37.203.18:8006/project-7/doc-423/#h1-2u6D88u606Fu6A21u677F "2 消息模板") | | 微信模板选择 | 可以选择定制好的微信模板来填充微信模板内容,具体定制参见 [2 消息模板](http://121.37.203.18:8006/project-7/doc-423/#h1-2u6D88u606Fu6A21u677F "2 消息模板") | | 飞书模板选择 | 可以选择定制好的飞书模板来填充飞书模板内容,具体定制参见 [2 消息模板](http://121.37.203.18:8006/project-7/doc-423/#h1-2u6D88u606Fu6A21u677F "2 消息模板") | **1.1.4 发起邮件设置** 当进行邮件的发送消息的时候,必须有个邮件的发送人(也就是发起邮箱),发起邮箱是在系统参数 **[WCF Mail Setting]** 中进行设置,设置的参数的说明如下图: ![](/media//202211/2022-11-28_134759.png) # 1.2 用户清单 **1.2.1 概述** 消息对象 的 用户清单 里面设置的用户,其作用就是在属于该消息对象 的 任何消息发送的时候 都会同时发送给用户清单里面的用户 **1.2.2 功能路径** 【对象建模】主菜单 >> 【消息对象】子菜单 >> 【用户清单】页签 ![](/media//202211/202_1667465554.png) # 1.3 用户组清单 **1.3.1 概述** 消息对象 的 用户组清单 里面设置的所有用户组的用户,其作用就是在属于该消息对象 的 任何消息发送的时候 都会同时发送给所有用户组的用户 **1.3.2 功能路径** 【对象建模】主菜单 >> 【消息对象】子菜单 >> 【用户组清单】页签 ![](/media//202211/203_1667465795.png) # 1.4 消息事件发布 **1.4.1 概述** 消息事件发布 也就是 消息对象包含的所有不同的消息,每个消息可以看做一个消息主体,包括消息标题,消息内容,等等。 **1.4.2 功能路径** 【对象建模】主菜单 >> 【消息对象】子菜单 >> 【消息事件发布】页签 ![](/media//202211/204_1667465971.png) **1.4.3 字段说明** | 字段名称 | 字段说明 | | --- | --- | | 消息来源 | 必要的时候可以注明该条消息的来源 | | 抬头 | 也就是消息的标题,如在发邮件消息中会作为邮件的标题信息,必填 | | 消息内容 | 消息要发送的具体消息内容,必填 | # 1.5 用户消息接收状态 **1.5.1 概述** 用户消息接收状态 这里的记录 是每个消息发送给指定单个系统用户的状态,如果一个消息发送给100个不同用户,这里就会有100条记录,每个记录都记载着该用户对这条消息的接收状态等信息。 **1.5.2 功能路径** 【对象建模】主菜单 >> 【消息对象】子菜单 >> 【用户消息接收状态】页签 ![](/media//202211/205_1667466367.png) **1.5.3 业务说明** 这里的状态分为邮件、钉钉、微信、飞书、平台站台、OrDroid,短信 7类(其中短息功能暂时没有实现),每类都有接受的时间和接受状态。 其中接受状态 **0:表示不发送**、**1:表示已发送**、**2:表示发送且已经收到**。 # 1.6 通讯应用 **1.6.1 概述** 通讯应用 是当要通过消息对象给 微信、钉钉、飞书 发通知信息的时候需要配置内容,通讯组目前支持三类 钉钉、微信、飞书,每个通讯组里面可以包含多个应用,但是一个消息对象关联的每个通讯组只能设置一个应用。 **1.6.2 功能路径** 【对象建模】主菜单 >> 【消息对象】子菜单 >> 【通讯应用】页签 ![](/media//202211/206_1667524688.png) **1.6.3 字段说明** | 字段名称 | 字段说明 | | --- | --- | | 通讯组 | 选择有应用所属的通讯组 | | 通讯应用 | 一个通讯组里面的应用,如一个企业微信可以创建多个微应用,一个企业钉钉也可以创建多个微应用(但是一个消息对象对应的一个通讯组中只能设置一个应用,不可以同时关联一个通讯组里面的多个应用) | # 2 消息模板 # 2.1 消息模板 **2.1.1 概述** 在给消息对象的邮件、钉钉、微信、飞书设置模板内容的时候,可是先预设定制好几种常用的模板内容,然后在消息对象设置模板的时候就可以直接选择。 **2.1.2 功能路径** 【对象建模】主菜单 >> 【消息模板】子菜单 >> 【消息模板】页签 ![](/media//202211/215_1667550601.png) **2.1.3 字段说明** | 字段名称 | 字段说明 | | --- | --- | | 消息模板名称 | 给定制的模板取一个名字 | | 消息模板类型 | 目前可以设置预设定制模板的消息类型有邮件、钉钉、微信、飞书 四种 | | 消息模板内容 | 定制模板的模板内容 | | 消息模板图片 | 消息发送后呈现外观的样例图片 | # 3 通讯组 # 3.1 通讯组 **3.1.1 概述** 当消息对象需要通过 **企业通讯工具** 发送消息的时候,就必须在通讯组里面创建相应类型的通讯组,一个钉钉通讯组相当于一个企业钉钉,一个微信通讯组相当于一个企业微信,在这里设置企业微信、企业钉钉或者企业飞书的相关信息 **3.1.2 功能路径** 【基础数据】主菜单 >> 【通讯组】子菜单 >> 【通讯组】页签 ![](/media//202211/207_1667544306.png) **3.1.3 字段说明** | 字段名称 | 字段说明 | | --- | --- | | 通讯组名 | 给通讯组起一个名字,名字里建议带上钉钉、微信或者飞书,这样一看就知道是钉钉的通讯组还是微信的通讯组 | | 通讯类型 | 选择第三方的通讯类型,目前只支持微信、钉钉或者飞书 | | 企业ID | 企业微信、企业钉钉、企业飞书的企业ID。微信获取界面如图 ![](/media//202211/2022-11-11_095348.png) 钉钉获取界面如图 ![](/media//202211/2022-11-11_095710.png) 飞书获取界面如图 ![](/media//202211/2022-11-24_160945.png) | | WCF地址 | 发送消息使用的WCF地址 | # 3.2 自建应用 **3.2.1 概述** 自建应用,就是一个企业微信或者一个企业钉钉下面所包含创建的应用,当通过消息对象发钉钉或微信消息的时候必须将消息对象关联到一个具体的应用,通过应用来将消息对象中的消息发送到钉钉或者微信。 当应用属于企业微信的时候,需要设置微信应用的相关字段参数 当应用属于企业钉钉的时候,需要设置钉钉应用的相关字段参数 当应用属于企业飞书的时候,需要设置飞书应用的相关字段参数 **3.2.2 功能路径** 【基础数据】主菜单 >> 【通讯组】子菜单 >> 【自建应用】页签 ![](/media//202211/210_1667545851.png) **3.2.3 公共字段说明** | 字段名称 | 字段说明 | | --- | --- | | 应用名称 | 给应用取一个适当的名称 | | 是否默认 | 当设置为默认的时候,消息对象在发送微信消息的时候,如果消息对象没有关联任何一个应用,则该应用作为默认应用被使用 | **3.2.4 微信应用段说明** | 字段名称 | 字段说明 | | --- | --- | | 微信Corpsecret | ![](/media//202211/212_1667548383.png) ![](/media//202211/2022-11-11_095935.png) | | 微信应用AgentId | ![](/media//202211/211_1667548242.png) | **3.2.5 钉钉应用字段说明** | 字段名称 | 字段说明 | | --- | --- | | 钉钉应用AgentId、钉钉AppKey、钉钉AppSecret | ![](/media//202211/2022-11-11_100041.png) | **3.2.6 飞书应用段说明** | 字段名称 | 字段说明 | | --- | --- | | 飞书AppID | ![](/media//202211/2022-11-24_160138.png) | | 飞书AppSecret | ![](/media//202211/2022-11-24_160231.png) | # 4 人员相关信息设置 # 4.1 发送消息通讯地址设置 **4.1.1 概述** 当消息对象的消息要通过邮件、钉钉、微信、飞书发送的时候,肯定必须要知道邮件的邮件地址、企业钉钉中用户的钉钉号、企业微信中用户的微信号等信息,而这些不同发送方式的通讯地址信息都是在人员中进行设置 **4.1.2 功能路径** 【企业】主菜单 >> 【人员】子菜单 >> 【人员信息】页签 ![](/media//202211/2022-11-08_161914.png) **4.1.2 字段说明** | 字段名称 | 字段说明 | | --- | --- | | 邮件地址 | 用户接收邮件消息的邮件地址 | | 微信账号 | 获取方式 ![](/media//202211/2022-11-08_163315.png) | | 钉钉Id | 获取方式 ![](/media//202211/2022-11-08_163536.png) | | 飞书Id | 获取方式 ![](/media//202211/2022-11-28_155402.png) | # 4.2 人员和系统用户的关系设置 **4.2.1 概述** 在上述 [4.1 发送消息通讯地址设置](http://121.37.203.18:8006/project-7/doc-423/#h1-4.1u53D1u9001u6D88u606Fu901Au8BAFu5730u5740u8BBEu7F6E "4.1 发送消息通讯地址设置") 章节中说明了邮件、钉钉、微信、飞书通讯方式的通讯地址是在人员管理中进行设置的,但是在调用接口指定接收消息的用户的时候是以系统用户来指定的,所以在人员管理中必须要设置该人员属于哪个系统用户,也就是系统用户和人员之间的关系是一对多的关系,一个系统用户可以关联多个人员,一个人员只能属于一个系统用户。 **举例说明 :**比如一个系统用户关联了3个人员,这3个人员都设置了自己不同的邮件地址信息,那么在调用接口给该系统用户发送邮件的时候,就会同时给这三个人员发送邮件信息 (微信、钉钉、飞书同理可推) **4.2.2 功能路径** 【企业】主菜单 >> 【人员】子菜单 >> 【人员信息】页签 ![](/media//202211/2022-11-08_164423.png) # 5 接口说明 # 5.1 AlarmSendNotice 接口 # 5.1.1 概述 当消息对象的相关信息通过元对象界面配置完毕之后,就可以调用存储过程 AlarmSendNotice 进行消息的发送,该接口存储过程是平台通过消息对象发送消息的统一接口。 # 5.1.2 接口参数说明 ```sql @I_ReturnMessage NVARCHAR(MAX) = '' OUTPUT, --返回结果消息 @AlarmCode NVARCHAR(50), --消息对象的编码 @UserList NVARCHAR(MAX) = '', /*接收信息用户列表(SysUser表的主键UserId字段值或者UserName字段值)","号分割,如user1,user2,... 除了发送消息给 @UserList参数 指定的用户外,还会发送给消息对象关联的用户以及用户组。 如果不给 @UserList参数 传值,默认为空,则只会发送消息对象关联的用户以及用户组 */ @AlarmTitle NVARCHAR(50) = '', /*报警抬头标题,如果不传该参数 程序中会默认设置为消息对象名称 发送邮件的时候会作为邮件标题,所以一般在发送邮件的时候使用该参数 */ @AttachFileList NVARCHAR(MAX) = '', /* 要发送的文件列表 以","号分割,文件值可以是以下3种方式 1) 可以是服务器的实际盘符地址 如:"D:\Image\Test.png" 2) 也可以是平台上传后获得的FtpId 如:"FTP1000001DG" 3) 也可以是网络地址引用的文件 如:"https://www.orbitmes.com/uploads/20210220052147_265070.jpg" */ @DataSource nvarchar(max)='', /* 用来替换模板的数据源,可以使用以下两种方式的其中一种: 1: json对象的属性名 和 模板中的单值占位符的名称一致。 如果模板有集合占位符,则json相应属性的值就要求是一个数组类型, 以数组中的每个对象内容替换集合占位符的内容形成多条记录 2: 若有多个select语句则以’{|}’号分割 ( select查询出的字段列名 和 模板中的单值占位符名一致 ) 非集合select语句只能有一个,且非集合查询select只能查询出单条记录 集合select语句根据模板需要可以有多个,集合查询语句必须以’TagName{:}’开头,TagName表示模板中集合占位符的名称 程序会根据你传递的数据源内容 自动判断 是两种方式的哪一种*/ @IsHtmlConvertImage bit = 0, --如果 微信、钉钉、飞书 要发送的内容为Html是否转换成图片发送 -- 以下消息内容如果有传值,则以实际传值内容直接发送,如果没有传值则根据 @DataSource数据源替换模板后进行发送 @AlarmContent NVARCHAR(max) = '', --普通内容( 平台消息 和 OrDroid消息 ) @WeChatContent NVARCHAR(max) = '', --微信内容 可以是企业微信规定的格式内容 或者 任意HTML内容(如果是HTML内容,需要转成图片发送) @EmailContent NVARCHAR(max) = '', --邮件内容 可以是任意HTML内容 @DingTalkContent NVARCHAR(max) = '', --钉钉内容 可以是企业钉钉规定的格式内容 或者 任意HTML内容(如果是HTML内容,需要转成图片发送) @FeiShuContent NVARCHAR(max) = '', --飞书内容 可以是企业飞书规定的格式内容 或者 任意HTML内容(如果是HTML内容,需要转成图片发送) -- 各方式是否发送 如果不传默认为nul 则取消息对象的是否发送设置 @IsEmail BIT = null, --针对参数@UserList指定的用户 是否发送电子邮件 @IsSMS BIT = null, --针对参数@UserList指定的用户 是否发送短信(暂不支持) @IsOrDroidMsg BIT = null, --针对参数@UserList指定的用户 是否发送OrDroidMsg @IsWeChat BIT = null, --针对参数@UserList指定的用户 是否发送微信 @IsBrowserMsg BIT = null, --针对参数@UserList指定的用户 是否发送平台消息 @IsDingTalkMsg BIT = null, --针对参数@UserList指定的用户 是否发送钉钉消息 @IsFeiShuMsg BIT = null, --针对参数@UserList指定的用户 是否发送飞书消息 -- 以下附加可选参数,主要是对应Alarm表的字段值,不需要可以不传 @AlarmSource NVARCHAR(50) = '', --警报来源 @Creator NVARCHAR(30) = '' --创建人 ``` # 5.1.3 模板结构说明 接口中的参数 @DataSource 表示数据源,而数据源又必须结合模板使用,因为数据源就是用来替换模板中的占位符以形成具体的消息内容去发送,模板中可以有以下两种标识的占位符可以使用(模板的添加设置是在消息对象元对象中操作 参见 [1.1 消息对象](http://121.37.203.18:8006/project-7/doc-423/#h1-1.1u6D88u606Fu5BF9u8C61 "1.1 消息对象") ) (1) **单值占位符 {@PlaceholderName}** :单值替换的占位符, 以开"{@"头,以结"}"结尾,中间 PlaceholderName 为**单值占位符**的名称 (2) **集合占位符 {#PlaceholderName}** : 可生成集合的占位符, 以开"{#"头,以结"}"结尾,中间 PlaceholderName 为**集合占位符**的名称,**集合占位符** 必须成对出现,一对**集合占位符**之间的内容可以包含**单值占位符**,且其内容会根据数据源中的集合数据生成多条记录内容 **模板样例:**以下为后续演示使用的模板样例内容字符串 > 公司名字叫做{@CompanyName},地址位于{@CompanyAddress},公司有以下员工: {#EmployeeList}(工号:{@Number} 姓名:{@Name} 年龄:{@Age}) {#EmployeeList} 公司有以下设备: {#EquipmentList}(机器号:{@Number} 名称:{@Name} ) {#EquipmentList} # 5.1.4 数据源使用说明 接口中的参数 @DataSource 表示数据源,数据源的内容可以有两种格式 **(1)使用json对象数据源方式** 和 **(2)使用select语句数据源方式** 以下具体说明这两种格式的使用方法 **(1) 使用json对象数据源方式** json对象的属性名 和 模板中的**单值占位符**的名称一致,如果模板有**集合占位符**,则json相应属性的值就要求是一个数组类型,以数组中的每个对象内容替换**集合占位符**的内容形成多条记录,替换原理如下图 ![](/media//202211/2022-11-07_112238.png) **(2) 使用select语句数据源方式** 若有多个select语句则以'{|}'号分割 ( select查询出的字段列名 和 模板中的**单值占位符**名一致 ) 非集合select语句只能有一个,且非集合查询select只能查询出单条记录 集合select语句根据模板需要可以有多个,集合查询语句必须以'TagName{:}'开头,TagName表示模板中**集合占位**符的名称,替换原理如下图 ![](/media//202211/2022-11-08_133453.png) # 5.1.5 钉钉、微信、飞书 HTML内容转图片发送 我们在通过消息对象给钉钉、微信、飞书发送消息的时候,消息的内容需要严格按照各自官方API规定的JSON格式内容进行编写,它们各自官方都不支持像邮件那样可以任意的使用HTML进行编辑发送,所以连发送自定义表格都没有办法,为了解决这个痛点,我们在内部实现了通过将HTML转换成图片再进行发送的功能,这样就可以在给钉钉、微信、飞书发送信息的时候使用任意HTML内容,而发过去的是一张具有完美显示HTML内容效果的图片。 如果需要复制图片里面的文字,其实现在有很多工具,就比如微信,已经提供了可以很好提取图片里面文字的功能,所以对于这一点基本上也不是什么问题。 **5.1.5.1 普通调用示例** 下面我们就以飞书为例说明如何在调用 AlarmSendNotice 接口 时将HTML发送出去。(钉钉、微信操作一样),代码如下: ```sql declare @I_ReturnMessage nvarchar(MAX) exec AlarmSendNotice @I_ReturnMessage = @I_ReturnMessage output, @AlarmCode = '[Test HtmlImage]', @UserList = 'HK0315', @IsHtmlConvertImage = 1, @FeiShuContent = ' <table border="1" cellspacing="0" align="center" width="750"> <tr> <td width="150" height="40" bgcolor="aqua" align="center">员工姓名</th> <td width="150" height="40"></th> <td width="150" height="40" bgcolor="aqua" align="center">性别</th> <td width="150" height="40"></th> <td width="150" height="40" rowspan="4" align="center" >照片</th> </tr> <tr> <td width="150" height="40" bgcolor="aqua" align="center">入职日期</td> <td width="150" height="40"></td> <td width="150" height="40" bgcolor="aqua" align="center">籍贯</td> <td width="150" height="40"></td> </tr> <tr> <td width="150" height="40" bgcolor="aqua" align="center">入职岗位</td> <td width="150" height="40"></td> <td width="150" height="40" bgcolor="aqua" align="center">民族</td> <td width="150" height="40"></td> </tr> <tr> <td width="150" height="40" bgcolor="aqua" align="center">联系电话</td> <td width="150" height="40"></td> <td width="150" height="40" bgcolor="aqua" align="center">电子邮箱</td> <td width="150" height="40"></td> </tr> <tr> <td width="150" height="100" bgcolor="aqua" align="center">工作经历</td> <td width="600" height="100" colspan="4"></td> </tr> <tr > <td width="150" height="100" bgcolor="aqua" align="center">教育经历</td> <td width="600" height="100" colspan="4"></td> </tr> </table>', @IsFeiShuMsg = 1 select @I_ReturnMessage ``` 可到看到,在给飞书内容参数 @FeiShuContent 赋值的不是一个飞书官方规定格式的JSON内容,而是一段用于显示表格的HTML代码,而且参数 @IsHtmlConvertImage 赋值为 1 ,则会转换成一张图片发送出去,发送到手机效果如下图: ![](/media//202212/2022-12-07_101928.png) 点击图片后效果 ![](/media//202212/2022-12-07_102028.png) 然后再点击即可放大移动等操作。 **5.1.5.2 图片裁剪** 从上面的例子可以看到发送出去的图片默认会有一些边距空白,我们可以在HTML里面加入一些代码来灵活来实对图片的裁剪,裁剪图片有以下两种方式: **(1) 指定左上右下四边裁剪长度的方式** 可以在HTML代码里面的任意位置加上代码标识 "{cut|正整数,正整数,正整数,正整数}" 来实现裁剪,其中3个逗号分隔的4个正整数分别代表需要从 左、上、右、下 裁剪的长度,下面举例说明,代码如下: ![](/media//202212/2022-12-07_103435.png) 代码中在HTML里面加上了 "{cut|8,8,0,0}" 表示 左边裁剪8个像素,上面裁剪8个像素,右边和下边没有裁剪,发送后图片效果如下: ![](/media//202212/2022-12-07_104306.png) 从图片中发现左边和上面裁剪了8个像素,而右边和下边没有裁剪还有边距,这样我们就可以对图片的4边进行灵活裁剪调整。 **(2) 指定一个HTML元素进行裁剪的方式** 裁剪的另一种方式就是,可以在HTML中的某一个元素加上 值为 "cut" 的 "id" 属性,来单单把该元素裁剪出来成为一张图片,比如在上例中我们要刚好把整个表格裁剪出来,则只需要在表格元素加上 id="cut",代码如下: ![](/media//202212/2022-12-07_105216.png) 这样发送出去图片就只会刚好显示表格,如下图: ![](/media//202212/2022-12-07_105419.png) 再举个例子,比如我们要把 工作经历 哪一行裁剪出来发出去,则只需要在 工作经历 所在的行元素中加上 id="cut",代码如下: ![](/media//202212/2022-12-07_105646.png) 这样发出去的图片,只会显示工作经历的行,如下图: ![](/media//202212/2022-12-07_105916.png) 至此已经说明了可以有两种方式对HTML生成的图片进行裁剪,为的就是可以灵活的调整图片的可见范围,只发出去我们想要发出去的内容。 **注:** 以上两种裁剪方式只能使用一种,不能同时使用,如果两种都进行了设置则只会运用第二种。 在本例中我们是直接给飞书内容参数 @FeiShuContent 传递一段HTML内容来实现,当然,如果是使用数据源替换模板也是一样的原理,只要最终要发送的内容被识别为HTML 且 参数@IsHtmlConvertImage赋值为1,就会转换成图片发送出去。 # 5.2 其它接口说明 **概述 :** AlarmSendNotice 接口是平台通过消息对象发送消息的统一接口,但是为了完成 AlarmSendNotice 接口的功能,在该接口内部还调用了其他接口,接下来对内嵌调用到的其他接口做逐一说明。 # 5.2.1 接口 AlarmSendNoticeByAlarmId **概述 :** 该接口是在 AlarmSendNotice 接口生成了消息主体后,通过消息主体Id(AlarmId) 进一步生成该消息主体对每个接收用户的消息状态记录(AlarmSend) **参数明说 :** ```sql @AlarmId char(12), --消息主题AlramId @UserList NVARCHAR(MAX), --接受用户列表(,号分割) @IsEmail BIT = 0, --是否发送电子邮件 @IsSMS BIT = 0, --是否发送短信(暂不支持) @IsOrDroidMsg BIT = 0, --是否发送OrDroidMsg @IsWeChatMsg BIT = 0, --是否发送微信 @IsBrowserMsg BIT = 0, --是否发送平台消息 @IsDingTalkMsg BIT = 0, --是否发送钉钉消息 @IsFeiShuMsg BIT = 0 --是否发送飞书消息 ``` # 5.2.2 接口 AlarmReplaceTemplate **概述:** 该接口会使用 @DataSource 数据源 对 @TemplateContent 模板 中的占位符进行实际数据替换操作生成实际要发送的消息内容的接口 模板的使用 参见 [5.1.3 模板结构说明](http://121.37.203.18:8006/project-7/doc-423/#h1-5.1.3u6A21u677Fu7ED3u6784u8BF4u660E "5.1.3 模板结构说明") 数据源的使用 参见 [5.1.4 数据源使用说明](http://121.37.203.18:8006/project-7/doc-423/#h1-5.1.4u6570u636Eu6E90u4F7Fu7528u8BF4u660E "5.1.4 数据源使用说明") **参数明说 :** ```sql @TemplateContent nvarchar(max), -- 要替换的模板内容 @DataSource nvarchar(max), -- 用来替换模板的数据源 @ResultContent nvarchar(max) output -- 替换后的最终消息内容 ``` # 5.2.3 接口 AlarmToNotice **概述:** 该接口是一个各种消息发送方式的整合接口,里面会调用微信、钉钉、飞书、邮件、OrDroid 等方式去根据传递的消息主体Id(AlarmId)参数 来检查 是否有要发送的消息,并进行消息的发送操作。 **参数明说 :** ```sql @AlarmId char(12) = null, -- 消息主体Id @AlarmSendId char(12) = null, -- 用户消息Id @IsHtmlConvertImage bit = 0, -- 如果 微信、钉钉、飞书 要发送的内容为Html是否转换成图片发送 ``` # 5.2.4 接口 AlarmToDingTalk **概述:** 该接口会根据传递的消息主体Id(AlarmId)参数 来检查 是否有要发送给系统用户的钉钉消息,并进行钉钉消息的发送操作。 **参数明说 :** ```sql @AlarmId char(12) = null, -- 消息主体Id @AlarmSendId char(12) = null, -- 用户消息Id @IsHtmlConvertImage bit = 0, -- 如果 微信、钉钉、飞书 要发送的内容为Html是否转换成图 ``` # 5.2.5 接口 AlarmToMail **概述:** 该接口会根据传递的消息主体Id(AlarmId)参数 来检查 是否有要发送给系统用户的邮件消息,并进行邮件消息的发送操作。 **参数明说 :** ```sql @AlarmId char(12) = null, -- 消息主体Id @AlarmSendId char(12) = null, -- 用户消息Id ``` # 5.2.6 接口 AlarmToWeChat **概述:** 该接口会根据传递的消息主体Id(AlarmId)参数 来检查 是否有要发送给系统用户的微信消息,并进行微信消息的发送操作。 **参数明说 :** ```sql @AlarmId char(12) = null, -- 消息主体Id @AlarmSendId char(12) = null, -- 用户消息Id @IsHtmlConvertImage bit = 0, -- 如果 微信、钉钉、飞书 要发送的内容为Html是否转换成图 ``` # 5.2.7 接口 AlarmToOrDroid **概述:** 该接口会根据传递的消息主体Id(AlarmId)参数 来检查 是否有要发送给系统用户的OrDroid消息,并进行OrDroid消息的发送操作。 **参数明说 :** ```sql @I_ReturnMessage nvarchar(max)='' output, --返回的信息 @AlarmId char(12) = null, -- 消息主体Id ``` # 5.2.8 接口 AlarmToFeiShu **概述:** 该接口会根据传递的消息主体Id(AlarmId)参数 来检查 是否有要发送给系统用户的飞书消息,并进行飞书消息的发送操作。 **参数明说 :** ```sql @AlarmId char(12) = null, -- 消息主体Id @AlarmSendId char(12) = null, -- 用户消息Id @IsHtmlConvertImage bit = 0, -- 如果 微信、钉钉、飞书 要发送的内容为Html是否转换成图 ``` # 6 示例说明与效果展示 下面使用同一个数据源,然后针对邮件、企业微信、企业钉钉、企业飞书 四者,举例使用各自不同的模板进行消息发送,看看发送后的效果。我们使用的同一数据源为select格式数据源 ( 数据源的说明可参见 [5.1.4 数据源使用说明](http://121.37.203.18:8006/project-7/doc-423/#h1-5.1.4u6570u636Eu6E90u4F7Fu7528u8BF4u660E "5.1.4 数据源使用说明") ) 如下: ```sql select ''华磊迅拓'' CompanyName , ''深圳龙华民治街道汇德大厦'' CompanyAddress , ''+0755-83943221'' ServiceHotline {|} PersonInfo{:} select top 5 p.PersonNumber, p.PersonName, case when p.PersonSex = ''F'' then ''女'' when p.PersonSex = ''M'' then ''男'' else '''' end PersonSex from PersonInfo p order by newid() {|} EAM_EqAsset{:} select top 5 ea.AssetNumber, ea.AssetName, eat.TypeDescription from EAM_EqAsset ea inner join EAM_EqAssetType eat on eat.EAM_EqAssetTypeId = ea.AssetTypeId where isnull(ea.AssetName,'''')!='''' and isnull(eat.TypeDescription,'''')!='''' order by newid() ``` # 6.1 邮件 使用邮件模板如下: ```html <div style="background: #F0F2F5; padding: 35px; font-size: 14px;"> <div style="width: 750px; margin: 0 auto; background: url('https://www.henghost.com/images/hc_email_background.png') no-repeat center; background-size: cover;"> <div style="padding: 0 15px; padding-bottom: 20px;"> <div style="height: 80px; display: flex; justify-content: space-between; position: relative;"> <div> <a href="https://www.henghost.com/" target="_blank" rel="noopener"><img style="margin-top: 20px;" src="https://www.orbitmes.com/dist/images/logo.png" border="0"></a> </div> <div> <div style="height: 30px; color: #006eff; line-height: 30px; padding: 0 10px; background: #FFFFFF; position: absolute; bottom: 0px; right: 0px;">咨询热线:{@ServiceHotline}</div> </div> </div> <div style="background: #fff; padding: 0 15px; padding-bottom: 50px;"> <div style="padding: 0 9px; display: flex; justify-content: space-between; align-items: center; padding-top: 10px; padding-bottom: 10px; border-bottom: 1px solid #DBDBDB;"> <div style="display: flex;"> <a style="color: #333; text-decoration: none;" href="https://www.orbitmes.com/" target="_blank" rel="noopener"><span class="nav-title" style="margin-right: 50px;">公司网站</span></a> <a style="color: #333; text-decoration: none;" href="https://www.orbitmes.com/case/" target="_blank" rel="noopener"><span class="nav-title" style="margin-right: 50px;">客户案例</span></a> <a style="color: #333; text-decoration: none;" href="https://www.orbitmes.com/news/CompanyNews/" target="_blank" rel="noopener"><span class="nav-title" style="margin-right: 50px;">新闻中心</span></a> <a style="color: #333; text-decoration: none;" href="https://www.orbitmes.com/about/" target="_blank" rel="noopener"><span class="nav-title">联系我们</span></a> </div> <div style="display: flex;"> </div> </div> <div style="color: #41bf71; border: 1px solid #41BF71; background: #E0FFEC; padding: 14px 15px; display: flex; margin-top: 20px; margin-bottom: 30px;"> <img style="width: 42px !important; height: 42px !important;" src="https://www.henghost.com/images/hc_console_normal.png" width="42"> <div style="margin-left: 14px;"> <div style="font-size: 16px; font-weight: bold; margin-bottom: 5px;">项目申请成功!感谢您对{@CompanyName}的支持。</div> <!--<div style="width: 600px; line-height: 24px;"> <a style="color: #006eff; text-decoration: none;" href="https://my.henghost.com/list.php" target="_blank" rel="noopener">登录控制台</a> 查看并使用您的云服务器。 <a style="color: #006eff; text-decoration: none;" href="https://www.henghost.com/help/article/584/" target="_blank" rel="noopener">云服务器登录</a>、 <a style="color: #006eff; text-decoration: none;" href="https://www.henghost.com/help/article/596/" target="_blank" rel="noopener">重装系统</a> 等操作请参阅: <a style="color: #006eff; text-decoration: none;" href="https://www.henghost.com/help/article_cate/29/" target="_blank" rel="noopener">操作指南</a>。 </div>--> </div> </div> <div> <div><span style="font-size: 16px; font-weight: bold; position: relative; top: -4px;">公司员工</span></div> <table style="width: 100%; border-spacing: 0px; border-collapse: collapse; border: none; margin-top: 20px;"> <tbody> <tr style="height: 40px; background: #F6F6F6;"> <th style="border: 1px solid #DBDBDB; color: #666666; font-size: 14px; font-weight: normal; text-align: left; padding-left: 14px;">人员编号</th> <th style="border: 1px solid #DBDBDB; color: #666666; font-size: 14px; font-weight: normal; text-align: left; padding-left: 14px;">人员名称</th> <th style="border: 1px solid #DBDBDB; color: #666666; font-size: 14px; font-weight: normal; text-align: left; padding-left: 14px;">性别</th> </tr> {#PersonInfo} <tr style="height: 40px;"> <td style="border: 1px solid #DBDBDB; font-size: 14px; font-weight: normal; text-align: left; padding-left: 14px;">{@PersonNumber}</td> <td style="border: 1px solid #DBDBDB; font-size: 14px; font-weight: normal; text-align: left; padding-left: 14px;">{@PersonName}</td> <td style="border: 1px solid #DBDBDB; font-size: 14px; font-weight: normal; text-align: left; padding-left: 14px;">{@PersonSex}</td> </tr> {#PersonInfo} </tbody> </table> </div> <div style="margin-top: 30px;"> <div><span style="font-size: 16px; font-weight: bold; position: relative; top: -4px;">设备资产</span></div> <table style="width: 100%; border-spacing: 0px; border-collapse: collapse; border: none; margin-top: 20px;"> <tbody> <tr style="height: 40px; background: #F6F6F6;"> <th style="border: 1px solid #DBDBDB; color: #666666; font-size: 14px; font-weight: normal; text-align: left; padding-left: 14px;">资产编号</th> <th style="border: 1px solid #DBDBDB; color: #666666; font-size: 14px; font-weight: normal; text-align: left; padding-left: 14px;">资产名称</th> <th style="border: 1px solid #DBDBDB; color: #666666; font-size: 14px; font-weight: normal; text-align: left; padding-left: 14px;">资产类型</th> </tr> {#EAM_EqAsset} <tr style="height: 40px;"> <td style="border: 1px solid #DBDBDB; font-size: 14px; font-weight: normal; text-align: left; padding-left: 14px;">{@AssetNumber}</td> <td style="border: 1px solid #DBDBDB; font-size: 14px; font-weight: normal; text-align: left; padding-left: 14px;">{@AssetName}</td> <td style="border: 1px solid #DBDBDB; font-size: 14px; font-weight: normal; text-align: left; padding-left: 14px;">{@TypeDescription}</td> </tr> {#EAM_EqAsset} </tbody> </table> </div> <div style="margin-top: 30px;"> <span style="font-size: 14px; font-weight: bold;">公司地址</span> <div style="line-height: 24px; margin-top: 10px;"> <div> {@CompanyAddress} </div> </div> </div> </div> </div> </div> </div> ``` 发送后看到的效果如下: ![](/media//202211/2022-11-18_164501.png) # 6.2 企业微信 使用微信模板如下: ```json "msgtype":"markdown", "markdown": { "content": "<font color=\"warning\">微信模板效果测试</font> >**公司名称**:{@CompanyName} >**公司地址**:{@CompanyAddress} >**咨询热线**:{@ServiceHotline} > >**公司员工**: {#PersonInfo} > 编号:{@PersonNumber}、姓名:{@PersonName}、性别:{@PersonSex} {#PersonInfo} > >**资产设备**: {#EAM_EqAsset} >编号:{@AssetNumber}、名称:{@AssetName}、类型:{@TypeDescription} {#EAM_EqAsset} "} ``` 发送后看到的效果如下: ![](/media//202211/2022-11-18_173635.png) # 6.3 企业钉钉 使用钉钉模板如下: ```json "msgtype": "markdown", "markdown": { "title": "钉钉模板效果测试", "text": "#### **钉钉模板效果测试** \n **公司名称**:{@CompanyName} \n **公司地址**:{@CompanyAddress} \n **咨询热线**:{@ServiceHotline} \n . \n **公司员工**: {#PersonInfo} \n 编号:{@PersonNumber}、姓名:{@PersonName}、性别:{@PersonSex}{#PersonInfo} \n . \n **资产设备**: {#EAM_EqAsset} \n编号:{@AssetNumber}、名称:{@AssetName}、类型:{@TypeDescription}{#EAM_EqAsset} "} ``` 发送后看到的效果如下: ![](/media//202211/2022-11-18_171757.png) # 6.4 企业飞书 使用飞书模板如下: ```json "msg_type": "interactive", "card": { "config": { "wide_screen_mode": true }, "elements": [ { "fields": [ { "is_short": true, "text": { "content": "**咨询热线**\n{@ServiceHotline}", "tag": "lark_md" } }, { "is_short": true, "text": { "content": "**公司地址**\n{@CompanyAddress}", "tag": "lark_md" } } ], "tag": "div" }, { "tag": "div", "text": { "content": "**公司员工:** {#PersonInfo}\n编号:{@PersonNumber}、姓名:{@PersonName}、性别:{@PersonSex}{#PersonInfo}\n\n **资产设备:** {#EAM_EqAsset}\n编号:{@AssetNumber}、名称:{@AssetName}、类型:{@TypeDescription}{#EAM_EqAsset}", "tag": "lark_md" } } ], "header": { "template": "red", "title": { "content":"{@CompanyName}", "tag": "plain_text" } } } ``` 发送后看到的效果如下: ![](/media//202211/2022-11-24_160614.png)
HK0315
2023年1月4日 16:39
分享
上一篇
下一篇
目录
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
下载Markdown文件