我们正在使用一个小的JavaScript库来通过XPage在个人备注日历中创建新的日历条目。所有应用程序用户都可以选择可用的空闲时间。但是,最近我们注意到空闲时间实际上也显示了实际安排会议的时间。此时,如果我们手动刷新日历然后正确显示所有空闲时间,但是,我们希望找到一种以编程方式刷新它的解决方案。
我试图在线查找但没有成功,所以任何帮助都会非常感激。
编辑1 - 详细说明
我们使用Ulrich Krause here提供的脚本库来创建新的日历条目。此外,在前端,我们有一个重复控制来显示所有的空闲时间。只是为这个想法提供一个小片段:
// This codes shows all the free time for the field named "members" in the main document
try{
var infoDoc:NotesDocument= database.getDocumentByUNID(context.getUrlParameter('refId'));
var meetingDuration = infoDoc.getItemValueInteger("meetingDuration");
var start:NotesDateTime = session.createDateTime(getComponent("startF").getValue());
var end:NotesDateTime = session.createDateTime(getComponent("endF").getValue());
var window:NotesDateRange = session.createDateRange();
window.setStartDateTime(start);
window.setEndDateTime(end);
// Set up the names
var names = new java.util.Vector();
var infoDoc:NotesDocument= database.getDocumentByUNID(context.getUrlParameter('refId'));
names = infoDoc.getItemValue("members");
// Find the free time
var freetime:java.util.Vector = session.freeTimeSearch(window,meetingDuration, names, false);
return freetime;
}catch(err){
view.postScript("alert('"+err+"')")
}
我们面临的问题是,即使在创建日历条目(通过提到的脚本库)之后,它仍会在空闲时间显示,直到从NOTES手动刷新。我们打算以编程方式执行此操作但没有成功。
编辑2:答案选择
最后经过3个小时的调试和标记并取消标记文档中所有缺少的字段后,我发现我在实际代码中制作了一个小BLUNDER。 “$ BusyPriority”硬编码为'2'而不是'1',这也是文档在Freetime中显示的原因之一。其他原因肯定是@Frantisek Kossuth所建议的那样,创造时缺少了刷新的东西。
此外,在调试期间(仅针对结果)我发现通过脚本创建的约会文档仅包含46个字段,而日历文档中的72个字段通过日历创建(或通过日历保存),但是,缺少的字段对文件没有任何重大影响。
答案 0 :(得分:1)
执行此类开发有一些困难,因为日历条目具有服务器使用的一些内部字段。我非常确定您正在创建的文档缺少一个或多个需要的字段,并且当您执行打开文档并保存文档时会计算这些字段。
我建议你在创建之后转储完整的文档,并在你刷新"之后#34;在Lotus Notes上。然后,您可以使用BeyondCompare或WinMerge等工具对其进行比较,并检查您需要的字段。
以防万一,我在LotusScript中使用这个旧代码将文档转储到文本文件中。我希望这很有用。
Public Sub DumpDocToTextFile(doc As NotesDocument, ByVal s_file As String)
Dim o_item As NotesItem
Dim v_value As Variant
Dim s_value As String
Dim b_first As Boolean
Dim i_file As Integer
Dim v_items As Variant
Dim a_result() As String
Dim v_result As Variant
ReDim a_result(0 To 0) As String
ForAll it In doc.Items
Set o_item = it
s_value = ""
b_first = True
v_items = o_item.Values
v_value = Evaluate({""})
If IsArray(v_items) Then
ForAll s In v_items
If b_first Then
v_value = Evaluate("{" + CStr(s) + "}")
b_first = False
Else
v_value = ArrayAppend(v_value, CStr(s))
End If
End ForAll
s_value = Implode(v_value, s_sep)
Else
s_value = CStr(o_item.Values)
End If
a_result(UBound(a_result)) = o_item.Name + ";" + Format$(o_item.LastModified, "yyyy-mm-dd hh:nn:ss") + ";" + CStr(o_item.Type) + ";""" + s_value + """"
ReDim Preserve a_result(0 To UBound(a_result) + 1) As String
End ForAll
'v_result = sort(a_result) '<== Use a sort algorithm here. It will be easier compare between two documents.
v_result = a_result '<== Comment this line if you have the sort algorithm
i_file = FreeFile
Open s_file For Output As i_file
ForAll r In v_result
Print #i_file, r
End ForAll
Close i_file
End Sub
答案 1 :(得分:1)
根据评论,您需要的是查看刷新。该片段使用“($ ApptUNID)”视图,因此在创建条目之后使用这样的代码(您需要为邮件文件路径/服务器提供正确的参数):
try {
var v:NotesView = db.getView('($ApptUNID)');
if (v) {
v.refresh();
}
} catch(e) {
//add error handler
}
琐事:Ulrich的片段在删除条目时包含view.refresh()
来电,但不会创建一个......
答案 2 :(得分:0)
如果您要使用Notes日历执行任何操作,则应将此书签保留为正式发布的模式:http://www-10.lotus.com/ldd/ddwiki.nsf/dx/cs_schema_toc
该页面由C&amp; S开发和支持团队创建,以帮助记录尽可能多的项目(在我们的业余时间)。
此外,如果您担心忙碌时间,则无需手动刷新$ ApptUNID等视图。 Busytime 不使用它。该系统完全是自包含的,并在日历上更新条目时从条目中提取数据。
最后,您应该考虑使用9.0中正式发布的C&amp; S API,并在每个维护版本中使用新功能或错误修复进行了更新。 API将为您处理许多丑陋的细节,例如制作重新安排通知等。