以下操作案例中關於第三方系統向泛微OA系統的移動端和電腦端版本推送消息說明:
• 移動端使用的是泛微系統登錄賬號(工號)來最終實現消息的推送
• 電腦端使用的是泛微系統用戶表中的id字段來最終實現消息的推送
一、移動端消息推送
1、超級管理員賬號,登錄移動端門戶管理平台
2、消息中心--消息類型創建
-
配置完成后,會自動生成消息標識Id;然后根據外部系統推送示例,實現移動端消息推送。
-
實現移動端消息推送,必須要消息標識Id和e-mobile消息推送密鑰
消息標識Id:新建消息類型成功后,會自動生成消息標識Id
消息推送密鑰:“服務器管理”—“系統狀態”—服務器屬性:e-mobile消息推送密鑰
-
請勿必保證license值是有效可用的,否則會導致調用接口失敗
-
以上都配置完成后,修改調用程序中對應的相關參數,可能首次調用接口無法接收到消息,請先多次調用后。
二、電腦端消息推送
1、超級管理員賬號,登錄協同辦公平台
2、后端應用中心
頁面右上角更多,點擊 后端應用中心
3、配置允許調用工作流程WebService服務權限的IP地址
- 頁面地址為:/workflow/UserList.jsp
4、配置允許調用人力資源WebService服務權限的IP地址
-
需要在OA的/Ecology/WEB-INF/prop/HrmWebserviceIP.properties配置文件中配置調用接口客戶端的IP,調用接口時傳入的參數ip包涵在此配置文件才能調用人力資源WebService服務的所有接口。
5、流程引擎--表單管理--表單管理,創建自定義表單
- 點擊“新建”按紐,彈出新建表單模態窗,填寫“表單名稱”,最后點擊“保存”按紐。
- “批量刪除”按紐旁邊文本框中輸入填寫的表單名稱,點擊搜索,查詢添加的表單,然后編輯該表單
- 維護表單相關字段信息
6、流程引擎—路徑管理—路徑設置,創建流程
- 選擇流程放在哪個路徑目錄下,然后點擊目錄文件夾,再點擊“添加”按紐,填寫路徑流程信息
- 基礎設置--基本信息,只需要填寫“路徑名稱”、“對應表單”2個字段,其它可以不添加或修改
- 流轉設置--節點信息,--編輯,添加流程節點,只需要添加“創建“、“歸檔“ 2 個節點
- 給節點,添加操作者,如下圖所示
- 給節點,設置表單內容,如下圖所示
- 流轉設置--出口信息,添加出口信息即流程結束節點,如下圖所示
7、查看流程Id(非常重要)
- 調用創建流程接口時,需要使用流程Id(workflowId)
- 調用創建流程接口時,需要創建人Id(creatorId),該值對應的是泛微OA系統用戶表中的用戶Id
8、門戶--個人辦公,配置消息顯示
附.net代碼

/// <summary> /// 調用泛微OA系統接口 /// </summary> public class EcologyManager { ILog log = log4net.LogManager.GetLogger("EcologyManager"); static String basePushUrl = ConfigurationManager.AppSettings["EcologyMobilePushUrl"]; static String key = ConfigurationManager.AppSettings["EcologyMobilePushKey"];//emobile后台的推送秘鑰 static String messageUrl = ConfigurationManager.AppSettings["EcologyMobileMessageUrl"]; static String messageTypeId = ConfigurationManager.AppSettings["EcologyMobileMessageTypeId"]; static String workflowServiceUrl = ConfigurationManager.AppSettings["EcologyWorkflowServiceUrl"]; static String hrmServiceUrl = ConfigurationManager.AppSettings["EcologyHrmServiceUrl"]; static String workflowId = ConfigurationManager.AppSettings["EcologyWorkflowId"]; static String workflowLevel = ConfigurationManager.AppSettings["EcologyWorkflowLevel"]; static String hrmIpAddress = ConfigurationManager.AppSettings["EcologyHrmIpAddress"]; /// <summary> /// 向泛微移動端推送消息 /// </summary> /// <param name="message">消息</param> /// <param name="receiverId">接收者的loginid,多用戶使用英文半角逗號分開</param> /// <returns></returns> public void PushMobileMessage(string message, string receiverId) { try { //url = url ?? messageUrl + "?account=" + receiverId; string badge = "1"; //消息數量+1 HttpClient httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1"); Dictionary<string, string> para = new Dictionary<string, string>(); para.Add("messagetypeid", messageTypeId);//在mobile后台注冊的消息類型id para.Add("module", "-2"); //標示屬於自定義消息 para.Add("url", messageUrl); string paraJson = Sheng.Kernal.JsonHelper.Serializer(para); StringBuilder sendMsg = new StringBuilder(); if (message.Length > 100) message = message.Substring(0, 100) + "..."; sendMsg.Append(receiverId); sendMsg.Append(message); sendMsg.Append(badge); sendMsg.Append(paraJson); sendMsg.Append(key); string hash = Md5Hex(sendMsg.ToString()); List<KeyValuePair<String, String>> paramList = new List<KeyValuePair<String, String>>(); paramList.Add(new KeyValuePair<string, string>("userid", receiverId)); paramList.Add(new KeyValuePair<string, string>("msg", message)); paramList.Add(new KeyValuePair<string, string>("badge", badge)); paramList.Add(new KeyValuePair<string, string>("para", paraJson)); paramList.Add(new KeyValuePair<string, string>("hash", hash)); HttpResponseMessage response = httpClient.PostAsync(new Uri(basePushUrl), new FormUrlEncodedContent(paramList)).Result; log.Info($"Ecology移動端消息推送:{Environment.NewLine}用戶工號:{receiverId },消息內容:{message };{Environment.NewLine}接口響應結果:{Sheng.Kernal.JsonHelper.Serializer(response)}"); } catch (Exception ex) { log.Error($"Ecology移動端消息推送:{Environment.NewLine}用戶工號:{receiverId },消息內容:{message };{Environment.NewLine}接口異常,異常信息:{ex.Message},異常堆棧信息:{ex.StackTrace}"); } } /// <summary> /// 向泛微電腦端推送消息 /// </summary> /// <param name="title">消息標題</param> /// <param name="ecoloryUserId">消息接收人</param> public void PushPCMessage(string title, int ecoloryUserId) { try { //主字段 WorkflowRequestTableField[] wrti = new WorkflowRequestTableField[1]; //字段信息 wrti[0] = new WorkflowRequestTableField(); WorkflowRequestTableRecord[] wrtri = new WorkflowRequestTableRecord[1];//主字段只有一行數據 wrtri[0] = new WorkflowRequestTableRecord(); wrtri[0].workflowRequestTableFields = wrti; WorkflowMainTableInfo wmi = new WorkflowMainTableInfo(); wmi.requestRecords = wrtri; WorkflowBaseInfo wbi = new WorkflowBaseInfo(); wbi.workflowId = workflowId; WorkflowRequestInfo wri = new WorkflowRequestInfo();//流程基本信息 wri.creatorId = ecoloryUserId.ToString();//接收人 wri.requestLevel = workflowLevel; //0 正常,1重要,2緊急 wri.requestName = title;//流程標題 wri.workflowMainTableInfo = wmi;//添加主字段數據 wri.workflowBaseInfo = wbi; //執行創建流程接口 WorkflowService workflowService = new WorkflowService(); workflowService.Url = workflowServiceUrl; String requestid = workflowService.doCreateWorkflowRequest(wri, ecoloryUserId);//接收人 log.Info($"Ecology電腦端消息推送;{Environment.NewLine}泛微USERID:{ecoloryUserId },消息內容:{title }{Environment.NewLine}接口響應結果:{requestid}"); } catch (Exception ex) { log.Error($"Ecology電腦端消息推送;{Environment.NewLine}泛微USERID:{ecoloryUserId },消息內容:{title }{Environment.NewLine}接口異常,異常信息:{ex.Message},異常堆棧信息:{ex.StackTrace}"); } } /// <summary> /// 根據工號獲取泛微用戶信息 /// </summary> /// <param name="workCode">工號</param> /// <returns></returns> public EcologyUser GetEcologyUserByWorkCode(string workCode) { EcologyUser ecologyUser = new EcologyUser(); try { //調用泛微OA系統人力資源接口 //需要在泛微OA系統的安裝目錄 /Ecology/WEB-INF/prop/HrmWebserviceIP.properties 配置文件中配置調用接口客戶端的IP(=hrmIpAddress),否則無法調用人力資源相關接口 HrmService hrmService = new HrmService(); hrmService.Url = hrmServiceUrl; //獲取泛微所有用戶 string resultXml = hrmService.getHrmUserInfoXML(hrmIpAddress, "", "", "", "", ""); log.Info("調用泛微OA人力資源getHrmUserInfoXML接口,接口返回數據:" + resultXml); if (string.IsNullOrWhiteSpace(resultXml) || resultXml == "<UserBean-array/>") { return ecologyUser; } //xml轉成List List<EcologyUser> userBeanList = Sheng.Kernal.JsonHelper.XmlToList<EcologyUser>(resultXml, "UserBean-array"); if (userBeanList.Any() == false) { return ecologyUser; } ecologyUser = userBeanList.FirstOrDefault(x => x.WorkCode == workCode); } catch (Exception ex) { log.Error("調用泛微OA人力資源getHrmUserInfoXML接口異常,異常信息:" + ex.Message + Environment.NewLine + ex.StackTrace); } return ecologyUser; } private static string Md5Hex(string data) { MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); byte[] dataHash = md5.ComputeHash(Encoding.UTF8.GetBytes(data)); StringBuilder sb = new StringBuilder(); foreach (byte b in dataHash) { sb.Append(b.ToString("x2").ToLower()); } return sb.ToString(); } }