Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Tobit DvISE Programmierung (https://www.delphipraxis.net/111622-tobit-dvise-programmierung.html)

DelphiPeter 6. Apr 2008 19:02


Tobit DvISE Programmierung
 
Hallo Leute

Ich habe ein großes Problem. Kennt sich jemand mit Tobit DvISE API Programmierung aus? Ich komme zwar gut zurecht, aber ich habe Probleme mit dem FaxItem Objekt.

Und zwar muss ich die Absender Fax Nummer auslesen. Über Visual C# geht das so oFaxItem.Field("SRFrom").Value. In der Dokkumentation der API wird der Zugriff auf Fields zu beschrieben.

Zitat:

get_Fields

Returns the Items Field Collection
In addition, the item allows access to seperate fields as properties of the object itself. A field can be addressed via their ID in the fields collection.

List of defined field IDs: Field ID's

Midl:
IDispatch* Fields();




Syntax:
HRESULT Fields([out, retval] IDispatch** lppFields);
[out]lppFields: contains the Fields object



Example:
VARIANT vIndex;
Archive* pArchive = NULL;
MessageItems* pMessageItems = NULL;
MessageItem* pMessageItem = NULL;
FaxItem* pFaxItem = NULL;
Fields* pFields = NULL;
Field* pField = NULL;

vIndex.vt = VT_I4;
if (SUCCEEDED (pAcc->GetSpecialArchive(DvArchivePersonalIn,&pArchive)) )
{
if (SUCCEEDED(pArchive->get_AllItems(&pMessageItems)))
{
vIndex.lVal = 1;
if (SUCCEEDED(pMessageItems->Item(vIndex, &pMessageItem)))
{
if (SUCCEEDED(pMessageItem->QueryInterface(IID_FaxItem,(void**)&pFaxItem)))
{
if (SUCCEEDED (pFaxItem->get_Fields((LPDISPATCH)&pFields)))
{
VARIANT vt;
vt.vt = VT_I4;
vt.lVal = Field_FullnameFrom;
if (SUCCEEDED (pFields->Item(vt, &pField)))
{
VariantInit(&vt);
pField->get_Value(&vt);
...
pField->Release ();
}
pFields->Release ();
}
}
pMessageItem->Release();
}
pMessageItems->Release();
}
pArchive->Release();
}
Mein Ansatz sieht so aus:

Delphi-Quellcode:
...
oApp    := CreateOLEObject('DVOBJAPILIB.DvISEAPI') as IApplication;
oAccount := oApp.Logon(Unassigned, Unassigned, Unassigned, Unassigned, Unassigned, 'AUTH');
oArchive := OAccount.GetArchive(archiv);
oMessageItems := oArchive.FaxItems;

...

for m := 0 to oMessageItems.Count-1 do begin
   oFaxItem := oMessageItems.Item(m) as FaxItem;

   AbsenderFax := oFaxItem.Fields('SRFROM');
end;
...
Dann bekomme ich den Fehler nach Fields "Operator oder Semikolon fehlt."


Also wenn jemand Ahnung hat, oder mir sonst irgendwie helfen kann, wäre ich wirklich sehr sehr dankbar!

Danke

Peter

[edit=SirThornberry]Titel geändert - Das du Hilfe benötigst sagt bereits das gewählte Forum aus und ob du die Hilfe dringend brauchst oder nicht beschreibt das Problem ja nicht wozu aber der Titel da ist - Mfg, SirThornberry[/edit]

sx2008 6. Apr 2008 19:20

Re: Brauche dringend Hilfe zu Tobit DvISE Programmierung
 
Delphi-Quellcode:
   AbsenderFax := oFaxItem.Fields['SRFrom'].Value; //  'SRFrom' in gemischter GROSS/kleinschreibung, könnte wichtig sein

DelphiPeter 6. Apr 2008 19:25

Re: Brauche dringend Hilfe zu Tobit DvISE Programmierung
 
Hallo sx2008!

Danke für deine schnelle Antwort. Leider funktioniert dein Code nicht, bekomme erstmal wieder Stress mit .Value. Delphi sagt dazu "Klasse besitzt keine Standardeigenschaft".

Wenn ich es weglasse, dann meckert er wieder hier oFaxItem.Fields['SRFrom']; "Operator oder Semikolon fehlt."

Werde aus dem was in der Doku steht einfach nicht schlau.

sx2008 6. Apr 2008 19:55

Re: Brauche dringend Hilfe zu Tobit DvISE Programmierung
 
Ok, Doku könnte fehlerhaft sein.
Im Delphi-Menu Projekt->Typbibiothek importieren... klicken.
Es erscheint eine umfangreiche Liste.
Jetzt musst du die Tobit Software auswählen; dabei kann ich ich dir nicht helfen; weiss nicht wie die TLB heisst.
Dann auf Unit erstellen klicken und die erzeugte Datei xxxxx_TLB.pas (...\Imports Verzeichnis) suchen und in dieses Forum als Anhang hochladen.
In dieser Datei sind dann alle Methoden enthalten, die die Tobit Software anbietet.

DelphiPeter 6. Apr 2008 20:05

Re: Brauche dringend Hilfe zu Tobit DvISE Programmierung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo nochmal sx2008!

Das ist wirklich sehr nett von dir, das du mir hilfst. Ich weiß das sehr zu schätzen. Im Anhang also die PASCAL Datei.

Vielleicht wirst du daraus schlau.

Gruß,
Peter

und danke nochmals!

oki 6. Apr 2008 20:22

Re: Brauche dringend Hilfe zu Tobit DvISE Programmierung
 
Hallo DelphiPeter,

in deiner TLB ist für Field fogendes definiert:
Delphi-Quellcode:
  Field = interface(IDispatch)
    ['{2211A2D2-7250-474A-9DE2-6DE1D63D622A}']
    function Get_Parent: IDispatch; safecall;
    function Get_Account: Account; safecall;
    function Get_Value: OleVariant; safecall;
    procedure Set_Value(pvValue: OleVariant); safecall;
    function Get_Name: WideString; safecall;
    property Parent: IDispatch read Get_Parent;
    property Account: Account read Get_Account;
    property Value: OleVariant read Get_Value write Set_Value;
    property Name: WideString read Get_Name;
  end;
Somit sollte ein Aufruf mit

Delphi-Quellcode:
AbsenderFax := oFaxItem.Fields['SRFrom'].Value;
korrekt sein. Wenn ich da nicht falsch liege sollte dein Fehler an einer anderen Stelle liegen. Leider kann ich dir aber auch nicht sagen wo.

Gruß oki

DelphiPeter 6. Apr 2008 20:41

Re: Brauche dringend Hilfe zu Tobit DvISE Programmierung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Oki,

also es ist nicht zu fassen, es funktioniert einfach nicht...

Wie kann das denn bloß sein?

Vielleicht weil ich den Wert von Value keiner String Variable zuordnen kann, oder so? Aber zu was soll ich es sonst zuordnen?

Hmm..

sx2008 7. Apr 2008 00:04

Re: Brauche dringend Hilfe zu Tobit DvISE Programmierung
 
Ich habe jetzt mit dem Namen "FaxItems" in der TLB.pas gesucht.
Man findest, dass dieses Property ein Inteface namens "MessageItems" zurückliefert.
Delphi-Quellcode:
  MessageItems = interface(IDispatch)
    ['{2A2E9B58-B2F9-49DA-B302-DC0402376CEB}']
    function Item(vIndex: OleVariant): MessageItem; safecall; // <==
    function Get__NewEnum: IUnknown; safecall;
    function Get_Count: Integer; safecall;
    function Get_Parent: IDispatch; safecall;
    function Get_Account: Account; safecall;
    property _NewEnum: IUnknown read Get__NewEnum;
    property Count: Integer read Get_Count;
    property Parent: IDispatch read Get_Parent;
    property Account: Account read Get_Account;
  end;
Es wird also ein Objekt "MessageItem" aus der Liste geliefert.
Es wird aber auch das Interface "FaxItem" untersützt:
Delphi-Quellcode:
  FaxItem = interface(MessageItem)
    ['{20F310C8-AD57-4F8C-AE04-15233E09F95B}']
    function Get_To_: WideString; safecall;
    function Get_PageCount: Integer; safecall;
    function Get_Image: OleVariant; safecall;
    function Get_Fields: IDispatch; safecall;
    procedure Copy(const pArchive: Archive); safecall;
    procedure Move(const pArchive: Archive); safecall;
    property To_: WideString read Get_To_;
    property PageCount: Integer read Get_PageCount;
    property Image: OleVariant read Get_Image;
    property Fields: IDispatch read Get_Fields; // <==
  end;
Und dort finden wir auch das Property "Fields". Es hat den Typ IDispatch, kann aber auch in folgendes Interface verwandelt werden:
Delphi-Quellcode:
  Fields = interface(IDispatch)
    ['{2B059336-EE52-4273-B79A-6FC1AE82A896}']
    function Item(vIndex: OleVariant): Field; safecall;
    function Get__NewEnum: IUnknown; safecall;
    function Get_Count: Integer; safecall;
    function Get_Parent: IDispatch; safecall;
    function Get_Account: Account; safecall;
    function GetText(ID: Integer): WideString; safecall;
    function Get_UserFields: IUserFields; safecall;
    property _NewEnum: IUnknown read Get__NewEnum;
    property Count: Integer read Get_Count;
    property Parent: IDispatch read Get_Parent;
    property Account: Account read Get_Account;
    property UserFields: IUserFields read Get_UserFields;
  end;
Damit sähe dein Code so aus:
Delphi-Quellcode:
var
   felder : Fields;
begin
...
for m := 0 to oMessageItems.Count-1 do begin
   oFaxItem := oMessageItems.Item(m) as FaxItem;

   felder := oFaxItem.Fields as Fields;

   AbsenderFax := felder.Item('SRFROM');
end;

oki 7. Apr 2008 07:24

Re: Brauche dringend Hilfe zu Tobit DvISE Programmierung
 
Moin,

Zitat:

Zitat von sx2008
Damit sähe dein Code so aus:
Delphi-Quellcode:
var
   felder : Fields;
begin
...
for m := 0 to oMessageItems.Count-1 do begin
   oFaxItem := oMessageItems.Item(m) as FaxItem;

   felder := oFaxItem.Fields as Fields;

   AbsenderFax := felder.Item('SRFROM');
end;

Imho sollte damit AbsenderFax aber eher das Object Field zugewiesen werden. Um den gespeicherten Wert zu erhalten sollte .Value dann doch wieder notwendig sein.

Gruß oki

oki 7. Apr 2008 07:37

Re: Brauche dringend Hilfe zu Tobit DvISE Programmierung
 
Ach übriegens, an der Zuweisung an eine Stringvariable sollte es nicht liegen. Der Compiler meckert bei einem Aufruf ja darüber, dass keine Standardeigenschaften vorliegen. Somit sollte etwas mit der Typzuweisung nicht stimmen. Er scheint hier die Eigenschaft Value nicht zu finden. Ist der Typ von Field erst mal richtig zugewiesen, dann sollte Value und String nicht mehr das Problem sein, da Value in Field als Varianter Typ definiert ist.

Gruß oki


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:07 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz