起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9437|回复: 21

自定义widget(使用j文件实现)

  [复制链接]

11

主题

1134

帖子

1259

积分

金牌会员

Rank: 6Rank: 6

积分
1259
QQ
发表于 2013-9-10 17:04:14 | 显示全部楼层 |阅读模式
本帖最后由 song_ning_ning 于 2013-9-16 14:59 编辑

这里的自定义widget指的是:
360软件小助手截图20130916141027.jpg
用户可以通过自定义widget来设置首页要展示的信息(比如:自定义待办任务)  这里之所以用.j文件而不用.w文件来展示,是因为.j要比.w效率高
下面是自定义widget的思路及做法:

远程的联系方法QQ2025089647。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要

11

主题

1134

帖子

1259

积分

金牌会员

Rank: 6Rank: 6

积分
1259
QQ
 楼主| 发表于 2013-9-16 11:33:55 | 显示全部楼层
思路:1.首先要新建自定义widget的功能模块
           2.在BIZ下新建功能模块的logic/action下新建action(查询自定义widget要显示的数据)
           3.要新建一个.j文件  在此文件文件中对action返回的数据进行处理 输出到自定义的widget中
           4.要在UI下新建功能模块的config/function.xml中添加新建的功能模块
           5.要在UI下新建功能模块的config/widget.xml中添加自定义的widget
           6.给角色分配新建功能模块的功能权限
           7.在首页设置/模块设置中把添加的自定义widget选上
方法:

下面的例子是调用自己写的查询待办任务的action  返回值的类型是Table(注:如果调用平台的查询待办任务的action  返回值的类型是Document)

1.在BIZ下新建自己的功能模块  \BIZ\userDefineWidget\userDefineWidget
   在\BIZ\userDefineWidget\userDefineWidget\logic\action新建queryTask.action.m
   在queryTask.action.m中添加queryTaskaction  代码如下:
  1. public static Table queryTask(){
  2.                 String condition = TaskUtils.getExecutorCondition("t", ContextHelper.getPerson().getPersonMembers(), true);
  3.                
  4.                 String query = "select t, t.sName, t.sCURL, t.sProcess, t.sActivity, t.sCreateTime, t.sExecutorFName, t.sExecutorNames, t.sEURL, t.sCreatorFName, t.sShortcut, t.sHints, t.sCreatorFID, t.sExecutorFID, t.sKindID " +
  5.                                 " from SA_Task t " +
  6.                                 " where (t.sKindID='tkTask' or t.sKindID='tkExecutor' or t.sKindID='tkNotice' or t.sKindID IS NULL) " +
  7.                                 " and (t.sStatusID='tesReady' or t.sStatusID='tesExecuting') " +
  8.                                 " and (t.sTypeID IS NULL or t.sTypeID <> 'WORKREMIND')" +
  9.                                 " and " + condition +
  10.                                 " order by  t.sCreateTime desc " +
  11.                                 " limit 0,8 ";
  12.                 return KSQL.select(query, null, "/system/data", null);
  13.         }
复制代码
在\BIZ\userDefineWidget\userDefineWidget\process下新建defineWidget
    在动作设置中刚刚写的queryTask action加上
2.切换到UI层   在\UI\userDefineWidget\userDefineWidget\process\defineWidget下新建myselfTask.j
  1. import java.io.IOException;
  2. import java.io.PrintWriter;

  3. import javax.servlet.ServletException;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;

  6. import org.json.JSONArray;
  7. import org.json.JSONException;
  8. import org.json.JSONObject;

  9. import com.justep.biz.client.Action;
  10. import com.justep.biz.client.ActionEngine;
  11. import com.justep.biz.client.ActionResult;
  12. import com.justep.biz.client.ActionUtils;
  13. import com.justep.ui.util.NetUtils;
  14. public class MyselfTask extends com.justep.ui.impl.JProcessorImpl  {
  15.         public static final String PROCESS = "/userDefineWidget/userDefineWidget/process/defineWidget/defineWidgetProcess";
  16.         public static final String ACTIVITY = "mainActivity";
  17.         private static final String QUERY_WAIT_TASK_ACTION = "queryTask";
  18.         @Override
  19.         public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  20.                 try{
  21.                         JSONObject obj=queryWaitTasks(request);
  22.                         JSONObject data = obj.getJSONObject("data");
  23.                         JSONObject value=data.getJSONObject("value");
  24.                         JSONArray array=value.getJSONArray("rows");
  25.                         JSONObject rows=null;
  26.                         request.setCharacterEncoding("utf-8");
  27.                         response.setContentType("text/html;charset=utf-8");
  28.                         PrintWriter pw = response.getWriter();
  29.                         pw.println("<html>");
  30.                         pw.println("<head>");
  31.                         pw.println("<link rel='stylesheet' type='text/css' href='/x5/UI/userDefineWidget/userDefineWidget/process/defineWidget/customer.css'>");
  32.                         pw.println("<script type='text/javascript' src='/x5/base/base.js' ></script>");
  33.                         pw.println("<script type='text/javascript' src='/x5/form/form.js' ></script>");
  34.                         pw.println("<script type='text/javascript' src='/x5/UI/userDefineWidget/userDefineWidget/process/defineWidget/customer.js'></script>");
  35.                         pw.println("</head>");
  36.                         pw.println("<body>");
  37.                         pw.println("<table width='100%'>");
  38.                         for(int i=0;i<array.length();i++){
  39.                                 rows=array.getJSONObject(i);
  40.                                 JSONObject sNameObj=rows.getJSONObject("sName");
  41.                                 JSONObject sExecutorNamesObj=rows.getJSONObject("sExecutorNames");
  42.                                 JSONObject sCreateTimeObj=rows.getJSONObject("sCreateTime");
  43.                                 JSONObject sProcessObj=rows.getJSONObject("sProcess");
  44.                                 JSONObject sActivityObj=rows.getJSONObject("sActivity");
  45.                                 JSONObject sEURLObj=rows.getJSONObject("sEURL");
  46.                                 JSONObject sKindIDObj=rows.getJSONObject("sKindID");
  47.                                 JSONObject sExecutorFIDObj=rows.getJSONObject("sExecutorFID");
  48.                                 JSONObject sTaskObj=rows.getJSONObject("t");
  49.                                 String sName=(String) sNameObj.get("value");
  50.                                 String sExecutorNames=(String) sExecutorNamesObj.get("value");
  51.                                 String sCreateTime=(String) sCreateTimeObj.get("value");
  52.                                 String sProcess=(String) sProcessObj.get("value");
  53.                                 String sActivity=(String) sActivityObj.get("value");
  54.                                 String sEURL=(String) sEURLObj.get("value");
  55.                                 String sTask=(String) sTaskObj.get("value");
  56.                                 String sKindID=(String) sKindIDObj.get("value");
  57.                                 String sExecutorFID=(String) sExecutorFIDObj.get("value");
  58.                                 String url = sEURL.contains("?") ? sEURL + "&task=" +sTask: sEURL + "?task=" + sTask;
  59.                                 pw.println("<tr style='font-size:12px;'>");
  60.                                 pw.println("<td style='width:12px;'>");
  61.                                 pw.println("<img name='flagImg' src='/x5/UI/SA/task/taskView/images/dot.png'></img>");
  62.                                 pw.println("</td>");
  63.                                 pw.println("<td class='className'>");
  64.                                 pw.print("<a href='javascript:void(0)' onclick=\"openTask(\'");
  65.                                 pw.print(sProcess);
  66.                                 pw.print("\',\'");
  67.                                 pw.print(sActivity);
  68.                                 pw.print("\',\'");
  69.                                 pw.print(sName);
  70.                                 pw.print("\',\'");
  71.                                 pw.print(url);
  72.                                 pw.print("\',\'");
  73.                                 pw.print(sTask);
  74.                                 pw.print("\',\'");
  75.                                 pw.print(sExecutorFID);
  76.                                 pw.print("\',\'");
  77.                                 pw.print("\',\'");
  78.                                 pw.print(sKindID);
  79.                                 pw.println("\')\">");
  80.                                 pw.println(sName);
  81.                                 pw.println("</a>");
  82.                                 pw.println("</td>");
  83.                                 pw.println("<td style='width:1px;'></td>");
  84.                                 pw.println("<td class='className' style='width:61px;'>");
  85.                                 pw.println(sExecutorNames);
  86.                                 pw.println("</td>");
  87.                                 pw.println("<td style='width:1px;'></td>");
  88.                                 pw.println("<td class='className' style='width:63px;'>");
  89.                                 pw.println(sCreateTime.substring(0, 10));
  90.                                 pw.println("</td>");
  91.                                 pw.println("</tr>");
  92.                         }
  93.                         pw.println("</table>");
  94.                         pw.println("</body>");
  95.                         pw.println("</html>");
  96.                 }catch(JSONException e){
  97.                         e.printStackTrace();
  98.                 }
  99.         
  100.         }
  101.         private JSONObject queryWaitTasks(HttpServletRequest request){
  102.                 Action action = new Action();
  103.                 action.setProcess(PROCESS);
  104.                 action.setActivity(ACTIVITY);
  105.                 action.setName(QUERY_WAIT_TASK_ACTION);
  106.                 action.setExecutor(NetUtils.getExecutor(request));
  107.                 action.setExecuteContext(NetUtils.getExecuteContext(request));
  108.                 String bsessionID = NetUtils.getBSessionID(request);
  109.                 String language = NetUtils.getLanguage(request);
  110.                 ActionResult ar = ActionEngine.invokeAction(action, ActionUtils.JSON_CONTENT_TYPE, bsessionID, language, null);
  111.                 return (JSONObject) ar.getContent();
  112.         }

  113. }
复制代码
3.在\UI\userDefineWidget\userDefineWidget\process\defineWidget下新建customer.js

  1. function openTask(sProcess, sActivity, sName, taskURL, task, executorFID, executor, sKindID){
  2.         var pattern = "do";
  3.                                   if (sKindID == 'tkNotice'){
  4.                                           pattern = "detail";
  5.                                   }
  6.                                  
  7.                                   taskURL += "&activity-pattern=" + pattern + "&process=" + sProcess + "&activity=" + sActivity;
  8.                                   var param = '<parameters>' +
  9.                                                                 '<parameter name="task">' +
  10.                                                                 '<xbiz:simple xmlns:xbiz="http://www.justep.com/xbiz#" type="http://www.w3.org/2001/XMLSchema#string">' + task + '</xbiz:simple>' +
  11.                                                                 '</parameter>' +
  12.                                                                 '<parameter name="executor">' +
  13.                                                                 '<xbiz:simple xmlns:xbiz="http://www.justep.com/xbiz#" type="http://www.w3.org/2001/XMLSchema#string">' + executorFID + '</xbiz:simple>' +
  14.                                                                 '</parameter>' +
  15.                                                                 '</parameters>';
  16.                                 var xmlHttpRequest = justep.Request.sendBizRequest(sProcess, sActivity, "executeTaskAction", param, null, null, true);
  17.                                 //执行抢占
  18.                                 if (justep.Request.isSuccess(xmlHttpRequest)){
  19.                                            var executor = justep.XML.getNodeText(justep.XML.eval(xmlHttpRequest.responseXML, "/root/data/*/executor", "single"));
  20.                                            justep.Portal.openWindow(sName, encodeURI(taskURL), false, null, executor);
  21.                                    }else{
  22.                                            var message = justep.XML.eval(xmlHttpRequest.responseXML, "/root/message", "single");
  23.                                            alert(justep.XML.getNodeText(message));
  24.                                    }
  25.                           }
复制代码
远程的联系方法QQ2025089647。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要

11

主题

1134

帖子

1259

积分

金牌会员

Rank: 6Rank: 6

积分
1259
QQ
 楼主| 发表于 2013-9-16 14:41:44 | 显示全部楼层
本帖最后由 song_ning_ning 于 2013-9-16 15:02 编辑

4.在\UI\userDefineWidget\userDefineWidget\process\defineWidget下新建customer.css
  1. a:link {
  2.         text-decoration: none;
  3.         color: #1f3a87;
  4.         font-size: 12px;
  5. }

  6. a:visited {
  7.         text-decoration: none;
  8.         color: #1f3a87;
  9.         font-size: 12px;
  10. }

  11. a:hover {
  12.         text-decoration: underline;
  13.         color: #0A73E9;
  14.         font-size: 12px;
  15. }

  16. a:active {
  17.         text-decoration: none;
  18.         color: #1f3a87;
  19.         font-size: 12px;
  20. }

  21. .className {
  22.         font-size: 12px;
  23.         word-break: keep-all;
  24.         overflow: hidden;
  25.         text-overflow: ellipsis;
  26. }
复制代码
5.在\UI\userDefineWidget\config\userDefineWidget.widget.xml文件的源码中写
  1. <?xml version="1.0" encoding="utf-8"?>

  2. <root>
  3.   <item label="任务相关">
  4.     <item id="userDefineTask" title="自定义widget" height="180px" type="func"
  5.       refresh="true" url="/userDefineWidget/userDefineWidget/process/defineWidget/myselfTask.j" process="/userDefineWidget/userDefineWidget/process/defineWidget/defineWidgetProcess"
  6.       activity="mainActivity">
  7.       <more title="任务中心" url="/SA/task/taskCenter/mainActivity.w" process="/SA/task/taskCenter/taskCenterProcess"
  8.         activity="mainActivity" params="&parameter=waiting"/>
  9.     </item>
  10. </item>
  11. </root>
复制代码
6.在\UI\userDefineWidget\config\userDefineWidget.function.xml文件的源码中写
  1. <?xml version="1.0" encoding="utf-8"?>

  2. <root>
  3.   <item label="自定义widget">
  4.     <item label="自定义Widget" process="/userDefineWidget/userDefineWidget/process/defineWidget/defineWidgetProcess"
  5.       activity="mainActivity" url="/userDefineWidget/userDefineWidget/process/defineWidget/mainActivity.w" display="hide"/>
  6.   </item>
  7. </root>
复制代码
6.在角色管理中给用户分配”自定义widget“功能权限
360软件小助手截图20130916144107.jpg
7.在首页->设置->模块设置->把自定义widget选上
360软件小助手截图20130916143614.jpg
远程的联系方法QQ2025089647。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要

382

主题

2380

帖子

4620

积分

论坛元老

Rank: 8Rank: 8

积分
4620
QQ
发表于 2013-9-16 17:18:39 | 显示全部楼层
MyselfTask这个类需要写html?这么复杂?可不可以像JSP那样做好页面,MyselfTask只是做数据的处理
QQ67886387

11

主题

1134

帖子

1259

积分

金牌会员

Rank: 6Rank: 6

积分
1259
QQ
 楼主| 发表于 2013-9-16 17:41:30 | 显示全部楼层
67886387 发表于 2013-9-16 17:18
MyselfTask这个类需要写html?这么复杂?可不可以像JSP那样做好页面,MyselfTask只是做数据的处理 ...

MyselfTask里面有html     平台本身的待办任务就是.j处理数据   .xhtml显示数据
远程的联系方法QQ2025089647。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要

382

主题

2380

帖子

4620

积分

论坛元老

Rank: 8Rank: 8

积分
4620
QQ
发表于 2013-9-18 10:31:24 | 显示全部楼层
请问一下在queryTask这个方法里,TaskUtils是哪来的?API没有此方法,是你们自己写的?
21.jpg
QQ67886387

382

主题

2380

帖子

4620

积分

论坛元老

Rank: 8Rank: 8

积分
4620
QQ
发表于 2013-9-18 10:45:35 | 显示全部楼层
哦,我找到了,不好意思
QQ67886387

382

主题

2380

帖子

4620

积分

论坛元老

Rank: 8Rank: 8

积分
4620
QQ
发表于 2013-10-10 11:16:27 | 显示全部楼层
本帖最后由 67886387 于 2013-10-10 11:26 编辑

请问一下:JSONObject data = obj.getJSONObject("data");
            
这句中data是哪里的参数?

我用的是标准动作里的queryAction,返回应该也是table,出现以下错误:
  1. 2013-10-10 11:25:17 invokeActions error!
  2. com.justep.model.exception.ModelException: java.lang.IllegalArgumentException
  3.         at com.justep.system.action.Engine.invokeActions(Unknown Source)
  4.         at com.justep.business.server.BusinessServer.doAction(Unknown Source)
  5.         at com.justep.business.server.BusinessServer.doExcute(Unknown Source)
  6.         at com.justep.business.server.BusinessServer.excute(Unknown Source)
  7.         at com.justep.business.server.BusinessServerServlet.execService(Unknown Source)
  8.         at com.justep.business.server.BusinessServerServlet.service(Unknown Source)
  9.         at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
  10.         at com.justep.x.bs.BusinessServerServlet.service(Unknown Source)
  11.         at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
  12.         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
  13.         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  14.         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
  15.         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
  16.         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
  17.         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
  18.         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
  19.         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
  20.         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
  21.         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
  22.         at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
  23.         at java.lang.Thread.run(Thread.java:595)
  24. Caused by: java.lang.IllegalArgumentException
  25.         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  26.         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  27.         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  28.         at java.lang.reflect.Method.invoke(Method.java:592)
  29.         at com.justep.system.action.Engine.invokeActions(Native Method)
  30.         ... 21 more
  31. 2013-10-10 11:25:17 excute Action error:<?xml version="1.0" encoding="UTF-8"?>
  32. <action process="/gonggao/gonggao/process/widget/widgetProcess" activity="mainActivity" name="queryGO_GGAction" executeContext="" content-type="application/xml"><parameters/></action>
  33. com.justep.model.exception.ModelException: java.lang.IllegalArgumentException
  34.         at com.justep.system.action.Engine.invokeActions(Unknown Source)
  35.         at com.justep.business.server.BusinessServer.doAction(Unknown Source)
  36.         at com.justep.business.server.BusinessServer.doExcute(Unknown Source)
  37.         at com.justep.business.server.BusinessServer.excute(Unknown Source)
  38.         at com.justep.business.server.BusinessServerServlet.execService(Unknown Source)
  39.         at com.justep.business.server.BusinessServerServlet.service(Unknown Source)
  40.         at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
  41.         at com.justep.x.bs.BusinessServerServlet.service(Unknown Source)
  42.         at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
  43.         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
  44.         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  45.         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
  46.         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
  47.         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
  48.         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
  49.         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
  50.         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
  51.         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
  52.         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
  53.         at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
  54.         at java.lang.Thread.run(Thread.java:595)
  55. Caused by: java.lang.IllegalArgumentException
  56.         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  57.         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  58.         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  59.         at java.lang.reflect.Method.invoke(Method.java:592)
  60.         at com.justep.system.action.Engine.invokeActions(Native Method)
  61.         ... 21 more
  62. org.json.JSONException: JSONObject["data"] is not a JSONObject.
  63.         at org.json.JSONObject.getJSONObject(JSONObject.java:614)
  64.         at QueryGG.execute(QueryGG.java:27)
  65.         at com.justep.ui.JavaServer.runJava(Unknown Source)
  66.         at com.justep.ui.JavaServer.doJ(Unknown Source)
  67.         at com.justep.ui.JavaServer.service(Native Method)
  68.         at com.justep.ui.servlet.MainServlet.service(Unknown Source)
  69.         at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
  70.         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
  71.         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  72.         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
  73.         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
  74.         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
  75.         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
  76.         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
  77.         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
  78.         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
  79.         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
  80.         at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
  81.         at java.lang.Thread.run(Thread.java:595)
复制代码
QQ67886387

11

主题

1134

帖子

1259

积分

金牌会员

Rank: 6Rank: 6

积分
1259
QQ
 楼主| 发表于 2013-10-10 13:31:09 | 显示全部楼层
67886387 发表于 2013-10-10 11:16
请问一下:JSONObject data = obj.getJSONObject("data");
            
这句中data是哪里的参数?

data是request中json数据类型的一个节点
远程的联系方法QQ2025089647。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要

185

主题

777

帖子

1644

积分

金牌会员

Rank: 6Rank: 6

积分
1644
QQ
发表于 2014-2-20 11:09:36 | 显示全部楼层
67886387 发表于 2013-9-18 10:31
请问一下在queryTask这个方法里,TaskUtils是哪来的?API没有此方法,是你们自己写的? ...

您好,请问TaskUtils这个类在哪里找到的 ?
天天就知道打酱油打酱油,有点出息行么。QQ:497923435
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2019-2-16 21:19 , Processed in 0.144856 second(s), 28 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表