2014-07-08 2 views
1

데이터베이스에 3 개의 열과 csv 파일의 새 데이터를 db보기로 가져 오는 에이전트가 있습니다. 가져 오기 부분이 작동합니다. 내가해야 할 일은 csv 파일의 첫 번째 열을 데이터베이스의 첫 번째 열과 비교하는 것입니다. 일치하는 경우 세 번째 열을 변경해야합니다. 나는 LotusScript가 처음이다. 여기에 내 시도 (에이전트가 실행될 때 '유형 불일치'오류가 발생 함)가 있습니다. 에이전트가 첫 번째 열을 읽고 그것을 비교하고 일치하는 경우 대체하려면 어떻게합니까?LotusScript- csv 파일의 데이터와 Notes 데이터베이스의 데이터 비교

Dim session As New NotesSession 
Dim db As NotesDatabase 
Set db = session.Currentdatabase 
Dim uiws As New NotesUIWorkspace 
Dim fileCSV As Variant 
'Declare variables to hold data' 

Dim FAC_CCN As String 
Dim FAC_STATE As String 
Dim FAC_ZIP As String 
Dim counter As Long 
Dim doc As NotesDocument 
'Added this to get rid of error message that filenum had not been declared 
Dim filenum As Integer 
Dim view As NotesView 
Set view = db.GetView("Input") 
Set doc = view.GetFirstDocument 
Dim item As NotesItem 
counter=0 
'setup file number 
filenum% = FreeFile() 
'Ask user for file location 
fileCSV = uiws.OpenFileDialog(False, "Choose the CSV file,","*.csv","c:\ ") 
'If the user chose a file then process 
If Not IsEmpty(fileCSV) Then 
    Open fileCSV(0) For Input As filenum% 
    Do Until EOF(filenum%) 
     'Read a line of data 
     Input #filenum%,FAC_CCN, FAC_STATE, FAC_ZIP 
     'Create Notes document and write values to it 
     Set item = doc.GetItemValue("FAC_ZIP")(0) 
      If doc.FAC_ZIP = "FAC_ZIP" Then 
      Call doc.Replaceitemvalue("FAC_ZIP", FAC_ZIP) 
     End If 
     Set doc = db.CreateDocument 
     With doc 
      .FAC_CCN = FAC_CCN 
      .FAC_STATE= FAC_STATE 
      .FAC_ZIP = FAC_ZIP 
      .Form = "ccnForm"      
     End With 
     Call doc.Save(False, False) 
     Set doc = view.GetNextDocument(doc) 
     counter = counter + 1 
     'If counter = 10 Then Exit Sub 
    Loop 
    MsgBox "You imported " & counter & " records." 
End If 

답변

2

최종 하위 당신은 NotesView.GetDocumentByKey 방법을 사용할 수 있습니다. 이 방법을 사용하려면 검색 값으로 인덱싱되는 View이 있어야합니다. 이것을 얻는 가장 쉬운 방법은 이것을 만드는 것입니다. ViewView은 검색 키에 포함 된 값과 동일한 수의 정렬 된 열을 포함해야합니다. 귀하의 경우 하나의 열로 View을 작성해야합니다. 이 View은 키로 검색 할 수 있도록 설계되었으므로 사용자에게 표시되지 않도록해야합니다. View은 이름이 괄호로 묶여 있으면 사용자로부터 숨길 수 있습니다. 이 View 디자이너를 사용하거나 다음과 같은 간단한 코드를 사용하여 만들 수 있습니다
여기

Dim viewName As String 
Dim ses As New NotesSession 
Dim db As NotesDatabase 
Dim view As NotesView 
Dim index As Integer 
Dim column As NotesViewColumn 

viewName$ = "(Your view name)" 
Set db = ses.CurrentDatabase 
Set view = db.GetView(viewName$) 

If Not view Is Nothing Then 
    'Remove old view 
    Call view.Remove 
End If 

'Create view for "ccnForm" documents 
Set view = db.CreateView(viewName$, {SELECT Form = "ccnForm"}, , False) 

'Remove all auto-created columns 
For index% = 0 To Ubound(view.Columns) 
    view.RemoveColumn 
Next 

'Add column for "FAC_CCN" field 
Set column = view.CreateColumn(, , "FAC_CCN") 
column.IsSorted = True 

NotesView.GetDocumentByKey 방법의 예입니다 제대로 작동해야처럼

Dim session As New NotesSession 
Dim db As NotesDatabase 
Set db = session.Currentdatabase 
Dim fileCSV As Variant 

'Declare variables to hold data' 
Dim FAC_CCN As String 
Dim FAC_STATE As String 
Dim FAC_ZIP As String 
Dim counter As Long 
Dim doc As NotesDocument 

'Added this to get rid of error message that filenum had not been declared 
Dim filenum As Integer 

Dim view As NotesView 
Set view = db.GetView("(YourViewName)") 

counter& = 0 

'setup file number 
filenum% = Freefile() 

'Ask user for file location 
fileCSV = uiws.OpenFileDialog(False, "Choose the CSV file,", "*.csv", "c:\") 

'If the user chose a file then process 
If Not Isempty(fileCSV) Then   
    Open fileCSV(0) For Input As filenum% 

    Do Until Eof(filenum%) 
     'Read a line of data 
     Input #filenum%, FAC_CCN$, FAC_STATE$, FAC_ZIP$ 

     'Compare the first column 
     Set doc = view.GetDocumentByKey(FAC_CCN$, True) 

     If doc Is Nothing Then 
      'Create new document 
      Set doc = db.CreateDocument 

      With doc 
       .FAC_CCN = FAC_CCN$ 
       .FAC_STATE = FAC_STATE$ 
       .FAC_ZIP = FAC_ZIP$ 
       .Form = "ccnForm" 
      End With 
     Else 
      'Replace third item 
      doc.FAC_ZIP = FAC_ZIP$ 
     End If 

     Call doc.Save(False, False) 

     counter& = counter& + 1 
    Loop 

    Msgbox "You imported " & counter& & " records." 
End If 
+0

이 보인다. LotusScript 도움말을 확인했고 구문이 좋습니다. 그러나 Object Variable Not Set 오류 메시지가 나타납니다. 내가 뭘 놓치고 있니? –

+0

@LS_newbie 한 열로 새보기를 만들었습니까? – nempoBu4

+0

예, 한 열로보기를 만들었습니다. 여전히 Object Variable Not Set 오류 메시지가 나타납니다. 또한 '하나의 열보기'에 대해 설명해 주시겠습니까? 3 열의 원본보기에는 이미 기존 데이터가 있습니다. 하나의 열이있는보기를 사용하면 문서가 어떻게 저장됩니까? –