设置uidoc = workspace.CurrentDocument崩溃

时间:2014-05-02 14:43:10

标签: lotus-notes lotus-domino lotusscript

我尝试使用NotesDocumentCollection(集合)或notesuidocument

创建pdf文件
  1. 问题 - 当我尝试使用NotesDocumentCollection的基础时,它 工作在文档中创建一个pdf但我无法提取它们...我 看不到

  2. 问题 - 当我尝试使用notesuidocument的基础时:它崩溃了     !!

  3. 我想在两种类型的基础上使用相同的代码......

    这是我的代码:

    Public Sub sauverPdfPiecesJointes       
    
    Dim s As NotesSession
    Dim db As NotesDatabase
    Dim colldoc As NotesDocumentCollection
    Dim doc As NotesDocument    
    Dim resultat As String  
    Dim monRepertoire As Repertoire 
    Dim monXml As Xml
    Dim fichierExiste As Integer        
    Dim i As Integer
    Dim uidoc As NotesUIDocument        
    Dim workspace As New NotesUIWorkspace   
    Dim flagUidoc As Integer
    Dim nb As String 
    Dim vue As NotesView
    
    
    Set s = New NotesSession()          
    
    'initialisation de la variable
    totalResultat = ""          
    
    Set db = s.CurrentDatabase
    dbFilePath = db.FilePath
    dbFileName = db.FileName        
    'initialisation du compteur
    i = 0
    flagUidoc = 0
    
    'creation du pdf du document    
    Set uidoc = workspace.CurrentDocument   <==== CRASH HERE
    Set colldoc = db.UnprocessedDocuments    
    
    
    If (uidoc Is Nothing) Then
    'plusieurs documents sont sélectionnés
        If (colldoc.Count > 0) Then 
            Set doc = colldoc.GetFirstDocument
            While Not doc Is Nothing                        
                (creation du pdf....) (...)                                 
                i = i + 1
                Set  doc = colldoc.GetNextDocument(doc)             
            Wend                                    
        End  If
    ' l'utilisateur est dans le document    
    Else                        
        flagUidoc = 1   
        'si l'utilisateur a fait une modification
        Set doc = uidoc.Document
        nb = doc.Universalid            
          Call uidoc.Close(true)
        Delete uidoc
        Set doc = db.Getdocumentbyunid(nb)
    
        (creation du pdf....) (...)
    
        Set vue = db.Getview(nomVue)
        Call vue.Refresh()
    
    End If
    

2 个答案:

答案 0 :(得分:1)

如果您根据此答案发布更多详细信息,我会更新问题。

  1. 转到IBM_TECHNICAL_SUPPORT文件夹并找到最新的NSD。

  2. 打开它并查找单词FATAL。这将为您提供崩溃堆栈。将其添加到您的问题中,它将提供更多详细信息。

  3. 为了更详细地了解,有一个wiki article解释了如何确定崩溃代码(尽管你指向它,但前端类不会表现出你对它们的期望)。

    至于NotesUIWorkspace。早期版本的Notes中存在问题(我认为是R8.0,或者可能是R7)。问题是如果您打开Notes客户端但在执行代码之前没有打开数据库,则NotesUIWorkspace将不会完全初始化。这是一个边缘案例,所以并不明显。

    在触摸文档之前,您还可以尝试在NotesUIWorkspace对象上使用其他方法。看它是否也崩溃了。

    除此之外,为了使您的代码能够工作,它还需要在前端的上下文中包含文档。因此,如果您没有选择文档或打开文档,那么它应该会失败(但不会崩溃)。

    您还可以使用LND tool获取有关崩溃性质的更多详细信息。

答案 1 :(得分:1)

在分析您的代码后,我假设

  • 是代理人
  • 目标选项&#34;所有选定的文件&#34;和
  • 应处理当前打开的文档或视图中选定的文档

这种工作的通常模式是看

  • 首先查看database.UnprocessedDocuments视图中的所选文档,如果没有选择文档
  • 第二个用于在UI中打开的文档或用session.DocumentContext
  • 查看标记的文档

这样您不需要NotesUIDocument ,并且通过以下代码示例,您只需调用一次pdf创建代码:

Dim session As New NotesSession
Dim db As NotesDatabase
Dim col As NotesDocumentCollection
Dim doc As NotesDocument

Set db = session.CurrentDatabase    
Set col  = db.UnprocessedDocuments
If col Is Nothing Then
    Set doc = session.DocumentContext
Else
    Set doc = col.GetFirstDocument
End If
While Not doc Is Nothing
    '
    ' create pdf for doc here ....
    '
    If col Is Nothing Then
        Set doc = nothing
    else
        Set doc = col.GetNextDocument(doc)      
    End If
Wend