Benutzerdefinierter Befehl mit Datenübergabe
Moderatoren: Ingrid Weigoldt, Schlesselmann
Benutzerdefinierter Befehl mit Datenübergabe
Guten Tag,
ich habe leider von ACT keine wirkliche Ahnung, hoffe daher hier Spezialisten zu finden die mir helfen können.
Was ich erreichen möchte ist mittels eines Buttons in der Symbolleiste ein Programm zu starten und an dieses Parameter (Wert aus einem Feld des aktuell geöffneten Kontaktes) zu übergeben.
Ich zeige das mal am Beispiel Explorer:
statisch ist das kein Problem:
explorer.exe X:
Ich möchte gerne die Argumente dynamisch übergeben:
explorer.exe %Kunde%
Wie gesagt, es geht natürlich nicht um den Explorer, aber ich glaube sie verstehen so worum es mir geht.
Vielen Dank im Voraus
ich habe leider von ACT keine wirkliche Ahnung, hoffe daher hier Spezialisten zu finden die mir helfen können.
Was ich erreichen möchte ist mittels eines Buttons in der Symbolleiste ein Programm zu starten und an dieses Parameter (Wert aus einem Feld des aktuell geöffneten Kontaktes) zu übergeben.
Ich zeige das mal am Beispiel Explorer:
statisch ist das kein Problem:
explorer.exe X:
Ich möchte gerne die Argumente dynamisch übergeben:
explorer.exe %Kunde%
Wie gesagt, es geht natürlich nicht um den Explorer, aber ich glaube sie verstehen so worum es mir geht.
Vielen Dank im Voraus
-
- Beiträge: 3027
- Registriert: Donnerstag 24. April 2003, 02:00
- Wohnort: Viernheim
Hallo Fr. Weigoldt,
hat mich schon ein ganzen Stück weitergebracht.
Ich wusste nicht das es für ACT einen SDK gibt und habe darüber leider auch keine Doku.
Habe das Script FormelACT jetzt so weit ausgeschlachtet das es meine Anforderungen entsprechen würde, nur eins ist mir nicht klar.
In der Function SetCurrentLookup() wird ja eine temporäre Datei erstellt die die aktuelle Abfrage enthält.
Bei mir sieht das so aus:
Act 3.0 Contact Lookup ArchiveKc:\documents and settings\administrator\my documents\act\daten\kontakte.dbf
Als Ergebnis bekomme ich innerhalb der Funktion mittels immer die Unique_ID des ersten Datensatzen zurück (Ist ja auch klar, schiesslich wird ja mit auf den ersten Datensatz gesprungen).
Nur wie komme ich auf den aktuellen Datensatz, sprich auf den Werte des eines Feldes im aktuellen Datensatz ?
Vieleicht gibts sowas wie ?
hat mich schon ein ganzen Stück weitergebracht.
Ich wusste nicht das es für ACT einen SDK gibt und habe darüber leider auch keine Doku.
Habe das Script FormelACT jetzt so weit ausgeschlachtet das es meine Anforderungen entsprechen würde, nur eins ist mir nicht klar.
In der Function SetCurrentLookup() wird ja eine temporäre Datei erstellt die die aktuelle Abfrage enthält.
Bei mir sieht das so aus:
Act 3.0 Contact Lookup ArchiveKc:\documents and settings\administrator\my documents\act\daten\kontakte.dbf
Als Ergebnis bekomme ich innerhalb der Funktion mittels
Code: Alles auswählen
ACTTable.Data(1)
Code: Alles auswählen
ACTTable.MoveFirst
Nur wie komme ich auf den aktuellen Datensatz, sprich auf den Werte des eines Feldes im aktuellen Datensatz ?
Vieleicht gibts sowas wie
Code: Alles auswählen
ACTTable.MoveCurrent
-
- Beiträge: 1675
- Registriert: Samstag 14. April 2001, 02:00
- Wohnort: Hamburg
- Kontaktdaten:
Hallo klumaiero,
reicht die hier beschriebene Funktion von FormalACT nicht aus?
Neue Version 1.7 von FormelACT mit Run-Befehl
und
FormelACT 1.9 - Neue Version
Die ID (Nummern) der Felder bekommen Sie mit FeldInfo2 heraus.
FormalACT verarbeitet ohne das "?" immer den aktuellen Kontakt in der laufenden ACT!-Anwendung.
Gruß
Robert Schellmann
reicht die hier beschriebene Funktion von FormalACT nicht aus?
Neue Version 1.7 von FormelACT mit Run-Befehl
und
FormelACT 1.9 - Neue Version
Die ID (Nummern) der Felder bekommen Sie mit FeldInfo2 heraus.
FormalACT verarbeitet ohne das "?" immer den aktuellen Kontakt in der laufenden ACT!-Anwendung.
Gruß
Robert Schellmann
MSControl4 - wird Ihre ACT!-Daten zum Rotieren bringen...
nein das reicht mir leider nicht
..wie gesagt, ich habe das Script von Hrn. Schellmann völlig zweckentfremden und ausgeschlachtet.
Ausserdem habe ich eine Funktion Search hinzugefügt.
Diese Funktion lädt ein vordefinierte XML File, ersetzt den Suchbegriff durch die Unique_ID des aktuellen Datensatzes, schreibt das geänderte File in einen Ordner und startet die mit der Dateiendung verknüpfte Applikation.
Es tut mir leid, ich bin zu blöd um zu verstehen was das
FormalACT verarbeitet ohne das "?" immer den aktuellen Kontakt in der laufenden ACT!-Anwendung.
bedeutet.
Leider wir mit der MsgBox immerdie Unique_Id des ersten Datensatzes ausgegeben und ich weis nicht was ich machen muss um die des aktuellen zu bekommen.
Ausserdem habe ich eine Funktion Search hinzugefügt.
Diese Funktion lädt ein vordefinierte XML File, ersetzt den Suchbegriff durch die Unique_ID des aktuellen Datensatzes, schreibt das geänderte File in einen Ordner und startet die mit der Dateiendung verknüpfte Applikation.
Es tut mir leid, ich bin zu blöd um zu verstehen was das
FormalACT verarbeitet ohne das "?" immer den aktuellen Kontakt in der laufenden ACT!-Anwendung.
bedeutet.
Leider wir mit der MsgBox immerdie Unique_Id des ersten Datensatzes ausgegeben und ich weis nicht was ich machen muss um die des aktuellen zu bekommen.
Code: Alles auswählen
Option Explicit
Public Const cAnwendung = "ActSuche"
Public Const AVContact = 1
Public Const AVGroup = 3
Public FSO
Public ACTAPP
Public ACTView
Public ACTDatabase
Public ACTTable
Public ScriptFolderName
Public Modus
Public CurrentIDs
Public CurrentRecordNumber
Public WSH
'starte Sub Main
Main
' --------------------------------------------------------------------------
Function InitACTOLE()
InitACTOLE = False
On Error Resume Next
Set ACTAPP = CreateObject("ACTOLE.APPOBJECT")
If Err.Number <> 0 Then
MsgBox "Es konnte keine OLE-Verbindung zur ACT!-Anwendung erstellt werden." + vbCrLf + _
"Fehlernummer: " + CStr(Err.Number) + vbCrLf + _
"Fehlerbeschreibung: " + Err.Description, vbExlcamation , cAnwendung
On Error GoTo 0
Exit Function
End If
On Error GoTo 0
'MsgBox(ACTAPP.GetOpenDBName) 'aktuelle Datenbank
If Not ACTAPP Is Nothing Then
If ACTAPP.GetOpenDBName() <> "" then
Set ACTView = ACTAPP.Views.GetActive
'MsgBox(ACTView.Type ) '1 = Kontakte, 3= Gruppen
If Not ACTView Is Nothing Then
If ACTView.Type = AVContact OR ACTView.Type = AVGroup Then
InitACTOLE = True
End If
End If
End If
End If
End Function
' --------------------------------------------------------------------------
Function InitACTDataBase()
InitACTDataBase = False
'On Error Resume Next
'WScript.Echo "Verbindung zur ACT!-Datenbank wird aufgebaut..."
Set ACTDatabase = CreateObject("ACTOLE.Database")
Select Case Err.Number
Case 429, 501
MsgBox "Error "+ CStr(Err.Number)+ " ACTOLE" + vbCrLf + _
cAnwendung + " kann keine OLE-Verbindung zur ACT!-Datenbank erstellen." + vbCrLf + _
"Fehlernummer: " + CStr(Err.Number) + vbCrLf + _
"Fehlerbeschreibung: " + Err.Description , vbExlcamation , cAnwendung
Exit Function
Case 0
ACTDatabase.OpenEx ""
'WScript.Echo "Verbindung zur ACT!-Datenbank wurde aufgebaut."
Case Else
MsgBox "Error " + CStr(Err.Number) + " ACTOLE" + vbCrLf + _
cAnwendung + " kann keine OLE-Verbindung zur ACT!-Datenbank erstellen." + vbCrLf + _
"Fehlernummer: " + CStr(Err.Number) + vbCrLf + _
"Fehlerbeschreibung: " + Err.Description , vbExlcamation , cAnwendung
Exit Function
End Select
'On Error Goto 0
InitACTDataBase = True
End Function
'---------------------------------------------------------------
Function SetCurrentLookup()
'WScript.Echo "..Funktion SetCurrentLookup"
Dim sTempFile
SetCurrentLookup = False
If ACTAPP Is Nothing Then Exit Function
'WScript.Echo "ACTAPP vorhanden"
If ACTDatabase Is Nothing Then Exit Function
'WScript.Echo "ACTDatabase vorhanden"
If FSO is Nothing Then Exit Function
'WScript.Echo "FSO vorhanden"
'WScript.Echo "Die aktuelle ACT!-Suche wird ermittelt..."
Select Case ACTView.Type
Case AVContact
Set ACTTable = ACTDatabase.Contact
' Save Current COntact-Lookup
'WScript.Echo "speichere TemporäreSuche (" + sTempFile + ")"
sTempFile = FSO.GetSpecialFolder(2) + "\ActLookup\" + FSO.GetTempName
ACTAPP.SaveCurrentLookup sTempFile
Select Case ACTAPP.GetLastError
Case 0 'S_OK
Case Else
MsgBox "Es ist ein OLE-Fehler beim Speichern der aktuellen ACT!-Suche aufgetreten." + vbCrLf + _
"OLE-Fehlernummer: " + CStr(ACTAPP.GetLastError) + vbCrLf + _
"Temporäre Lookup-Datei:" + sTempFile , vbExclamation , cAnwendung
Exit Function
End Select
If FSO.FileExists(sTempFile) = False Then
MsgBox "Die temporäre Lookup-Datei '" + sTempFile + "' konnte nicht gefunden werden.", vbExclamation , cAnwendung
Exit Function
End If
' Load Current Contact Lookup
ACTTable.LoadLookUpQuery sTempFile
Select Case ACTTable.LastError
Case 0 'S_OK
Case Else
MsgBox "Es ist ein OLE-Fehler beim Laden der aktuellen ACT!-Suche aufgetreten." + vbCrLf + _
"OLE-Fehlernummer: " + CStr(ACTTable.LastError) + vbCrLf + _
"Datei:" + sTempFile , vbExclamation , cAnwendung
Exit Function
End Select
'FSO.DeleteFile sTempFile
Case AVGroup
Set ACTTable = ACTDatabase.Group
End Select
'WScript.Echo "Die aktuelle ACT!-Suche wurde ermittelt (" + +")"
'ACTTable.MoveLast ' gehe zu letztem Datensatz
'ACTTable.MoveFirst ' gehe zu erstem Datensatz
'ACTTable.RecordCount ' Anzahl der Datensätze
SetCurrentLookup = True
End Function
' --------------------------------------------------------------------------
Function Search(typ, expression)
MsgBox(expression)
End Function
Sub Main()
Set ACTAPP = Nothing
Set ACTView = Nothing
Set ACTDatabase = Nothing
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSH = CreateObject("WScript.Shell")
Dim sFieldValue
Dim sFieldValueLengh
Dim dokTyp
If InitACTOLE = True Then 'Check ob die verbindung zu Act hergestellt wurde
'WScript.Echo "Verbindung zu Act hergestellt"
InitACTDataBase()
SetCurrentLookup()
sFieldValue = CStr(ACTTable.Data(CLng(1)))
If sFieldValue <> "" Then
dokTyp = WScript.Arguments.Item(0)
Select Case(dokTyp)
Case "Aktenvermerk" Search "Aktenvermerk", sFieldValue
' Case "Allg. Dokument"
' Case "Angebot"
' Case "Baustelle"
' Case "Lieferschein"
' Case "Preis"
' Case "Rechnung"
' Case "Technik
'Case "Vertrag" windreamSearch "Vertrag", sFieldValue
Case Else
MsgBox("kein oder kein gültiger Dokumententyp übergeben")
End Select
Else
MsgBox("Keine zeichen an die Suche übergeben")
End If
Else 'keine Verbindung zu ACT
MsgBox("Es konnte keine Verbindung zur ACT!-Anwendung hergestellt werden.")
End If
Set ACTView = Nothing
Set ACTAPP = Nothing
Set ACTTable = Nothing
Set ACTDatabase = Nothing
End Sub
-
- Beiträge: 1675
- Registriert: Samstag 14. April 2001, 02:00
- Wohnort: Hamburg
- Kontaktdaten:
Hallo klumaiero,
eigentlich mache ich im ACTForum keinen Support für meinen eigenen Quellcode oder die ACT!-SDKs. Da es sich hier um ein Anwender- und nicht um ein Entwickler-Forum handelt.
Nur ein Tipp:
Über das ACTView-Objekt (s. Function InitACTOLE)
kann man folgende Methoden verwenden:
- ActView.GetCurrentID : Erhält man die UniqueID des aktuellen ACT! Kontaktes
- ActView.GetField(FieldID) : Erhält man den Inhalt eine ACT!-Feldes des aktuellen ACT! Kontaktes
- ActView.SetField FieldID, Value : Kann ein Feldinhalt ändern
Gruß
Robert Schellmann
eigentlich mache ich im ACTForum keinen Support für meinen eigenen Quellcode oder die ACT!-SDKs. Da es sich hier um ein Anwender- und nicht um ein Entwickler-Forum handelt.
Nur ein Tipp:
Über das ACTView-Objekt (s. Function InitACTOLE)
kann man folgende Methoden verwenden:
- ActView.GetCurrentID : Erhält man die UniqueID des aktuellen ACT! Kontaktes
- ActView.GetField(FieldID) : Erhält man den Inhalt eine ACT!-Feldes des aktuellen ACT! Kontaktes
- ActView.SetField FieldID, Value : Kann ein Feldinhalt ändern
Gruß
Robert Schellmann
MSControl4 - wird Ihre ACT!-Daten zum Rotieren bringen...