Anfängerbefehle Outlook Schnittstelle

Einbindung von Office-Komponenten wie Word, Excel usw.

Moderator: Moderatoren

Antworten
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Anfängerbefehle Outlook Schnittstelle

Beitrag von Benz »

Hi,

wieder mal werde ich aus der Microsoft-Befehlsdatenbank nicht schlau.
Kann mir jemand einen kleinen Einstieg in der Xbasebasierten Fernsteuerung von Outlook weiterhelfen ?

Für den Anfang würde mir reichen :

1) Den Start der Kommunikation mit Outlook
2) Das Anlegen eines kleinen Termins in Outlook.

Oder hat vllt jemand eine bessere Beschreibung zu den Outlookbefehlen, wie es Microsoft hat ?
Das Punkt 2 schon ein wenig durchgekaut wurde, weiß ich, allerdings werd ich auch daraus nicht so richtig schlau..
Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 483
Registriert: So, 28. Mär 2010 19:21
Danksagung erhalten: 11 Mal

Re: Anfängerbefehle Outlook Schnittstelle

Beitrag von azzo »

Hallo,
hier der Quellcode wie ich es mit Harbor/FWH löse. Es sollte aber in xBase ähnlich funktionieren.
mfg
Otto

Code: Alles auswählen

FUNCTION AddOLappointment( dDate, nTime, nLenInMin, cBetreff, cNotiz,oDlg )
   local hOutlook
   local hApptItem
   local lSave      := .F.
   local cDate      :=  substr(dtoc(dDate),1,2)+"/"+substr(dtoc(dDate),4,2)+"/"+substr(dtoc(dDate),7,4)
   local cTime      :=  "10:00"
   local hAppItem

   if len(ALLTRIM(str(   INT(nTime * 100)  ) ) )=3
      cTime   := "0"+ALLTRIM(str((nTime * 100))     )
   else
      cTime   := ALLTRIM(str((nTime * 100))    )
   endif

   cTime:= substr(cTime,1,2)+":"+substr(cTime,3,2)

   hOutlook  := CreateOLEObject( "Outlook.Application" )
   hAppItem  := OLEInvoke( hOutlook, "CreateItem", 1 )

   SET CENTURY ON
   OLESetProperty( hAppItem, "Start", cDate + " " + cTime )
   OLESetProperty( hAppItem, "StartTime", cTime + ":00" )
  // OLESetProperty( hAppItem, "EndTime", cTime + ":00" )

   SET CENTURY ON
   SET Date TO GERMAN
   OLESetProperty( hAppItem, "Duration", nLenInMin  )
   OLESetProperty( hAppItem, "Subject", cBetreff )
   OLESetProperty( hAppItem, "Body", cNotiz )
   OLESetProperty( hAppItem, "Mileage", 225 )

   OLEInvoke( hAppItem, "Display" )
   hAppItem := NIL
   hOutlook := NIL

   lSave := .t.
   oDlg:END()

RETURN (lSave)
Benutzeravatar
adrian
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Mo, 08. Mai 2006 8:58
Wohnort: Aadorf TG
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Anfängerbefehle Outlook Schnittstelle

Beitrag von adrian »

Wir machen dies über die ICS-Datei

Code: Alles auswählen

FUNCTION Outlook(sOrt, sBetreff, dDatum, sTimeVon, sTimeBis, sText) 
	LOCAL nZeilen:=0

	SET Date Format "yyyymmdd"

	SetDefaultString(sOrt,"")
	SetDefaultString(sBetreff,"")
	SetDefaultDate(dDatum,Date())
	SetDefaultString(sTimeVon,"  :  :  ")
	SetDefaultString(sTimeBis,Time())
	SetDefaultString(sText,"")
		
	SETPRC(0,0)
	SET PRINTER TO (_SDATEI_BEN(100)+"OUTLOOK.ICS")
	SET DEVICE TO PRINTER
	SET CONSOLE OFF
	SET PRINT ON

	@ nZeilen,0 SAY "BEGIN:VCALENDAR";nZeilen++
	@ nZeilen,0 SAY "PRODID:-//Microsoft Corporation//Outlook 14.0 MIMEDIR//EN";nZeilen++
	@ nZeilen,0 SAY "VERSION:2.0";nZeilen++
	@ nZeilen,0 SAY "METHOD:PUBLISH";nZeilen++
	@ nZeilen,0 SAY "X-MS-OLK-FORCEINSPECTOROPEN:TRUE";nZeilen++
	@ nZeilen,0 SAY "BEGIN:VEVENT";nZeilen++
	@ nZeilen,0 SAY "CLASS:PUBLIC";nZeilen++
	IF ! empty(sText)
		@ nZeilen,0 SAY "DESCRIPTION:"+ANSItoUTF8(sText);nZeilen++
	ENDIF	
	@ nZeilen,0 SAY "DTEND:"+DtoS(dDatum)+"T"+SubStr(sTimeVon,1,2)+SubStr(sTimevon,4,2)+"00Z";nZeilen++
	@ nZeilen,0 SAY "DTSTART:"+DtoS(dDatum)+"T"+SubStr(sTimeBis,1,2)+SubStr(sTimeBis,4,2)+"00Z";nZeilen++
	IF ! empty(sOrt)
		@ nZeilen,0 SAY "LOCATION:"+ANSItoUTF8(sOrt);nZeilen++
	ENDIF	
	@ nZeilen,0 SAY "PRIORITY:5";nZeilen++
	@ nZeilen,0 SAY "SEQUENCE:0";nZeilen++
	IF ! empty(sBetreff)
		@ nZeilen,0 SAY "SUMMARY;LANGUAGE=de-ch:"+ANSItoUTF8(sBetreff);nZeilen++
	ENDIF	
	@ nZeilen,0 SAY "TRANSP:OPAQUE";nZeilen++
	@ nZeilen,0 SAY "X-MICROSOFT-CDO-BUSYSTATUS:BUSY";nZeilen++
	@ nZeilen,0 SAY "X-MICROSOFT-CDO-IMPORTANCE:1";nZeilen++
	@ nZeilen,0 SAY "X-MICROSOFT-DISALLOW-COUNTER:FALSE";nZeilen++
	@ nZeilen,0 SAY "X-MS-OLK-AUTOFILLLOCATION:FALSE";nZeilen++
	@ nZeilen,0 SAY "X-MS-OLK-CONFTYPE:0";nZeilen++
	@ nZeilen,0 SAY "BEGIN:VALARM";nZeilen++
	@ nZeilen,0 SAY "TRIGGER:-PT"+AppIni():GetEntry("INIT", "OUTLOOK_TRIGGER","30","C")+"M";nZeilen++
	@ nZeilen,0 SAY "ACTION:DISPLAY";nZeilen++
	@ nZeilen,0 SAY "DESCRIPTION:Reminder";nZeilen++
	@ nZeilen,0 SAY "END:VALARM";nZeilen++
	@ nZeilen,0 SAY "END:VEVENT";nZeilen++
	@ nZeilen,0 SAY "END:VCALENDAR";nZeilen++
	
	SET PRINT OFF
	SET DEVICE TO SCREEN
	SET CONSOLE ON
	SET Printer OFF
	SET Printer to
	SET Date GERMAN

 	apiShellExecute(NIL, SHELL_OPEN, _SDATEI_BEN(100)+"OUTLOOK.ICS")
Return .T.	


function ANSItoUTF8( cAnsi )
    Local i
    Local imax   := Len(cAnsi)
    Local cstr   := ""
    Local cbin   := ""

    for i := 1 to imax
        //-- das reicht erst einmal, da in Xbase die Funktion Asc()
        //-- nur Wert im Bereich zwischen 0 und 255 zurück gibt
        If asc(cAnsi[I]) > 127
            cbin:="110000"+ntoc(asc(cAnsi[I]),2)
            cstr   +=Chr(cton(left(cbin,8),2))+Chr(cton("10"+right(cbin,6),2))
        else
            cstr   +=cAnsi[I]
        endif
    next

    cUtf8 := cstr
return cUtf8


FUNCTION cton( cBin )
    LOCAL iPos  := 0
    LOCAL iCount:= 0
    LOCAL iInt  := 0
    LOCAL iWert := 0
    LOCAL cTemp := ""

    cBin   := Alltrim(cBin)
    iCount := LEN(cBin)
    FOR iPos = 0 to iCount-1
        cTemp := cBin[iCount-iPos]
        iWert := val(cTemp)
        iInt := iInt + ( iWert * (2^(iPos)) )
    NEXT
RETURN Int(iInt)
Adrian
es Grüessli

Adrian
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Anfängerbefehle Outlook Schnittstelle

Beitrag von AUGE_OHR »

hi,

Code: Alles auswählen

METHOD MapiDetail:AddNewItem( cText, cMemo, dDate, cTime, nMinute )

LOCAL bSaveError
LOCAL oError
LOCAL xVar
LOCAL lSuccess   := .F.

   IF ::UseMapiDetail = .T.
      lThread := .T.
      //
      IF NIL = ::oOutlook
         bSaveError := ERRORBLOCK( { | oError | BREAK( oError ) } )
         BEGIN SEQUENCE
            ::oOutlook := CreateObject( "Outlook.Application" )
         RECOVER USING oError
            ERRORBLOCK( bSaveError )
            ::oOutlook := NIL
            MSGBOX( "Auf MS Outlook kann nicht zugegriffen werden." )
         END SEQUENCE
         ERRORBLOCK( bSaveError )
      ENDIF

      IF NIL = ::oOutlook
         MSGBOX( "Bitte stellen Sie sicher," + ;
         CHR( 13 ) + CHR( 10 ) + "dass MS Outlook auf Ihrem Computer korrekt installiert ist.", "Fehler" )
         lThread := .F.
         RETURN {}
      ENDIF

      ::oNameSpace := ::oOutlook:GetNamespace( "MAPI" )
      IF NIL = ::oNameSpace
         MSGBOX( "can not get NameSpace MAPI" )
         lThread := .F.
         RETURN {}
      ENDIF

      bSaveError := ERRORBLOCK( { | oError | BREAK( oError ) } )
      BEGIN SEQUENCE
         ::oAppointment := ::oNameSpace:getDefaultFolder( olFolderCalendar )
      RECOVER USING oError
         ERRORBLOCK( bSaveError )
         ::oAppointment := NIL
         MSGBOX( "Der RPC-Server ist nicht verfgbar." )
      END SEQUENCE
      ERRORBLOCK( bSaveError )

      IF NIL = ::oAppointment
         MSGBOX( "can not get Items" )
         lThread := .F.
         RETURN {}
      ENDIF
   ELSE
      MSGBOX( "not need for DBF ???" )
      RETURN .F.
   ENDIF

   ::oItem := ::oOutlook:CreateItem( olAppointmentItem )

   ::oItem:treatDateAsString( .t. )
   ::oItem:Start := DTOS( dDate ) + cTime
   ::oItem:Duration := nMinute                              
   ::oItem:Subject := TRIM( cText )
   ::oItem:Body := cMemo

   //
   // not used default .F.
   //
   ::oItem:AllDayEvent := .F.
   ::oItem:ReminderSet := .F.

   //
   // do save here
   //
   ::oItem:save()

RETURN ( .t. )
gruss by OHR
Jimmy
Antworten