浏览 1464 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-10-21
一个简单的实例及具体代码和步骤如下: 1、到SF申请一个开发者账户,任何设置自己的密码和安全码(访问必须要密码和Security Token),如果没有Security Token,这点击【Reset Security Token】按钮重置一下,在查看注册邮件就会收到了。具体看附件图: 2、下载SF提供的类库插件: 到http://code.google.com/p/sfdc-wsc/downloads/list下载相应的版本文件,添加入项目中即可,我使用的18的版本(wsc-18.jar和partner-18.jar)。 3、编写chatter工具类:简单封装了登录SF平台,更新chatter信息和获取chatter信息的方法 /** * ChatterUtils.java V1.0 2011-10-21 下午03:47:53 * * Copyright 2011 **** Technologies. All rights reserved. * * Modification history(By Time Reason): * * Description: */ package com.***.sf.chatter; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import com.***.utils.lang.Dates; import com.sforce.soap.partner.Connector; import com.sforce.soap.partner.PartnerConnection; import com.sforce.soap.partner.QueryResult; import com.sforce.soap.partner.SaveResult; import com.sforce.soap.partner.sobject.SObject; import com.sforce.ws.ConnectionException; import com.sforce.ws.ConnectorConfig; /** * * <pre><b>功能描述:</b>调用Chatter API的工具类 * * @author :***(Kevin.xie)<br> * * <b>修改历史:</b>(修改人,修改时间,修改原因/内容) * * </pre> */ public class ChatterUtils { /** * Chatter's account */ private static final String USERNAME = "***"; /** * Chatter's password and security token */ private static final String PASSWORD = "***"; /** * Connection */ private static PartnerConnection connection; /** * * <pre><b>功能描述:</b>Sign on to SF platform * * @author :***(Kevin.xie) * <b>创建日期 :</b>2011-10-21 下午03:49:33 * * @throws ConnectionException * * <b>修改历史:</b>(修改人,修改时间,修改原因/内容) * * </pre> */ private static void signSfPlatform() throws ConnectionException { ConnectorConfig config = new ConnectorConfig(); config.setUsername(USERNAME); config.setPassword(PASSWORD); connection = Connector.newConnection(config); } /** * * <pre><b>功能描述:</b>update feed to SF's Chatter * * @author :***(Kevin.xie) * <b>创建日期 :</b>2011-10-21 下午03:51:36 * * @param comment feed comments * @return * @throws ConnectionException * @throws IOException * * <b>修改历史:</b>(修改人,修改时间,修改原因/内容) * * </pre> */ public static String updateStatus(String comment) throws ConnectionException, IOException { signSfPlatform(); String errorMsg = ""; SObject user = new SObject(); user.setType("user"); user.setId(connection.getUserInfo().getUserId()); user.setField("CurrentStatus", comment); SaveResult[] results = connection.update(new SObject[] {user }); if (!results[0].isSuccess()) { errorMsg = "Error updating user status: " + results[0].getErrors()[0].getMessage(); // System.out.println("Error updating user status: " + errorMsg); } else { // System.out.println("User status successfully updated."); } return errorMsg; } /** * * <pre><b>功能描述:</b>get feed items from SF * * @author :***(Kevin.xie) * <b>创建日期 :</b>2011-10-21 下午03:55:41 * * @return * @throws ConnectionException * * <b>修改历史:</b>(修改人,修改时间,修改原因/内容) * * </pre> */ public static List<Map<String, String>> displayNewsFeed() throws ConnectionException { List<Map<String, String>> feedList = null; signSfPlatform(); // get max records are 50; QueryResult queryResults = connection .query("SELECT Id, Type, CreatedDate, CreatedBy.name, FeedPost.body FROM NewsFeed WHERE Type = 'UserStatus' ORDER BY CreatedDate DESC, ID DESC LIMIT 50"); if (queryResults.getSize() > 0) { feedList = new ArrayList<Map<String, String>>(); StringBuilder sb = new StringBuilder(); for (SObject s : queryResults.getRecords()) { sb.delete(0, sb.length()); String time = s.getChild("CreatedDate").getValue().toString(); sb.append(time.substring(0, 10) + " "); sb.append(time.substring(11, 13)); sb.append(time.substring(13, 19)); Map<String, String> map = new HashMap<String, String>(); map.put(Dates.format(parseDate(sb.toString()), Dates.F_YYYY_MM_DD_HH_MM_SS), s.getChild("FeedPost") .getField("Body").toString()); feedList.add(map); } } return feedList; } /** * * <pre><b>功能描述:</b>SalesForce服务器的时间与AMS服务器的时间相差8小时 * * @author :***(Kevin.xie) * <b>创建日期 :</b>2011-10-21 下午03:59:01 * * @param DateStr * @return * * <b>修改历史:</b>(修改人,修改时间,修改原因/内容) * * </pre> */ private static Date parseDate(String DateStr) { StringBuilder sb = new StringBuilder(); sb.append(DateStr.substring(0, 10) + " "); sb.append(DateStr.substring(11, 13)); sb.append(DateStr.substring(13, 19)); Date d = Dates.parse(sb.toString(), Dates.F_YYYY_MM_DD_HH_MM_SS); // 加8小时=8小时*60分*60秒*1000毫秒 long time1 = d.getTime() + 8 * 3600L * 1000L; return Dates.parse(time1); } } 4、将业务数据提交到SF平台: .... /** * * <b>功能描述:</b>发送到SF平台 * * @author :***(Kevin.xie) <br> * <b>创建日期 :</b>2011-10-21 下午04:05:19 * * * <br> * <b>修改历史:</b>(修改人,修改时间,修改原因/内容)<br> * @throws InterruptedException * @throws IOException * @throws ConnectionException */ public void sendRtWsToChatter() { System.out.println("\t" + new Date().toLocaleString() + " Quartz ..........."); String vehicleID = "VID1"; String errMsg = ""; // 获取实时工况数据 // 1、获取连接会话 try { IoSession session = SocketUtils.getSession(); // 产生当次发送请求标识,标识由客户端地址+随机数 // 这里的标识只是一个例子,标识可以任何方法产生,只要保持在系统中的唯一性 String flag = "127.0.0.1" + UUID.randomUUID().toString(); // 将标识保存到当前session中 session.setAttribute("SendRequestFlag", flag); // 2、登录服务器 errMsg = SocketUtils.sendSignInOrder(session, vehicleID, flag); if (Strings.isEmpty(errMsg)) { // 3、发发送获取实时工况的指令 errMsg = SocketUtils.sendReqRtWsDataOrder(session, vehicleID, flag, workStatusIDs); // TODO 有个里程没有做 StringBuilder sb = new StringBuilder(); // 4、获取实时工况的指令 if (Strings.isEmpty(errMsg)) { RouterOrder resultOrder = (RouterOrder) WebClientHandler.results.get(flag); // 获取实时数据--封装实时数据为flexGrid的结果 ReceiveRtWsOrderPackage rtWsPackage = (ReceiveRtWsOrderPackage) resultOrder.getOrderPackage(); List<Object> wsValue = rtWsPackage.getWorkStatusValueList(); // 清空原来的数据 sb.delete(0, sb.length()); for (int i = 0; i < wsValue.size(); i++) { sb.append(rtWsPackage.getDeviceNameList().get(i)); sb.append(" = "); sb.append(wsValue.get(i)); sb.append(" (" + rtWsPackage.getUnitList().get(i) + ")"); sb.append(", "); } // 清除标识内容 WebClientHandler.results.remove(flag); } if (sb.length() > 2) { String comment = sb.toString().substring(0, sb.length() - 2); // 更新到chatter String msg = ChatterUtils.updateStatus(comment); System.out.println("\n\t Chatter's comment is : " + comment); System.out.println("\n\t The Chatter respones message is " + msg); } // 休眠来2s后再继续下一个操作 Thread.sleep(2000); } System.out.println("\n\tThe error message [errMsg] = " + errMsg); } catch (Exception e) { System.out.println("\n\tThe error message [errMsg] = " + errMsg); System.out.println("\n\tCatch the Exception, Exception message is below:"); e.printStackTrace(); } } .... 至此,已经完成了整个开发过程,上面的代码基本上copy出去就可以使用了。 也是刚刚研究SF平台,发现在上面开发还是比较麻烦,主要是资料很少,有哪位同学也在开发SF的,可以一起探讨,目前还有好多功能要开发,现在只用到了SF的chatter功能,其他功能后续会继续更新。 Kevin.xie 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |