Com-Schnittstelle CoClass?
Moderator: Moderatoren
- mini990
- 1000 working lines a day
- Beiträge: 592
- Registriert: Sa, 28. Jan 2006 9:44
- Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
- Danksagung erhalten: 1 Mal
Com-Schnittstelle CoClass?
Hallo,
bei einem ActiveX-Objekt (COM-Schnittstelle) muss ein zweites Objekt als "CoClass" angelegt werden.
Geht das mit Xbase?
Danke im Voraus.
Gruß Stefan
bei einem ActiveX-Objekt (COM-Schnittstelle) muss ein zweites Objekt als "CoClass" angelegt werden.
Geht das mit Xbase?
Danke im Voraus.
Gruß Stefan
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Com-Schnittstelle CoClass?
hi,
meinst du damit das ein activeX Object einer Property eines anderen activeX Object zugeordnet werden soll ?
meinst du damit das ein activeX Object einer Property eines anderen activeX Object zugeordnet werden soll ?
Code: Alles auswählen
oAAA := CreateObject( "AAA...." )
...
oBBB := CreateObject( "BBB...." )
...
oAAA:MyProperty := oBBB // DAS geht NICHT mit Xbase++
gruss by OHR
Jimmy
Jimmy
- mini990
- 1000 working lines a day
- Beiträge: 592
- Registriert: Sa, 28. Jan 2006 9:44
- Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
- Danksagung erhalten: 1 Mal
Re: Com-Schnittstelle CoClass?
Hmmmm....
Sowas soll ich umsetzen:
... und da gibt's keine Chance mit Xbase?
Gruß Stefan
Sowas soll ich umsetzen:
Code: Alles auswählen
$appobj = new-object -comobject praxisCENTER3.ApplicationObject
$appobj.SetMode('MultiplePatient', '1')
# get Physician
$physician = $appobj.Physician
$physician.LANR="123456789"
$physician.BSNR="821234567"
$physician.Title="Dr"
$physician.FirstName="Hans"
$physician.LastName="Maier"
$physician.PostalCode="81369"
$physician.Activate()
# get Patients
$patients = $appobj.Patients
$patients.Clear()
$patients.Count
# add new patient
$pat1 = new-object -comobject praxiscenter3.patient
$patients.add($pat1)
$pat1.ID = "45678"
$pat1.IKId = "108377503"
$pat1.InsuredMemberId = "123456789"
$pat1.FirstName = "Max"
$pat1.LastName = "Mayer2"
$pat1.City = "Berlin"
$pat1.PostalCode = "80337"
$pat1.Street = "Parkstrasse"
$pat1.No = "6"
$pat1.Pregnancy = 0
$pat1.Height = 196
$pat1.Birthday = "07.09.1981"
$pat1.Sex = 0
# get prescription collection
$prescription = $pat1.Prescription
$prescription.Clear()
# add new prescription item
# erfolgt in ipc
#$presMed = new-object -comobject praxiscenter3.PrescriptionMedicament
#$presMed.NecAutIdem=1
#$presMed.Count=4
#$presMed.PIC=780908
#$presMed.PrintName="xyz_PrintName2"
#$presMed.NewPrescription=1
#$presMed.Dosage.Morning = 3
#$presMed.SelectedPrescriptionType = 1
#$prescription.Add($presMed)
#$prescription.Activate()
# aktivate patient
$pat1.Activate()
# aktivate App/Session
$appobj.Activate()
$appobj.Show()
# Rezeptieren
# ALT + F9
$med = new-object -comobject praxisCENTER3.Medicament
foreach ($presMed in $prescription)
{
# $presMed.PIC
$appobj.GetMedicament($presMed.PIC,[ref]$med)
# Ausgabe der Eigenschaften in der Console
$med.PIC
$med.narcoticaddition
$med.Homeopathic
}
#$prescription.Count
#$presMed = $prescription.Item(0)
#$presMed.PIC
$appobj.Hide()
$appobj.Close()
Gruß Stefan
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Com-Schnittstelle CoClass?
ausprobieren ...mini990 hat geschrieben:... und da gibt's keine Chance mit Xbase?Code: Alles auswählen
$patients.add($pat1) // -> hier ... #$prescription.Add($presMed) // und hier
ein (mögliches) Problem sehe ich beim ".ADD" da man hier ein Object (mit Eigenschaften) einem anderen Object zufügen möchte.
gruss by OHR
Jimmy
Jimmy
- mini990
- 1000 working lines a day
- Beiträge: 592
- Registriert: Sa, 28. Jan 2006 9:44
- Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
- Danksagung erhalten: 1 Mal
Re: Com-Schnittstelle CoClass?
mit dem adden gibt es kein Problem.
Das funktioniert soweit. Ich kann auch die Werte abfragen.
Wo ich nicht weiterkomme ist hier:
Bei diesem getmedicament ..... bekomme ich immer leere Werte zurück.
Das funktioniert soweit. Ich kann auch die Werte abfragen.
Wo ich nicht weiterkomme ist hier:
Code: Alles auswählen
$med = new-object -comobject praxisCENTER3.Medicament
foreach ($presMed in $prescription)
{
# $presMed.PIC
$appobj.GetMedicament($presMed.PIC,[ref]$med)
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Com-Schnittstelle CoClass?
hi,
für die FOREACH Kombination kannst du das versuchen
für die FOREACH Kombination kannst du das versuchen
Code: Alles auswählen
bCollBlock := {|oService,n| AADD(aItem,{ n,;
oService:getProperty("PIC"),;
oService:getProperty("narcoticaddition"),;
oService:getProperty("Homeopathic") })}
ComEvalCollection(prescription, bCollBlock )
IF LEN(aItem) > 0
// auswerten
ENDIF
gruss by OHR
Jimmy
Jimmy
- mini990
- 1000 working lines a day
- Beiträge: 592
- Registriert: Sa, 28. Jan 2006 9:44
- Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
- Danksagung erhalten: 1 Mal
Re: Com-Schnittstelle CoClass?
Hier mal der Quellcode....
Ich kann alle Werte des Objekts oMedic auswerten, hier stimmen die Inhalte.
Auch die for-next Schleife wird korrekt abgearbeitet.
Probleme bereitet diese Zeile:
oifap:GetMedicament(cPZN, oMed)
Hier erscheint die Fehlermeldung:
Gruß Stefan
Code: Alles auswählen
// AutomationObjekt
oIfap := CreateObject("PraxisCENTER3.ApplicationObject")
oIfap := oIfap:dynamicCast ( ActiveXObject() )
...
...
oIfAp:OnPrescription := { |x| FOnPrescript(x) }
STATIC FUNCTION FOnPrescript (x)
aMedi := AClone ({})
// IfAp-PC verstecken
oIfap:Hide()
oMed := CreateObject("PraxisCENTER3.Medicament")
// Presciption --> aMedi
IF oPat:Prescription:Count > 0
for i:=0 to oPat:Prescription:Count-1
oMedic := oPat:Prescription:Item(i)
// Daten des Medikamentes in Array ablegen
cPZN := padl(alltrim(ntoc(oMedic:PIC)), 7, "0")
oifap:GetMedicament(cPZN, oMed)
nAVP := val(strtran(ntoc(oMed:Pharmacyprice), ",", "."))
aadd(aMedi,{cZ1, cZ2, cPZN, nAVP, oMed:DosageForm, allTrim(oMed:Quantity)+" "+allTrim(oMed:QuantityOfUnit), cSort, cDosi, nAnz})
? cPZN
? nAVP
next i
use
ENDIF
oPat:Prescription:Clear()
lPrescription := .T.
RETURN (.T.)
Auch die for-next Schleife wird korrekt abgearbeitet.
Probleme bereitet diese Zeile:
oifap:GetMedicament(cPZN, oMed)
Hier erscheint die Fehlermeldung:
- Xbase++ Version : Xbase++ (R) Version 1.90.355
Betriebssystem : Windows Vista 06.01 Build 07601 Service Pack 1
------------------------------------------------------------------------------
oError:args :
-> VALTYPE: C VALUE: GetMedicament
-> VALTYPE: C VALUE: 1020081
-> VALTYPE: O CLASS: AutomationObject
oError:canDefault : J
oError:canRetry : N
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Falscher Variablentyp.
Parameter hat falschen Wert
oError:filename : NIL
oError:genCode : NIL
oError:operation : GetMedicament
oError:osCode : -2147352568
oError:severity : 2
oError:subCode : 6500
oError:subSystem : Automation
oError:thread : 1
oError:tries : NIL
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Gruß Stefan
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2945
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Com-Schnittstelle CoClass?
Hast du mal versucht, das Object per Reference zu übergeben ?
Code: Alles auswählen
oifap:GetMedicament(cPZN, @oMed)
Viele Grüße
Wolfgang
Wolfgang
- mini990
- 1000 working lines a day
- Beiträge: 592
- Registriert: Sa, 28. Jan 2006 9:44
- Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
- Danksagung erhalten: 1 Mal
Re: Com-Schnittstelle CoClass?
hatte ich schon probiert, gleiches Ergebnis.
Trotzdem Danke...
Gruß Stefan
Trotzdem Danke...
Gruß Stefan
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Com-Schnittstelle CoClass?
hi,mini990 hat geschrieben:Hier mal der Quellcode....Code: Alles auswählen
oIfap := oIfap:dynamicCast ( ActiveXObject() ) ... oIfAp:OnPrescription := { |x| FOnPrescript(x) } for i:=0 to oPat:Prescription:Count-1 oMedic := oPat:Prescription:Item(i) // Daten des Medikamentes in Array ablegen cPZN := padl(alltrim(ntoc(oMedic:PIC)), 7, "0") oifap:GetMedicament(cPZN, oMed)
ein
Code: Alles auswählen
oIfap:dynamicCast ( ActiveXObject() )
Code: Alles auswählen
o:subscribeEvent("Name_of_Event")
mit scheint als wenn "oIfAp:OnPrescription" ein solcher Event ist, oder ?
zu der Method
Code: Alles auswählen
oifap:GetMedicament(cPZN, oMed)
grob gesagt suchst du in einer "Menge" ($prescription) wobei ein Object / Structur ($med) die Ergebnisse enthalten soll.
dabei verwendest du, in der Schleife, immer wieder das selbe Object was du "füllen" möchtest... hm
dies ähnelt dem Problem in WMI wo dafür ComEvalCollection() verwendet wird welches das Object als Parameter, im Codeblock
Code: Alles auswählen
{|oService, n| ...}
ich tippe eher auf den ersten Parameter dennoError:description : Falscher Variablentyp.
Code: Alles auswählen
#$presMed.PIC=780908
gruss by OHR
Jimmy
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Com-Schnittstelle CoClass?
ich sehe gerade das [ref] ...mini990 hat geschrieben:Code: Alles auswählen
$med = new-object -comobject praxisCENTER3.Medicament foreach ($presMed in $prescription) { # $presMed.PIC $appobj.GetMedicament($presMed.PIC,[ref]$med)
mit Referenz auf ein Object könnte ein numerischer Pointer gemeint sein ( wo ich die Structur finde )
Code: Alles auswählen
oifap:GetMedicament(nPZN, oMed:interface)
gruss by OHR
Jimmy
Jimmy
- mini990
- 1000 working lines a day
- Beiträge: 592
- Registriert: Sa, 28. Jan 2006 9:44
- Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
- Danksagung erhalten: 1 Mal
Re: Com-Schnittstelle CoClass?
Habe diese Beschreibung für den Aufruf gefunden:
Function GetMedicament (Value: WideString, var Medicament: IMedicament): Integer;
Parameter: Value PZN des Medikaments oder StarCode [out] Medicament Ein Medicament-Objekt,
welches nach dem Funktionsaufruf das Ergebnis beinhaltet.
Das Objekt muss vor dem Funktionsaufruf als CoClass angelegt werden.
Bin ehrlich: ich verstehe es nicht...
Gruß Stefan
Function GetMedicament (Value: WideString, var Medicament: IMedicament): Integer;
Parameter: Value PZN des Medikaments oder StarCode [out] Medicament Ein Medicament-Objekt,
welches nach dem Funktionsaufruf das Ergebnis beinhaltet.
Das Objekt muss vor dem Funktionsaufruf als CoClass angelegt werden.
Bin ehrlich: ich verstehe es nicht...
Gruß Stefan
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Com-Schnittstelle CoClass?
hm ...mini990 hat geschrieben:Function GetMedicament (Value: WideString, var Medicament: IMedicament): Integer;
ein WideString hört sich nach String an ABER vorher im Source wurde ein numerischer Wert zugewiesen ?!
mit o:Interface bekommst du einen numerischen Wert.
gruss by OHR
Jimmy
Jimmy