Betrifft: ab orgAnice CRM 2008
Frage:
Wie kann man Datensätze markieren, die ein Dokument eines bestimmten Typs beinhalten? Z.B. alle Aktivitäten, die ein Word-Dokument beinhalten?
Lösung:
Es ist nicht möglich die Aufgabenstellung mit dem Markierungs-Assistenten zu lösen, da es innerhalb von orgBasic keine Möglichkeit gibt auf den Dokumententyp bzw. die Dateiendung zuzugreifen. Wir müssen ein VBA-Makro zu Hilfe ziehen:
Sub MarkDoc() ' Markiert in der Tabelle Aktivitäten alle Datensätze, ' die ein Word-Dokument (mit der Endung .doc) beinhalten Dim tbl As OrgDbServer31.Table Dim doc As OrgDbServer31.Document Set tbl = Database.Tables("Aktivitaeten") With tbl .Indexes.SetActiveIndex "ID" .UnmarkAll .GoTop Do While Not .EOF Set doc = tbl.Fields("Dokument").value If Not doc Is Nothing Then If doc.DefaultExtension = ".doc" Then .SetMark True End If End If .Skip Loop End With End Sub
In bestimmten Fällen kann es gewünscht sein, Dokumente eine bestimmten Typs als externe Dokumente abzulegen. Hier eine erweiterte Version der obigen Prozedur, die die gefundenen Dokumente als externe Dokumente ablegt:
Sub MoveDocTypeToExtern(psType As String, psTableName As String, psPath As String, psFileName As String) ' übergebenen Dokumenttyp von intern nach extern. ' psPath mit abschliessendem "\" angeben! ' Der in psPath angegebene Pfad muss existieren Dim tbl As OrgDbServer31.Table Dim doc As OrgDbServer31.Document Dim sPath As String On Error GoTo ErrHandler Set tbl = Database.Tables(psTableName) With tbl .Indexes.SetActiveIndex "ID", ORGDB_NAV_NOEVENTS .UnmarkAll ORGDB_NAV_NOEVENTS .GoTop ORGDB_NAV_NOEVENTS + ORGDB_NAV_NORELATIONS Do While Not .EOF Set doc = tbl.Fields("Dokument").value If Not doc Is Nothing Then If doc.DefaultExtension = psType Then .SetMark True sPath = psPath & psFileName & " " & .Fields("ID").value & doc.DefaultExtension doc.SaveAs sPath Set doc = Database.Documents.CreateLink(sPath) tbl.Fields("Dokument").value = doc .Write End If End If .Skip 1, ORGDB_NAV_NOEVENTS + ORGDB_NAV_NORELATIONS Loop End With Exit Sub ErrHandler: gErrors.DisplayError Hex(Err.Number) & ", " & Err.Description & ", MoveDocTypeToExtern, Tabelle: " & psTableName & ", ID: " & tbl.Fields("ID").value End Sub
Beispielaufruf:
MoveDocTypeToExtern „.doc“, „Aktivitaeten“, „D:\Test\“, „AktivitaetenID“
Vielen Dank an Herrn Kopplin von K+K Software E. + K. Kopplin GbR, dem Hersteller von KKMandant, für die Zurverfügungstellung des Quellcodes.