开放源码 CMS 入门,第 3 部分: 构建定制存储
2010-04-16 00:00:00 来源:WEB开发网现在,添加对新的 sf 方法的一个调用。如果返回 TRUE,则执行定制的方法将文件复制到 salesforce.com。但是如何知道文档是否已经被复制到 salesforce.com 呢?sforce Web 服务 API 有两个方法 Create SObject 和 Update SObject 可供选择。但是,如果文档已经在那里,则无需尝试创建文件,而当文档不存在的时候,也无需更新文档。
storeRevisionContent 的 revisionDescriptor 参数可以告诉您一部分您想知道的东西。这个参数包含当前被保存版本的版本号,如果版本号大于 1,那么就可以知道这个文档不是最初的文档,于是可以调用 Update 方法,而不是 Create 方法。
另外还需要两个方法:一个方法用于在 salesforce.com 上创建一个文档,一个方法用于更新 salesforce.com 上的文档。首先,创建这些方法的 shell。清单 5 和清单 6 展示了这两个新方法,它们是从 sforce Quick Start 例子中复制出来的,并添加了一些 println 语句。
在 CreateDocument 方法中,通过查询名为 IBM Tutorial 的文件夹,找到您需要的文件夹 ID 值。用开发者帐户登录到 salesforce.com,然后用那个名称创建一个文档文件夹。如果不这么做,该方法则使用您设置的文档文件夹列表中的最后一个 ID。
清单 5. CreateDocument
public String CreateDocument(NodeRev
isionDescriptor revisionDescriptor, File doc){
String docName = revisionDescriptor.getName();
String description = revisionDescriptor.getETag();
ID authorId = null;
ID folderId = null;
System.out.println("CreateDocument");
System.out.println("docName=" + docName);
System.out.println("File doc=" + doc.toString());
System.out.println("Description=" + description);
String retStatus = "Success";
int fileLength = (int) doc.length();
byte[] body = new byte[fileLength];
//Verify that we are already authenticated, if not
//call the login function to do so
if (!loggedIn) {
if (!login()) {
return "Bad SalesForce Login";
}
}
try {
FileInputStream fis = new FileInputStream(doc);
fileLength = fis.read(body);
} catch (FileNotFoundException e) {
retStatus = "Error Failed to CreateDocument:"
+ e.getLocalizedMessage();
e.printStackTrace();
return retStatus;
} catch (IOException e1) {
retStatus = "Error Failed to CreateDocument:"
+ e1.getLocalizedMessage();
e1.printStackTrace();
return retStatus;
}
if (authorId == null) {
//default to current user
authorId = this.loginResult.getUserId();
}
if (folderId == null || folderId.getValue().length() != 18) {
try {
QueryResult qr = binding.query("Select Id From Folder");
SObject[] recs = qr.getRecords();
for (int i = 0; i < recs.length; i++) {
SObject object = recs[i];
if (object instanceof Folder) {
Folder f = (Folder) qr.getRecords(i);
folderId = f.getId();
if (f.getName().compareToIgnoreCase(
"IBM Tutorial") == 0){
break;
}
}
}
if (folderId == null) throw new
InvalidSObjectFault(
ExceptionCode.UNKNOWN_EXCEPTION,
"folderId == null,
possibly no 'IBM Tutorial folder found'");
} catch (UnexpectedErrorFault e2) {
e2.printStackTrace();
} catch (InvalidSObjectFault e2) {
e2.printStackTrace();
} catch (MalformedQueryFault e2) {
e2.printStackTrace();
} catch (InvalidFieldFault e2) {
e2.printStackTrace();
} catch (RemoteException e2) {
e2.printStackTrace();
}
}
try {
Document document;
SObject[] sObjects = new SObject[1];
document = new Document();
document.setName(docName);
document.setBody(body);
document.setDescription(description);
document.setAuthorId(authorId);
document.setFolderId(folderId);
sObjects[0] = document;
//create the object(s) by sending the array
//to the web service
SaveResult[] sr = binding.create(sObjects);
for (int i = 0; i < sr.length; i++) {
SaveResult result = sr[i];
if (result.isSuccess()) {
retStatus = "Success Created Document " + docName;
} else {
Error[] ers = result.getErrors();
retStatus = "Error:";
for (int j = 0; j < ers.length; j++) {
Error error = ers[j];
retStatus += error.getMessage() + ";";
System.out.println("error.getStatusCode():"
+ error.getStatusCode());
System.out.println(retStatus);
}
}
}
} catch (UnexpectedErrorFault uef) {
log(uef.getExceptionMessage());
} catch (Exception ex) {
retStatus = "\nFailed to create folder, " + docName
+ ", error message was: \n" + ex.getMessage();
System.out.println(retStatus);
}
return retStatus;
}
- ››CmsTop采集图文教程
- ››cmstop如何更换系统默认模板
- ››CmsTop大众版视频教程之:文章采集教程
- ››CMS行业价值和方向在哪里 究竟还剩下些什么?
- ››开放的云让业务更“闪亮”
- ››开放源码 CMS 入门,第 1 部分: 下载、安装和开始...
- ››开放源码 CMS 入门,第 2 部分: 通过 Eclipse 构建...
- ››开放源码 CMS 入门,第 3 部分: 构建定制存储
- ››开放源码 CMS 入门,第 5 部分: 为 Jakarta Slide...
- ››开放源码 CMS 入门,第 6 部分: 为 Jakarta Slide...
- ››CMS阅读功能 for v 7.5
- ››开放标准、开放源码和 Domino 6: 通过 Python 和 ...
更多精彩
赞助商链接