私はすでに次のコードを使用して、ファイルを Livelink にコピーしています。
Public Function saveFileLL(target As Long, pathSource As String, fileName As String) As Boolean
Dim dav As New ADODB.Record
Dim files As New ADODB.Recordset
Dim objStream As New ADODB.Stream
Dim url As String
If Not Val(Nz(target, 0)) > 0 Or Not pathSource Like "*.*" Or Not fileName Like "*.*" Then
saveFileLL = False
Exit Function
End If
url = URL_LIVELINK_DAV & target
dav.Open url, , adModeReadWrite
Set files = dav.GetChildren
If Not (files.BOF And files.EOF) Then files.MoveFirst
Do Until files.EOF
If fileName Like Replace(files("RESOURCE_DISPLAYNAME"), "_", "?") Then Exit Do
files.MoveNext
Loop
If files.EOF Then
files.addnew "RESOURCE_PARSENAME", fileName
files.Update
End If
files.Close
dav.Close
objStream.Open "URL=" & url & "/" & fileName, adModeWrite
objStream.Type = adTypeBinary
objStream.LoadFromFile pathSource
objStream.Flush
objStream.Close
Set dav = Nothing
Set files = Nothing
Set objStream = Nothing
saveFileLL = True
End Function
さて、タイトルが示すように、同じことをしたいのですが、フォルダーを使用します。私の質問は実際には Livelink に関連しているのではなく、一般的なフォルダーの処理方法に関連していると思います。すべてのサブフォルダー/ファイルをループせずに、すべての子を含むフォルダーを移動することは可能ですか? saveFileLL()
そのために機能をどのように適応させることができますか?
編集:
以下は、objId によって設計された Livelink フォルダーに 1 つのフォルダーを直接作成できるコードの別の部分です。
Public Function CreateFolderToLLFolder(ObjId As String, folderName As String, Optional getId As Boolean = False) As String
Dim davfile As New ADODB.Record
Dim davFiles As New ADODB.Recordset
Dim davDir As New ADODB.Record
Dim newDirFields(1) As Variant
Dim newDirValues(1) As Variant
newDirFields(0) = "RESOURCE_PARSENAME"
newDirValues(0) = folderName
newDirFields(1) = "RESOURCE_ISCOLLECTION"
newDirValues(1) = True
Set davDir = connection(ObjId, "")
Set davFiles = davDir.GetChildren()
If (davFiles.Supports(adAddNew)) Then
davFiles.addnew newDirFields, newDirValues
End If
davfile.Open davFiles, , adModeReadWrite
CreateFolderToLLFolder = davfile.fields("urn:x-opentext-com:ll:properties:nodeid").value
End Function
Public Function connection(ObjId As String, Optional filename As String = "") As ADODB.Record
Dim davDir As New ADODB.Record
davDir.Open filename, "URL=http://livelink-server/livelinkdav/nodes/" & ObjId & "/", adModeReadWrite, adFailIfNotExists, DelayFetchStream, "", ""
Set connection = davDir
End Function
これが機能する理由を聞かないでください。私はこれを見つけましたが、機能します。objId は、Livelink がすべてのファイル/フォルダーに与える一意の ID です。
ありがとうございました。