AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Tobit DvISE Programmierung

Ein Thema von DelphiPeter · begonnen am 6. Apr 2008 · letzter Beitrag vom 7. Apr 2008
Antwort Antwort
Seite 1 von 2  1 2   
DelphiPeter

Registriert seit: 21. Dez 2007
Ort: Iserlohn
198 Beiträge
 
Delphi 2010 Professional
 
#1

Tobit DvISE Programmierung

  Alt 6. Apr 2008, 19:02
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]
Peter Majewski
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.288 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Brauche dringend Hilfe zu Tobit DvISE Programmierung

  Alt 6. Apr 2008, 19:20
   AbsenderFax := oFaxItem.Fields['SRFrom'].Value; // 'SRFrom' in gemischter GROSS/kleinschreibung, könnte wichtig sein
  Mit Zitat antworten Zitat
DelphiPeter

Registriert seit: 21. Dez 2007
Ort: Iserlohn
198 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Brauche dringend Hilfe zu Tobit DvISE Programmierung

  Alt 6. Apr 2008, 19:25
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.
Peter Majewski
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.288 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Brauche dringend Hilfe zu Tobit DvISE Programmierung

  Alt 6. Apr 2008, 19:55
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.
  Mit Zitat antworten Zitat
DelphiPeter

Registriert seit: 21. Dez 2007
Ort: Iserlohn
198 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Brauche dringend Hilfe zu Tobit DvISE Programmierung

  Alt 6. Apr 2008, 20:05
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!
Angehängte Dateien
Dateityp: pas dvapi32_tlb_188.pas (223,6 KB, 20x aufgerufen)
Peter Majewski
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.802 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Brauche dringend Hilfe zu Tobit DvISE Programmierung

  Alt 6. Apr 2008, 20:22
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

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
42
  Mit Zitat antworten Zitat
DelphiPeter

Registriert seit: 21. Dez 2007
Ort: Iserlohn
198 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Brauche dringend Hilfe zu Tobit DvISE Programmierung

  Alt 6. Apr 2008, 20:41
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..
Miniaturansicht angehängter Grafiken
screeni_127.jpg  
Peter Majewski
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.288 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Brauche dringend Hilfe zu Tobit DvISE Programmierung

  Alt 7. Apr 2008, 00:04
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;
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.802 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Brauche dringend Hilfe zu Tobit DvISE Programmierung

  Alt 7. Apr 2008, 07:24
Moin,

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
42
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.802 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Brauche dringend Hilfe zu Tobit DvISE Programmierung

  Alt 7. Apr 2008, 07:37
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
42
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2014 by Daniel R. Wolf