OKB-000270 | Datensätze mit bestimmten Dokumenten markieren

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.