提交 3bd2b973 编写于 作者: F fancy

外接的几个消息增加cms功能

上级 aba05112
......@@ -46,7 +46,7 @@ public class Dingding extends ConfigObject {
@FieldDescribe("回调encodingAesKey")
private String encodingAesKey = "";
@FieldDescribe("钉钉消息打开工作的url地址,如:http://dev.o2oa.net/x_desktop/")
@FieldDescribe("钉钉消息打开工作的url地址,如:https://sample.o2oa.net/x_desktop/")
private String workUrl = "";
@FieldDescribe("钉钉消息处理完成后跳转到特定的门户页面的Id")
......
......@@ -39,9 +39,9 @@ public class JpushConfig extends ConfigObject {
private String appKey;
@FieldDescribe("极光推送应用的Master Secret")
private String masterSecret;
@FieldDescribe("是否开启华为推送")
@FieldDescribe("是否开启华为推送,已废弃")
private Boolean huaweiPushEnable;
@FieldDescribe("华为推送的配置")
@FieldDescribe("华为推送的配置,已废弃")
private HuaweiPushConfig huaweiPushConfig;
@FieldDescribe("苹果推送证书路径")
private String apnsKeystorePath;
......
......@@ -37,7 +37,7 @@ public class Qiyeweixin extends ConfigObject {
private String token = "";
@FieldDescribe("回调encodingAesKey")
private String encodingAesKey = "";
@FieldDescribe("企业微信消息打开工作的url地址,如:http://dev.o2oa.net/x_desktop/")
@FieldDescribe("企业微信消息打开工作的url地址,如:https://sample.o2oa.net/x_desktop/")
private String workUrl = "";
@FieldDescribe("企业微信消息处理完成后跳转到特定的门户页面的Id")
private String messageRedirectPortal = "";
......
......@@ -36,7 +36,7 @@ public class WeLink extends ConfigObject {
@FieldDescribe("是否启用消息推送")
private Boolean messageEnable;
@FieldDescribe("WeLink消息打开工作的url地址,如:http://dev.o2oa.net/x_desktop/")
@FieldDescribe("WeLink消息打开工作的url地址,如:https://sample.o2oa.net/x_desktop/")
private String workUrl = "";
@FieldDescribe("WeLink消息处理完成后跳转到特定的门户页面的Id")
......
......@@ -45,7 +45,7 @@ public class DingdingConsumeQueue extends AbstractQueue<Message> {
+ Config.dingding().getCorpId() + "&container_type=work_platform&app_id=0_"
+ Config.dingding().getAgentId() + "&redirect_type=jump&redirect_url="
+ URLEncoder.encode(openUrl, DefaultCharset.name);
LOGGER.info("钉钉pc 打开消息 url:" + dingtalkUrl);
LOGGER.info("钉钉pc 打开消息 url:{}", ()-> dingtalkUrl);
m.getMsg().setMsgtype("markdown");
m.getMsg().getMarkdown().setTitle(message.getTitle());
m.getMsg().getMarkdown().setText("[" + message.getTitle() + "](" + dingtalkUrl + ")");
......@@ -53,12 +53,11 @@ public class DingdingConsumeQueue extends AbstractQueue<Message> {
} else {
m.getMsg().getText().setContent(message.getTitle());
}
// https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=ACCESS_TOKEN
String address = Config.dingding().getOapiAddress()
+ "/topapi/message/corpconversation/asyncsend_v2?access_token="
+ Config.dingding().corpAccessToken();
LOGGER.debug("钉钉发送消息url:" + address);
LOGGER.debug("钉钉消息体:" + m.toString());
LOGGER.debug("钉钉发送消息url:{}" , () -> address);
LOGGER.debug("钉钉消息体:{}" , m::toString);
DingdingMessageResp resp = HttpConnection.postAsObject(address, null, m.toString(),
DingdingMessageResp.class);
if (resp.getErrcode() != 0) {
......@@ -119,25 +118,14 @@ public class DingdingConsumeQueue extends AbstractQueue<Message> {
* @return
*/
private String getDingdingOpenCMSDocumentUrl(String messageBody) {
String o2oaUrl = null;
try {
String openPage = getOpenPageUrl(messageBody);
String o2oaUrl = Config.dingding().getWorkUrl() + "ddsso.html?redirect=";
if (StringUtils.isEmpty(openPage)) {
String id = getCmsDocumentId(messageBody);
if (StringUtils.isEmpty(id)) {
return null;
}
String docUrl = "cmsdocMobile.html?id=" + id;
o2oaUrl = o2oaUrl + docUrl;
} else {
o2oaUrl = o2oaUrl + openPage;
}
LOGGER.info("o2oa 地址:" + o2oaUrl);
return o2oaUrl;
o2oaUrl = Config.dingding().getWorkUrl() + "ddsso.html?redirect=";
return OuterMessageHelper.getOpenCMSDocumentUrl(o2oaUrl, messageBody);
} catch (Exception e) {
LOGGER.error(e);
return null;
}
return null;
}
/**
......@@ -148,10 +136,10 @@ public class DingdingConsumeQueue extends AbstractQueue<Message> {
*/
private String getDingdingOpenWorkUrl(String messageBody) {
try {
String openPage = getOpenPageUrl(messageBody);
String openPage = OuterMessageHelper.getOpenPageUrl(messageBody);
String o2oaUrl = Config.dingding().getWorkUrl() + "ddsso.html?redirect=";
if (StringUtils.isEmpty(openPage)) {
String work = getWorkIdFromBody(messageBody);
String work = OuterMessageHelper.getWorkIdFromBody(messageBody);
if (StringUtils.isEmpty(work) || StringUtils.isEmpty(o2oaUrl)) {
return null;
}
......@@ -177,65 +165,6 @@ public class DingdingConsumeQueue extends AbstractQueue<Message> {
return null;
}
/**
* 获取workid or workCompleted
*
* @param messageBody
* @return
*/
private String getWorkIdFromBody(String messageBody) {
try {
JsonObject object = gson.fromJson(messageBody, JsonObject.class);
if (object.get("work") != null) {
return object.get("work").getAsString();
}
if (object.get("workCompleted") != null) {
return object.get("workCompleted").getAsString();
}
} catch (Exception e) {
LOGGER.error(e);
}
return null;
}
/**
* 这个执行的前提是 MessageConnector.TYPE_CMS_PUBLISH.equals(message.getType()) ||
* MessageConnector.TYPE_CMS_PUBLISH_TO_CREATOR.equals(message.getType()) cms的消息
* body获取文档id
*
* @param messageBody
* @return
*/
private String getCmsDocumentId(String messageBody) {
try {
JsonObject object = gson.fromJson(messageBody, JsonObject.class);
if (object.get("id") != null) {
return object.get("id").getAsString();
}
} catch (Exception e) {
LOGGER.error(e);
}
return null;
}
/**
* body里面是否有 openPageUrl 这个字段 有就用这个字段作为跳转页面
*
* @param messageBody
* @return
*/
private String getOpenPageUrl(String messageBody) {
try {
JsonObject object = gson.fromJson(messageBody, JsonObject.class);
if (object.get("openPageUrl") != null) {
return object.get("openPageUrl").getAsString();
}
} catch (Exception e) {
LOGGER.error(e);
}
return null;
}
/**
* 是否需要把钉钉消息转成markdown格式消息 根据是否配置了钉钉工作链接、是否是工作消息(目前只支持工作消息)
*
......@@ -285,4 +214,95 @@ public class DingdingConsumeQueue extends AbstractQueue<Message> {
}
}
/**
* 一些公用方法
*/
public static class OuterMessageHelper {
/**
* 文档打开的url
* @param messageBody
* @return
*/
public static String getOpenCMSDocumentUrl(String bizBaseUrl, String messageBody) {
try {
String openPage = getOpenPageUrl(messageBody);
String o2oaUrl = bizBaseUrl;
if (StringUtils.isEmpty(openPage)) {
String id = getCmsDocumentId(messageBody);
if (StringUtils.isEmpty(id)) {
return null;
}
String docUrl = "cmsdocMobile.html?id=" + id;
o2oaUrl = o2oaUrl + docUrl;
} else {
o2oaUrl = o2oaUrl + openPage;
}
LOGGER.info("o2oa 业务地址:" + o2oaUrl);
return o2oaUrl;
} catch (Exception e) {
LOGGER.error(e);
}
return null;
}
/**
* body里面是否有 openPageUrl 这个字段 有就用这个字段作为跳转页面
*
* @param messageBody
* @return
*/
public static String getOpenPageUrl(String messageBody) {
try {
JsonObject object = gson.fromJson(messageBody, JsonObject.class);
if (object.get("openPageUrl") != null) {
return object.get("openPageUrl").getAsString();
}
} catch (Exception e) {
LOGGER.error(e);
}
return null;
}
/**
* 获取workid
*
* @param messageBody
* @return
*/
public static String getWorkIdFromBody(String messageBody) {
try {
JsonObject object = gson.fromJson(messageBody, JsonObject.class);
if (object.get("work") != null) {
return object.get("work").getAsString();
}
if (object.get("workCompleted") != null) {
return object.get("workCompleted").getAsString();
}
} catch (Exception e) {
LOGGER.error(e);
}
return "";
}
/**
* 这个执行的前提是 MessageConnector.TYPE_CMS_PUBLISH.equals(message.getType()) ||
* MessageConnector.TYPE_CMS_PUBLISH_TO_CREATOR.equals(message.getType()) cms的消息
* body获取文档id
*
* @param messageBody
* @return
*/
private static String getCmsDocumentId(String messageBody) {
try {
JsonObject object = gson.fromJson(messageBody, JsonObject.class);
if (object.get("id") != null) {
return object.get("id").getAsString();
}
} catch (Exception e) {
LOGGER.error(e);
}
return null;
}
}
}
package com.x.message.assemble.communicate;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.x.base.core.container.EntityManagerContainer;
......@@ -24,6 +17,12 @@ import com.x.message.assemble.communicate.message.WeixinTempMessage;
import com.x.message.assemble.communicate.message.WeixinTempMessage.WeixinTempMessageFieldObj;
import com.x.message.core.entity.Message;
import com.x.organization.core.entity.Person;
import org.apache.commons.lang3.StringUtils;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 发送微信公众号模版消息 Created by fancyLou on 3/11/21. Copyright © 2021 O2. All rights
......@@ -50,8 +49,7 @@ public class MpWeixinConsumeQueue extends AbstractQueue<Message> {
if (StringUtils.isNotEmpty(openId)) {
JsonObject object = gson.fromJson(message.getBody(), JsonObject.class);
Map<String, WeixinTempMessageFieldObj> data = concreteData(message, object, list);
String workId = object.get("work").getAsString();
String workUrl = getOpenUrl(workId);
String workUrl = getOpenUrl(message);
WeixinTempMessage wxMessage = new WeixinTempMessage();
wxMessage.setTouser(openId);
wxMessage.setUrl(workUrl);
......@@ -84,6 +82,22 @@ public class MpWeixinConsumeQueue extends AbstractQueue<Message> {
}
/**
* 判断打开地址
*
* @param message
* @return
*/
private String getOpenUrl(Message message) {
String openPage = DingdingConsumeQueue.OuterMessageHelper.getOpenPageUrl(message.getBody());
if (StringUtils.isNotEmpty(openPage)) {
return openPage;
} else {
String workId = DingdingConsumeQueue.OuterMessageHelper.getWorkIdFromBody(message.getBody());
return getOpenWorkUrl(workId);
}
}
private Map<String, WeixinTempMessageFieldObj> concreteData(Message message, JsonObject object,
List<MPweixinMessageTemp> list) {
Map<String, WeixinTempMessageFieldObj> data = new HashMap<>();
......@@ -146,7 +160,7 @@ public class MpWeixinConsumeQueue extends AbstractQueue<Message> {
}
}
private String getOpenUrl(String workId) {
private String getOpenWorkUrl(String workId) {
try {
String httpProtocol = Config.currentNode().getCenter().getHttpProtocol();
if (StringUtils.isEmpty(httpProtocol)) {
......
......@@ -2,6 +2,7 @@ package com.x.message.assemble.communicate;
import java.net.URLEncoder;
import com.x.base.core.project.message.MessageConnector;
import org.apache.commons.lang3.StringUtils;
import com.google.gson.Gson;
......@@ -34,13 +35,13 @@ public class QiyeweixinConsumeQueue extends AbstractQueue<Message> {
m.setTouser(business.organization().person().getObject(message.getPerson()).getQiyeweixinId());
String content = message.getTitle();
if (needTransferLink(message.getType())) {
String workUrl = getQywxOpenWorkUrl(message.getBody());
String workUrl = getOpenUrl(message);
if (StringUtils.isNotEmpty(workUrl)) {
content = "<a href=\"" + workUrl + "\">" + message.getTitle() + "</a>";
}
}
m.getText().setContent(content);
LOGGER.debug("微信消息:" + m.toString());
LOGGER.debug("微信消息:{}", m::toString);
String address = Config.qiyeweixin().getApiAddress() + "/cgi-bin/message/send?access_token="
+ Config.qiyeweixin().corpAccessToken();
QiyeweixinMessageResp resp = HttpConnection.postAsObject(address, null, m.toString(),
......@@ -60,6 +61,43 @@ public class QiyeweixinConsumeQueue extends AbstractQueue<Message> {
}
}
/**
* 判断打开地址
*
* @param message
* @return
*/
private String getOpenUrl(Message message) {
String openUrl = "";
// cms 文档
if (MessageConnector.TYPE_CMS_PUBLISH.equals(message.getType())
|| MessageConnector.TYPE_CMS_PUBLISH_TO_CREATOR.equals(message.getType())) {
openUrl = getQywxOpenCMSDocumentUrl(message.getBody());
} else { // 流程工作相关的
openUrl = getQywxOpenWorkUrl(message.getBody());
}
return openUrl;
}
/**
* 文档打开的url
*
* @param messageBody
* @return
*/
private String getQywxOpenCMSDocumentUrl(String messageBody) {
String o2oaUrl = null;
try {
o2oaUrl = Config.qiyeweixin().getWorkUrl() + "qiyeweixinsso.html?redirect=";
return DingdingConsumeQueue.OuterMessageHelper.getOpenCMSDocumentUrl(o2oaUrl, messageBody);
} catch (Exception e) {
LOGGER.error(e);
return null;
}
}
/**
* 生成单点登录和打开工作的地址
*
......@@ -68,7 +106,7 @@ public class QiyeweixinConsumeQueue extends AbstractQueue<Message> {
*/
private String getQywxOpenWorkUrl(String messageBody) {
try {
String work = getWorkIdFromBody(messageBody);
String work = DingdingConsumeQueue.OuterMessageHelper.getWorkIdFromBody(messageBody);
String o2oaUrl = Config.qiyeweixin().getWorkUrl();
String corpId = Config.qiyeweixin().getCorpId();
String agentId = Config.qiyeweixin().getAgentId();
......@@ -76,22 +114,27 @@ public class QiyeweixinConsumeQueue extends AbstractQueue<Message> {
|| StringUtils.isEmpty(agentId)) {
return null;
}
String workUrl = "workmobilewithaction.html?workid=" + work;
String messageRedirectPortal = Config.qiyeweixin().getMessageRedirectPortal();
if (messageRedirectPortal != null && !"".equals(messageRedirectPortal)) {
String portal = "portalmobile.html?id=" + messageRedirectPortal;
portal = URLEncoder.encode(portal, DefaultCharset.name);
workUrl += "&redirectlink=" + portal;
String openPage = DingdingConsumeQueue.OuterMessageHelper.getOpenPageUrl(messageBody);
if (StringUtils.isNotEmpty(openPage)) {
o2oaUrl = o2oaUrl + "qiyeweixinsso.html?redirect=" + openPage;
} else {
String workUrl = "workmobilewithaction.html?workid=" + work;
String messageRedirectPortal = Config.qiyeweixin().getMessageRedirectPortal();
if (messageRedirectPortal != null && !"".equals(messageRedirectPortal)) {
String portal = "portalmobile.html?id=" + messageRedirectPortal;
portal = URLEncoder.encode(portal, DefaultCharset.name);
workUrl += "&redirectlink=" + portal;
}
workUrl = URLEncoder.encode(workUrl, DefaultCharset.name);
o2oaUrl = o2oaUrl + "qiyeweixinsso.html?redirect=" + workUrl;
}
workUrl = URLEncoder.encode(workUrl, DefaultCharset.name);
o2oaUrl = o2oaUrl + "qiyeweixinsso.html?redirect=" + workUrl;
LOGGER.debug("o2oa 地址:" + o2oaUrl);
o2oaUrl = URLEncoder.encode(o2oaUrl, DefaultCharset.name);
LOGGER.debug("encode url :" + o2oaUrl);
String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + corpId
+ "&response_type=code&scope=snsapi_base" + "&agentid=" + agentId + "&redirect_uri=" + o2oaUrl
+ "&#wechat_redirect";
LOGGER.debug("final url :" + url);
LOGGER.debug("final url : {}" ,()-> url);
return url;
} catch (Exception e) {
LOGGER.error(e);
......@@ -100,26 +143,6 @@ public class QiyeweixinConsumeQueue extends AbstractQueue<Message> {
return "";
}
/**
* 获取workid
*
* @param messageBody
* @return
*/
private String getWorkIdFromBody(String messageBody) {
try {
JsonObject object = gson.fromJson(messageBody, JsonObject.class);
if (object.get("work") != null) {
return object.get("work").getAsString();
}
if (object.get("workCompleted") != null) {
return object.get("workCompleted").getAsString();
}
} catch (Exception e) {
LOGGER.error(e);
}
return null;
}
/**
* 是否需要把企业微信消息转成超链接消息 根据是否配置了企业微信应用链接、是否是工作消息(目前只支持工作消息)
......
package com.x.message.assemble.communicate;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.Gson;
import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.project.bean.NameValuePair;
import com.x.base.core.project.config.Config;
import com.x.base.core.project.config.WeLink;
import com.x.base.core.project.connection.HttpConnection;
import com.x.base.core.project.gson.XGsonBuilder;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.base.core.project.message.MessageConnector;
......@@ -23,10 +16,17 @@ import com.x.base.core.project.tools.DefaultCharset;
import com.x.message.assemble.communicate.message.WeLinkMessage;
import com.x.message.core.entity.Message;
import com.x.organization.core.entity.Person;
import org.apache.commons.lang3.StringUtils;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class WeLinkConsumeQueue extends AbstractQueue<Message> {
private static final Logger LOGGER = LoggerFactory.getLogger(WeLinkConsumeQueue.class);
private static final Gson gson = XGsonBuilder.instance();
protected void execute(Message message) throws Exception {
......@@ -55,7 +55,7 @@ public class WeLinkConsumeQueue extends AbstractQueue<Message> {
// 是否添加超链接
addHyperlink(message, m);
String address = Config.weLink().getOapiAddress() + "/messages/v3/send";
LOGGER.info("welink send url: " + address);
LOGGER.info("welink send url: {}" ,()-> address);
List<NameValuePair> heads = new ArrayList<>();
heads.add(new NameValuePair(WeLink.WeLink_Auth_Head_Key, Config.weLink().accessToken()));
WeLinkMessageResp resp = HttpConnection.postAsObject(address, heads, m.toString(), WeLinkMessageResp.class);
......@@ -70,7 +70,7 @@ public class WeLinkConsumeQueue extends AbstractQueue<Message> {
private void addHyperlink(Message message, WeLinkMessage m) {
if (needTransferLink(message.getType())) {
String workUrl = getDingdingOpenWorkUrl(message.getBody());
String workUrl = getOpenUrl(message);
if (workUrl != null && !"".equals(workUrl)) {
m.setUrlType("html");
m.setUrlPath(workUrl);
......@@ -108,51 +108,79 @@ public class WeLinkConsumeQueue extends AbstractQueue<Message> {
}
}
/**
* 生成单点登录和打开工作的地址
*
* 判断打开地址
*
* @param message
* @return
*/
private String getOpenUrl(Message message) {
String openUrl = "";
// cms 文档
if (MessageConnector.TYPE_CMS_PUBLISH.equals(message.getType())
|| MessageConnector.TYPE_CMS_PUBLISH_TO_CREATOR.equals(message.getType())) {
openUrl = getWeiLinkOpenCMSDocumentUrl(message.getBody());
} else { // 流程工作相关的
openUrl = getWeiLinkOpenWorkUrl(message.getBody());
}
return openUrl;
}
/**
* 文档打开的url
*
* @param messageBody
* @return
*/
private String getDingdingOpenWorkUrl(String messageBody) {
private String getWeiLinkOpenCMSDocumentUrl(String messageBody) {
String o2oaUrl = null;
try {
String work = getWorkIdFromBody(messageBody);
String o2oaUrl = Config.weLink().getWorkUrl();
if (work == null || "".equals(work) || o2oaUrl == null || "".equals(o2oaUrl)) {
return null;
}
String workUrl = "workmobilewithaction.html?workid=" + work;
String messageRedirectPortal = Config.weLink().getMessageRedirectPortal();
if (messageRedirectPortal != null && !"".equals(messageRedirectPortal)) {
String portal = "portalmobile.html?id=" + messageRedirectPortal;
portal = URLEncoder.encode(portal, DefaultCharset.name);
workUrl += "&redirectlink=" + portal;
}
workUrl = URLEncoder.encode(workUrl, DefaultCharset.name);
o2oaUrl = o2oaUrl + "welinksso.html?redirect=" + workUrl;
return o2oaUrl;
o2oaUrl = Config.weLink().getWorkUrl() + "welinksso.html?redirect=";
return DingdingConsumeQueue.OuterMessageHelper.getOpenCMSDocumentUrl(o2oaUrl, messageBody);
} catch (Exception e) {
LOGGER.error(e);
return null;
}
return "";
}
/**
* 获取workid
* 生成单点登录和打开工作的地址
*
* @param messageBody
* @return
*/
private String getWorkIdFromBody(String messageBody) {
private String getWeiLinkOpenWorkUrl(String messageBody) {
try {
JsonObject object = new JsonParser().parse(messageBody).getAsJsonObject();
return object.get("work").getAsString();
String work = DingdingConsumeQueue.OuterMessageHelper.getWorkIdFromBody(messageBody);
String o2oaUrl = Config.weLink().getWorkUrl();
if (work == null || "".equals(work) || o2oaUrl == null || "".equals(o2oaUrl)) {
return null;
}
String openPage = DingdingConsumeQueue.OuterMessageHelper.getOpenPageUrl(messageBody);
if (StringUtils.isNotEmpty(openPage)) {
o2oaUrl = o2oaUrl + "welinksso.html?redirect=" + openPage;
} else {
String workUrl = "workmobilewithaction.html?workid=" + work;
String messageRedirectPortal = Config.weLink().getMessageRedirectPortal();
if (messageRedirectPortal != null && !"".equals(messageRedirectPortal)) {
String portal = "portalmobile.html?id=" + messageRedirectPortal;
portal = URLEncoder.encode(portal, DefaultCharset.name);
workUrl += "&redirectlink=" + portal;
}
workUrl = URLEncoder.encode(workUrl, DefaultCharset.name);
o2oaUrl = o2oaUrl + "welinksso.html?redirect=" + workUrl;
}
return o2oaUrl;
} catch (Exception e) {
LOGGER.error(e);
}
return "";
}
/**
* 是否需要把钉钉消息转成markdown格式消息 根据是否配置了钉钉工作链接、是否是工作消息(目前只支持工作消息)
*
......@@ -162,7 +190,7 @@ public class WeLinkConsumeQueue extends AbstractQueue<Message> {
private boolean needTransferLink(String messageType) {
try {
String workUrl = Config.weLink().getWorkUrl();
if (workUrl != null && !"".equals(workUrl) && workMessageTypeList().contains(messageType)) {
if (StringUtils.isNotEmpty(workUrl)) {
return true;
}
} catch (Exception e) {
......
......@@ -503,6 +503,11 @@ MWF.xApplication.Setting.AppPackOnlineDocument = new Class({
this.app.notice(this.lp.mobile_apppack_message_host_format_error, "error", this.contentAreaNode);
return;
}
if (host.indexOf(":") > 0) {
this.app.notice(this.lp.mobile_apppack_message_host_format_error, "error", this.contentAreaNode);
return;
}
var port = this.apppackPortInputNode.get("value");
if (!port || port === "") {
this.app.notice(this.lp.mobile_apppack_message_port_not_empty, "error", this.contentAreaNode);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册