.Net 平台标准存储过程&函数&CLR方法
CLR 方法类
CLR_CallWebAPIEx / CLR_CallWebAPIEx2 [调用外部系统接口]
CLR_CallWebAPIEx3 [调用外部系统接口]
CLR_CreateImageByHtml 根据HTML内容生成图片接口
CLR_Dingtalk_GetUserIdByMobile 通过手机号码获取企业钉钉号
CLR_Dingtalk_MessageSend 企业钉钉发送消息接口
CLR_FeiShu_MessageSend 企业飞书发送消息接口
CLR_GetSolarDate 农历日期转换成阳历日期
CLR_RegexIsMatch 正则表达式匹配函数
CLR_RegexReplace 正则表达式替换函数
CLR_WeChatPostEx 企业微信消息及文件推送
【EAM】标准方法
【QMS】存储过程类
FQC(终检)生产卡控处理
PQC(半成品检验)生产卡控处理
出货检 宽严转换规则处理
出货检验单生成接口
发货扫描卡控出货检验
完工检 宽严转换规则处理
完工检验单生成接口
巡检检验生产卡控
巡检验检验单生成接口(手工引用)
巡检验检验单生成接口(用于自动执行)
来料检验急料邮件预警提醒
首件检验单生成接口
首件检验生产卡控处理
【WES】标准方法
【MES】TxnBase_LotStart_Batch(批号批量启动) --【5大接口之一】
【WES】TxnBase_WES_AdviceCell(获取建议储位)
【WES】TxnBase_WES_BoxSN_PrintForPDA(物料箱号打印)
【WES】TxnBase_WES_InAndOutRecord(WES出入库记录)
【WES】TxnBase_WES_LotSN_PrintForPDA(物料批号打印)
【WES】TxnBase_WES_LotTrackBatch(批号追溯--批量)
【WES】TxnBase_WES_LotTrack(批号追溯)
【WES】TxnBase_WES_Lot_InCellCheck(上架策略)
【WES】TxnBase_WES_Lot_OutCellCheck_PickingList(出库策略--领料)
【WES】TxnBase_WES_Lot_OutCellCheck_SaleDelivery(出库策略--销售发货)
【WES】TxnBase_WES_Vendor_LotRuleCheck(供应批号规则检查)
函数类【通用】
【OrBit】Convert10ToUserXSerial(10进制 转换为 “任意自定义进制” 序列)
【OrBit】Convert10ToUserX(10进制 转换为 “任意自定义进制”)
【OrBit】Convert10ToXSerial(10进制 转换为 2到36进制 “序列”)
【OrBit】Convert10ToX(10进制 转换为 2到36进制)
【OrBit】ConvertXTo10(2到36进制 转换为 10进制)
【OrBit】Fn_GetObjectPKId(根据主键头及序列计数值获取主键)
【OrBit】TFn_BillStates_Table(获取单据状态表)
【OrBit】TFn_BillType_Table(获取单据类型表)
【OrBit】TFn_UserCodeToTable(获取用户自定义编码)
【OrBit】TFn_UserCode_Table(获取用户编码表)
【WES】TFn_ParsingBarcodeStr
存储过程类【通用】
【MES】LotOnResourceBackflushDoMethod(通用生产扣料)
【MES】LotOnSMTBackflushDoMethod(SMT扣料)
【MES】SysCheckLotStatus(规程检查) --【5大接口之一】
【MES】TxnBase_DataChainMainLine(创建数据链) --【5大接口之一】
【MES】TxnBase_IsolationLot_Submit(批次隔离)
【MES】TxnBase_LotMove(批号移动,移动到下一个节点) --【5大接口之一】
【MES】TxnBase_LotNonStdMove(非标准移动) --【5大接口之一】
【MES】TxnBase_LotStart(批号启动) --【5大接口之一】
【MES】TxnBase_MES_CollectSNCheck(采集项SN检查)
【MES】TxnBase_Production_Feedback(生产报工)
【OrBit】StartRuleSNDoMethod / StartRuleSN_BatchDoMethod(序列号接口)
【OrBit】Txn_BillNewSN(生成--系统单据号)
【QMS】TxnBase_QMS_IQCCheck_RuleShift(IQC宽严转换)
-
+
首页
CLR_CallWebAPIEx3 [调用外部系统接口]
# 一、概述 1. CLR_CallWebAPIEx3支持对WebApi、WebService接口的调用; 2. 对于WebService,不管是否开启GET、POST方法,都支持调用; 3. 支持大部分HttpMethod:POST、GET、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE 4. 支持多种接口传参方式,包括:URL参数、请求头参数、请求体参数,以及混合使用多种方式传参 5. 支持基本认证 6. 支持Token认证(请求头) 7. 支持获取回应头信息。有的接口会通过回应Header返回信息 8. 支持超时定义 9. 支持Content-Type定义(请求头) 10.支持文件上传。@PostFormParams传参(键值对),对于上传文件的键值对,key请加“OrBitFile:”前缀(为了标识),比如:key为“OrBitFile:file”,value为“D:\1.png”。 --10.1. 注意:文件路径支持2种:绝对路径(文件在@LocalWCFUrl对应的服务器,例如:D:\1.png);http/https路径(例如:http://mom_dev/OrBitPluginServiceMOMR16/AssyOK.png) --10.2.绝大部分在Postman工具上能调用的上传接口,比如:钉钉、企业微信等,都可以使用此工具调用 11. 此接口所包含情况已涵盖了:CLR_CallWebAPI、CLR_CallWebAPIEx 、CLR_CallWebAPIEx2,以后可以统一使用此接口调用外部接口 12. 此接口必须输入@LocalWCFUrl参数,即通过应用服务器调用外部接口,再把结果返回数据库服务器 13. 此工具与Postman工具使用基本一致,请按对应传参 14.函数包(请导入系统),包括类型核函数的定义:Dictionary_Table、Fn_GetKeyValueStr、TFn_GetKeyValue_ByXml,通过此可以快速组合@Headers、@PostFormParams、@GetParams对应的键值对 [【附件】Dictionary_GetKeyValueStr.oap](/media/attachment/2023/12/Dictionary_GetKeyValueStr.oap) # 二、注意 1. @ReceiveData返回信息中,凡是以“[Err]”开头的异常,有2种原因:CLR没装好(卸载干净重新装);网络不通或无法访问外网(检查网络) 2. @ReceiveData返回信息中,凡是不以“[Err]”开头的异常,都是接口返回的信息,按信息去排查问题(比如:接口对接要求),问接口对接方。 3. 调用时有异常,询问写CLR_CallWebAPIEx3的人很可能也不知道怎么解决,因为接口怎么对接,怎么调用第3方接口,只有具体接口对接的人知道(比如:对接双方),CLR_CallWebAPIEx3只是一个工具而已 # 三、存储过程 ```sql /* Explain: 1.在存储过程中统一调用 WebApi、WebServer 接口 2.@Headers、@PostFormParams、@GetParams用于传键值对,键值对格式为key01<|=|>12345<|&|>key2<|=|>99999999,表示为key01=12345;key2=99999999 3.对于键值对(@Headers、@PostFormParams、@GetParams),可以使用dbo.Fn_GetKeyValueStr(@Dictionary_Table_1)函数生成,避免人为组合错误 4.你会使用Postman工具,就会使用CLR_CallWebAPIEx3 5.看提示操作即可(错误时,@ReceiveData返回提示信息,@return_value等于-1) */ DECLARE @return_value int=-1 DECLARE @ReceiveData nvarchar(max)='' DECLARE @ReceiveHeader nvarchar(max)='' DECLARE @LocalWCFUrl nvarchar(2000)='' DECLARE @WebAPIUrl nvarchar(max)='' DECLARE @HttpMethodA nvarchar(20)='' DECLARE @UserName nvarchar(50)='' DECLARE @UserPassword nvarchar(50)='' DECLARE @TimeOutS int=0 DECLARE @Headers nvarchar(max)='' DECLARE @PostFormParams nvarchar(max)='' DECLARE @PostRawParams nvarchar(max)='' DECLARE @GetParams nvarchar(max)='' EXEC @return_value=dbo.CLR_CallWebAPIEx3 @ReceiveData = @ReceiveData OUTPUT,--回应数据 @ReceiveHeader = @ReceiveHeader OUTPUT,--回应报头。xml格式,可以函数dbo.TFn_GetKeyValue_ByXml(@xmlStr)解析或自行定义解析 @LocalWCFUrl = @LocalWCFUrl,--Local WCF Url @WebAPIUrl = @WebAPIUrl,--api url @HttpMethodA = @HttpMethodA,--POST/GET/PUT/DELETE/PATCH/HEAD/OPTIONS/Trace @UserName = @UserName,--基本认证-用户。(可选,根据接口调用要求) @UserPassword = @UserPassword,--基本认证-密码。(可选,根据接口调用要求) @TimeOutS = @TimeOutS,--超时时间。(可选) @Headers = @Headers,--请求头。(可选,根据接口调用要求) @PostFormParams = @PostFormParams,--表单,键值对。(可选,根据接口调用要求) @PostRawParams = @PostRawParams,--Raw[任意格式的文本]。(可选,根据接口调用要求) @GetParams = @GetParams--地址参数,键值对.(可选,根据接口调用要求,一般用于get请求) SELECT @return_value as return_value,@ReceiveData AS ReceiveData,@ReceiveHeader AS ReceiveHeader ``` ```sql /* 1、使用Dictionary_Table类型 和 函数Fn_GetKeyValueStr来获取键值对字符串 */ DECLARE @FormParams Dictionary_Table; INSERT INTO @FormParams ( [key], value ) SELECT 'userName','HH0102' UNION SELECT 'UserPassword','123456' --输出:userName<|=|>HH0102<|&|>UserPassword<|=|>sa SELECT dbo.Fn_GetKeyValueStr(@FormParams) ``` ```sql /* 1、使用TFn_GetKeyValue_ByXml函数解析“回应头” */ DECLARE @ReceiveHeader nvarchar(max)='<NewDataSet> <SQLDataSet> <key>Access-Control-Allow-Origin</key> <value>*</value> </SQLDataSet> <SQLDataSet> <key>Access-Control-Allow-Methods</key> <value>POST, GET, OPTIONS,DELETE,PUT</value> </SQLDataSet> </NewDataSet>' SELECT * FROM dbo.TFn_GetKeyValue_ByXml(@ReceiveHeader) ``` # **四、例子** # # 1、钉钉上传素材 ![](/media//202312/2023-12-15_092354.png) ````sql DECLARE @UrlTable Dictionary_Table DECLARE @HeaderTable Dictionary_Table DECLARE @FormTable Dictionary_Table --Url INSERT INTO @UrlTable ( [key], value ) SELECT 'access_token','d8d66399dac3370fabc6c48380b23dbe' UNION ALL SELECT 'type','image' --Form INSERT INTO @FormTable ( [key], value ) SELECT 'OrBitFile:media','D:\1.png' DECLARE @return_value INT=-1 DECLARE @ReceiveData NVARCHAR(MAX) DECLARE @ReceiveHeader NVARCHAR(MAX) DECLARE @Headers NVARCHAR(MAX)=dbo.Fn_GetKeyValueStr(@HeaderTable) DECLARE @PostFormParams NVARCHAR(MAX)=dbo.Fn_GetKeyValueStr(@FormTable) DECLARE @GetParams NVARCHAR(MAX)=dbo.Fn_GetKeyValueStr(@UrlTable) DECLARE @PostRawParams NVARCHAR(MAX)='' EXEC @return_value=dbo.CLR_CallWebAPIEx3 @ReceiveData=@ReceiveData OUTPUT, @ReceiveHeader=@ReceiveHeader OUTPUT, @LocalWCFUrl=N'http://MOM_Dev/OrBitWCFMOM_Dev_R16/', @WebAPIUrl=N'https://oapi.dingtalk.com/media/upload', @HttpMethodA=N'post', @UserName=N'', @UserPassword=N'', @TimeOutS=0, @Headers=@Headers, @PostFormParams=@PostFormParams, @PostRawParams=@PostRawParams, @GetParams=@GetParams SELECT @ReceiveData,@ReceiveHeader ```` # # 2、企业微信上传素材 ![](/media//202312/2023-12-15_091818.png) ```sql DECLARE @UrlTable Dictionary_Table DECLARE @HeaderTable Dictionary_Table DECLARE @FormTable Dictionary_Table --Url INSERT INTO @UrlTable ( [key], value ) SELECT 'access_token','wEOeTbdBOUhALsz3q_JW6HqxtfHx07wSshsS6XTvQHF19nBfjONlTmjju0FE6DL9TlvkDAYrIqYdv_Y4FTxlhUzXVmegmQXoToMH80cfCYYnOOnOV530o-lXtTjVphKbGb5gvdUGtIvdbmeYMsgznBJmtp8SKX-VrGZesQyO2IpGc4SFXGErxMkEjQ6fudbg752pF-L9k7pbHKgcN2AX-A' UNION ALL SELECT 'type','image' --Form INSERT INTO @FormTable ( [key], value ) SELECT 'OrBitFile:media','D:\1.png' DECLARE @return_value INT=-1 DECLARE @ReceiveData NVARCHAR(MAX) DECLARE @ReceiveHeader NVARCHAR(MAX) DECLARE @Headers NVARCHAR(MAX)=dbo.Fn_GetKeyValueStr(@HeaderTable) DECLARE @PostFormParams NVARCHAR(MAX)=dbo.Fn_GetKeyValueStr(@FormTable) DECLARE @GetParams NVARCHAR(MAX)=dbo.Fn_GetKeyValueStr(@UrlTable) DECLARE @PostRawParams NVARCHAR(MAX)='' EXEC @return_value=dbo.CLR_CallWebAPIEx3 @ReceiveData=@ReceiveData OUTPUT, @ReceiveHeader=@ReceiveHeader OUTPUT, @LocalWCFUrl=N'http://MOM_Dev/OrBitWCFMOM_Dev_R16/', @WebAPIUrl=N'https://qyapi.weixin.qq.com/cgi-bin/media/upload', @HttpMethodA=N'post', @UserName=N'', @UserPassword=N'', @TimeOutS=0, @Headers=@Headers, @PostFormParams=@PostFormParams, @PostRawParams=@PostRawParams, @GetParams=@GetParams SELECT @return_value,@ReceiveData,@ReceiveHeader ``` # # 3、平台OrBitWebAPI.ashx接口 ![](/media//202312/2023-12-15_093543.png) ````sql DECLARE @UrlTable Dictionary_Table DECLARE @HeaderTable Dictionary_Table DECLARE @FormTable Dictionary_Table INSERT INTO @FormTable ( [key], value ) SELECT 'userName','HH0102' UNION SELECT 'UserPassword','s111111111' DECLARE @return_value INT=-1 DECLARE @ReceiveData NVARCHAR(MAX) DECLARE @ReceiveHeader NVARCHAR(MAX) DECLARE @Headers NVARCHAR(MAX)=dbo.Fn_GetKeyValueStr(@HeaderTable) DECLARE @PostFormParams NVARCHAR(MAX)=dbo.Fn_GetKeyValueStr(@FormTable) DECLARE @GetParams NVARCHAR(MAX)=dbo.Fn_GetKeyValueStr(@UrlTable) DECLARE @PostRawParams NVARCHAR(MAX)='' EXEC @return_value=dbo.CLR_CallWebAPIEx3 @ReceiveData=@ReceiveData OUTPUT, @ReceiveHeader=@ReceiveHeader OUTPUT, @LocalWCFUrl=N'http://MOM_Dev/OrBitWCFMOM_Dev_R16V', @WebAPIUrl=N'http://121.37.203.18/OrBitWCFMOM_Dev_R16V/OrBitWebAPI.ashx', @HttpMethodA=N'post', @UserName=N'', @UserPassword=N'', @TimeOutS=0, @Headers=@Headers, @PostFormParams=@PostFormParams, @PostRawParams=@PostRawParams, @GetParams=@GetParams SELECT @return_value,@ReceiveData,@ReceiveHeader ```` # # 3、钉钉发消息例子大全 ```sql DECLARE @ReceiveData NVARCHAR (MAX) , @ReceiveHeader NVARCHAR (MAX) ; DECLARE @appkey NVARCHAR (200) = N'dinghgxdjrt0qs3uvmno' ; DECLARE @appsecret NVARCHAR (200) = N'AByPseOZuIBnJvBQCjKkVQaFMSX-yW4Orpz9GCvwr5cKqxi9vcu7xm3jPtTzwfwf' ; DECLARE @LocalWCFUrl NVARCHAR (200) = N'http://MOM_Dev/OrBitWCFMOM_Dev_R16/' ; DECLARE @WebAPIUrl NVARCHAR (MAX) = N'https://oapi.dingtalk.com/gettoken?appkey=' + @appkey + N'&appsecret=' + @appsecret ; --****************【 一、获取tocken 】***************** EXEC dbo.CLR_CallWebAPIEx3 @ReceiveData = @ReceiveData OUTPUT -- nvarchar(max) , @ReceiveHeader = @ReceiveHeader OUTPUT , @LocalWCFUrl = @LocalWCFUrl , @HttpMethodA = N'GET' , @WebAPIUrl = @WebAPIUrl , @UserName = N'' -- nvarchar(100) , @UserPassword = N'' -- nvarchar(100) , @TimeOutS = 0 -- int , @Headers = '' , @PostFormParams = N'' -- nvarchar(max) , @PostRawParams = N'' -- nvarchar(max) , @GetParams = N'' ; -- nvarchar(max) --SELECT @ReceiveData; -- 解析tocken DECLARE @tocken NVARCHAR (MAX) = N'' ; SELECT @tocken = [Value] FROM OPENJSON( @ReceiveData ) WHERE [Key] = 'access_token' ; SELECT '获取Token',@tocken ; DECLARE @Headers NVARCHAR (200)='' DECLARE @JsonStr NVARCHAR (MAX) = N'' ; --****************【 二、上传文件素材 】***************** SET @WebAPIUrl = N'https://oapi.dingtalk.com/media/upload?access_token=' + @tocken + N'&type=image' ; SET @JsonStr = N'OrBitFile:media<|=|>D:\1.png' ; -- WCF服务器的文件路径 EXEC dbo.CLR_CallWebAPIEx3 @ReceiveData = @ReceiveData OUTPUT -- nvarchar(max) , @ReceiveHeader = @ReceiveHeader , @LocalWCFUrl = @LocalWCFUrl , @HttpMethodA = N'POST' , @WebAPIUrl = @WebAPIUrl , @UserName = N'' , @UserPassword = N'' , @TimeOutS = 0 , @Headers = @Headers , @PostFormParams = @JsonStr , @PostRawParams = '' , @GetParams = N'' ; -- 解析tocken DECLARE @media_Id NVARCHAR (MAX) = N'' ; SELECT @media_Id = [Value] FROM OPENJSON( @ReceiveData ) WHERE [Key] = 'media_id' ; SELECT '上传素材结果',@ReceiveData,@media_Id ; --****************【 三、钉钉机器人:发送机器人消息 】***************** SET @WebAPIUrl = N'https://api.dingtalk.com/v1.0/robot/oToMessages/batchSend' ; SET @Headers= N'x-acs-dingtalk-access-token<|=|>' + @tocken + N'<|&|>Content-Type<|=|>application/json' ; --- 机器人robotCode dinghgxdjrt0qs3uvmno SET @JsonStr = N'{ "msgParam":"{ \"content\": \"机器人测试消息1... '+CONVERT(NVARCHAR(50),GETDATE(),121)+'\" }", "msgKey":"sampleText", "robotCode":"dingb3tamaqdi3v4jefo", "userIds":[ "manager7362" ] }'; EXEC dbo.CLR_CallWebAPIEx3 @ReceiveData = @ReceiveData OUTPUT -- nvarchar(max) , @ReceiveHeader = @ReceiveHeader , @LocalWCFUrl = @LocalWCFUrl , @HttpMethodA = N'POST' , @WebAPIUrl = @WebAPIUrl , @UserName = N'' , @UserPassword = N'' , @TimeOutS = 0 , @Headers = @Headers , @PostFormParams = '' , @PostRawParams = @JsonStr , @GetParams = N'' ; SELECT '发送机器人消息',@ReceiveData; --****************【 四、钉钉机器人:发送机器人群聊消息(文本或文件) 】***************** --创建群,获取chartId/openConversationId DECLARE @webhook VARCHAR (MAX) = '301efddcd8a82ceed5df4d88184d9ee3961438533451e32433120501bd7e808f' ; SET @WebAPIUrl = N'https://api.dingtalk.com/v1.0/robot/groupMessages/send' ; -- 文本消息 --SET @JsonStr -- = N'{ -- "msgParam":"{ \"content\": \"机器人文本消息测试 webhook方式 ... ' + CONVERT( NVARCHAR (50), GETDATE( ), 121 ) -- + N'\" }", -- "msgKey":"sampleText", -- "token":"' + @webhook + N'" --}' ; -- 文件消息 SET @JsonStr = N'{ "msgParam": "{\"mediaId\": \"'+@media_Id+'\",\"fileName\": \"1.png\",\"fileType\": \"png\"}", "msgKey": "sampleFile", "token": "'+@webhook+'" }' ; PRINT @JsonStr ; EXEC dbo.CLR_CallWebAPIEx3 @ReceiveData = @ReceiveData OUTPUT -- nvarchar(max) , @ReceiveHeader = @ReceiveHeader , @LocalWCFUrl = @LocalWCFUrl , @HttpMethodA = N'POST' , @WebAPIUrl = @WebAPIUrl , @UserName = N'' , @UserPassword = N'' , @TimeOutS = 0 , @Headers = @Headers , @PostFormParams = '' , @PostRawParams = @JsonStr , @GetParams = N'' ; SELECT '送机器人群聊消息(文本或文件)',@ReceiveData ; ``` ![](/media//202312/2023-12-15_102157.png)
HH0102
2023年12月15日 10:22
分享
上一篇
下一篇
目录
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
下载Markdown文件