2013-06-27 2 views
0

좋아, 여러 RichTextFields가 포함 된 양식이 있습니다. 양식의 PostOpen 이벤트에서 여러 개의 RichTextTables를 다시 작성하고 있습니다. 또한이 서식에는이 RichTextTables에 포함 된 정보 중 일부를 변경하기위한 단추가 있습니다.해당 뷰를 사용하는 루틴을 실행하는 동안 UI에없는 뷰를 새로 고치는 방법은 무엇입니까?

첫 번째 경우 : 문서를 처음 열면 RichTextTable이 표시되지 않습니다. 그 후에 문서를 열 때마다 잘 표시됩니다. 나는 그것을 열고, 닫고 다른 RichTextTables을 올바르게 표시하는 데 걸리는 것으로 의심된다. 나는 그들이 처음으로 표시되도록하는 데 도움이 될 수 있습니다.

두 번째 경우 :이 재 작성을 수행하기 위해 PostOpen에서 호출되는 루틴은 사용자가 RichTextTables에 포함 된 값을 변경할 수있는 양식의 단추에서도 호출됩니다. 루틴은 재 빌드 루틴에 정의 된 뷰에서 정한 값에 따라이 테이블을 작성합니다. 이 단추를 사용하고 변경하면 NotesView.Refresh 루틴을 사용하여 영향을받는보기가 새로 고쳐집니다. 그런 다음 Tablses를 다시 작성하고 UI를 닫은 다음 UI를 다시 열어 테이블을 표시합니다. 변경 사항이 표시되지 않으므로 작동하지 않습니다. 사실, 문서를 닫았다가 다시 열면 변경 사항이 여전히 표시되지 않습니다. 변경된보기로 이동하여 UI에서 열고보기를 다시 열면 두 번째로 열 때 변경 사항이 표시됩니다. 어떻게하면 ui에서 뷰를 열지 않고도이 작업을 수행 할 수 있습니까?

아무도 제안 사항이 있습니까?

MJ 모든

답변

0

첫째 : 코드를 보지 않고는 도움이 거의 불가능하다.

그럼에도 불구하고 시도해보십시오. NotesRichtextItem은 프론트 엔드에 표시되기 전에 저장해야합니다. 따라서 "CloseAndReopen"함수가 있어야합니다.이 함수는 업데이트를 수행하고 백엔드 문서를 저장 한 다음 문서를 다시 엽니 다. 다음과 같이하십시오.

'Declare variables 
Dim ses As New NotesSession 
Dim db As NotesDatabase 

Dim ws As New NotesUIWorkspace 
Dim uidoc As NotesUIDocument 
Dim doc As NotesDocument 
Dim body As NotesRichtextitem 
Dim strUnid As String 

'- Set database to get the document 
Set db = ses.CurrentDatabase 

'- get the current uidoc 
Set uidoc = ws.CurrentDocument 

'-save it, otherwise you will not be able to access the richtextitem 
If uidoc.IsNewDoc Then Call uidoc.Save() 

'- Get The backend document 
Set doc = uidoc.Document 

'- Get the richtextitem 
Set body = doc.GetFirstItem("Body") 

'- and do something with it 
Call body.AppendText("some very interesting text") 
Call body.AddNewline(2) 

'- found this useful to make the Richtextitem have the changes directly 
Call body.Compact() 

'- Save it 
Call doc.Save(True, True, True) 

'- get the unid to be able to reopen 
strUnid = doc.UniversalID 

'- Make the "do you want to save" disappear 
Call uidoc.Document.ReplaceItemValue("SaveOptions" , "0") 

'- close it 
Call uidoc.Close 

'- Destroy the object for the doc (otherwise it might NOT really close) 
Delete Doc 

'- get it back 
Set doc = db.GetDocumentByUNID(strUnid) 

'- and reopen 
Call ws.EditDocument(False , doc) 

뷰의 경우 : NotesView.Refresh는 뷰의 인덱스를 다시 작성하지 않습니다. 객체를 초기화 한 이후 발생한 모든 일로 In-Memory- 표현을 새로 고칩니다. 그러나 아마도 "NotesView.AutoUpdate = True"가 도움이 될 수 있습니다. 하지만 아마도 귀하의 서버는보기 색인을 최신 상태로 유지하기 위해 바쁜 것일 수도 있고,보기가 자동으로 업데이트 (보기 속성 확인)하도록 구성되어 있지 않을 수도 있습니다 ...

다시 : 코드가 없으면 이것은 단지 시각 장애인 추측입니다. ..

+0

위 내용에 동의합니다. RichText 항목으로 수행하려는 작업은 임베디드 뷰, 다중 값 필드, 일반 텍스트 필드, HTML 등 여러 가지 방법으로 수행 할 수 있습니다. 정확히 무엇을하고 싶니? –

0

이것은 R4 (이 버전은 LS를 도입) 이후 매우 일반적입니다. RT 업데이트는 문서를 닫은 후 다시 열 때만 반영됩니다. 열려있는 문서에서 RT를 변경하면 다시 열어야합니다.

unid = ... ' get UNID of current document 
workspace.CurrentDocument.Close 
workspace.EditDocument unid, False 

이 문서를 다시하고 당신이 RT에 대한 변경 사항이 표시됩니다

간단한 솔루션을 사용하는 것입니다.

0

문서를 저장해야합니다. 그리고 RichtextItem이 업데이트되어야합니다. 그런 다음 RichText 항목의 내용 만 표시됩니다.

  • SaveOptions 필드를 0으로 설정하십시오. 문서를 저장하십시오.
  • 서식있는 텍스트 필드를 업데이트하십시오.