ICS - Kalendereintrag z.B. Outlook

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
adrian
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 272
Registriert: Mo, 08. Mai 2006 8:58
Wohnort: Aadorf TG
Danksagung erhalten: 1 Mal
Kontaktdaten:

ICS - Kalendereintrag z.B. Outlook

Beitrag von adrian »

Hallo zusammen

Wir möchten von unserer Applikation dem Kunden die Möglichkeit geben, direkt einen Outlook-Kalender Eintrag zu erstellen. Dies geht auch recht problemlos.

Ausser, es werden keine Sonderzeichen und Umlaute dargestellt, daher anstelle "Müller" erscheint "Mller". Ich nehme an dies hat was mit dem Zeichensatz zu tun, doch komme ich nicht weiter.

Hat wer eine Idee?

Hier der Code:

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,Time())
	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:"+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:"+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:"+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.
Besten Dank

Adrian
es Grüessli

Adrian
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15710
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 73 Mal
Danksagung erhalten: 38 Mal
Kontaktdaten:

Re: ICS - Kalendereintrag z.B. Outlook

Beitrag von brandelh »

Hi,

genau, vermutlich ist dein Programm in OEM und du erstellst eine OEM Datei.
Das kannst du am einfachsten mit NOTEPAD prüfen, öffne damit die Datei (wenn die Umlaute richtig sind, ist es ANSI).
Dein Programm benutzt die veraltete Druckersteuerung mit @ SAY ... für diesen Fall braucht man aber einen String für ConvToAnsi()
bzw. SET CHARSET ANSI ... eventuell werden die @ SAY Befehle aber dann zurückübersetzt ...

ich mache das so ...

Code: Alles auswählen

#define CRLF chr(13)+chr(10) // passt bei Windows, sonst je nach Zielsystem auch nur chr(13) ODER chr(10) !
local cBuffer, cVar1, cVar2 etc. 
...
DEFAULT cVar1 TO "???"
DEFAULT cVar2 TO "???"
cBuffer := cVar1 + CRLF + "Irgend ein Text" + cVar2 ...
...
// ist der cBuffer nun OEM oder ANSI ? Bei OEM noch umwandeln.
if set(_SET_CHARSET) = 1 // OEM JA, bei Ansi = 0
   cBuffer := ConvToAnsiCP(cBuffer)
endif 
Str2Disk(cFile,cBuffer)
...
*---------------------------------------------------------------------------------------------
function Str2Disk(cFile,cTxt)             // memowrit() fügt ein chr(26) an die Datei an, was stört !
   local nResult, nHandle, nByte
   nResult := 0                           // wird schon alles gut gehen ...
   nHandle := FCreate(cFile)
   if nHandle = -1
      nResult := FError()
   else
      nByte := FWrite( nHandle, cTxt )
      if len(cTxt) # nByte
         nResult := FError()
      endif
   endif
   FClose(nHandle)
return nResult
Gruß
Hubert
Benutzeravatar
adrian
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 272
Registriert: Mo, 08. Mai 2006 8:58
Wohnort: Aadorf TG
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: ICS - Kalendereintrag z.B. Outlook

Beitrag von adrian »

Danke für die Antwort Hubert

Doch "mein" Problem ist es eben, dass im WordPad alles korrekt aussieht. (Datei beiliegend, jedoch auf TXT umgetauft)

adrian
Dateianhänge
outlook.txt
(923 Bytes) 230-mal heruntergeladen
es Grüessli

Adrian
Benutzeravatar
adrian
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 272
Registriert: Mo, 08. Mai 2006 8:58
Wohnort: Aadorf TG
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: ICS - Kalendereintrag z.B. Outlook

Beitrag von adrian »

Inzwischen habe ich herausgefunden, dass wenn im Wordpad für das ä das ä steht und für das ü das ü dann klappt es, doch ist ist weder Ansi noch OEM.

adrian
es Grüessli

Adrian
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15710
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 73 Mal
Danksagung erhalten: 38 Mal
Kontaktdaten:

Re: ICS - Kalendereintrag z.B. Outlook

Beitrag von brandelh »

adrian hat geschrieben:Inzwischen habe ich herausgefunden, dass wenn im Wordpad für das ä das ä steht und für das ü das ü dann klappt es, doch ist ist weder Ansi noch OEM.
adrian
Kann man den Code angeben ?
Wenn nicht, tippe ich mittlerweile auf UTF-8 !
Gruß
Hubert
Benutzeravatar
adrian
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 272
Registriert: Mo, 08. Mai 2006 8:58
Wohnort: Aadorf TG
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: ICS - Kalendereintrag z.B. Outlook

Beitrag von adrian »

ja, darauf tippe ich eben auch. Gibt es da mittlerweile eine Funktion für die Umsetzung auf UTF8?

Habe Da in einem Nachricht gelesen dass es eventuell mal die Funktion CToUTF8() geben sollte, gibt es meines Wissens jedoch noch nicht, oder?

Was wäre die Lösung?

adrian
es Grüessli

Adrian
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15710
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 73 Mal
Danksagung erhalten: 38 Mal
Kontaktdaten:

Re: ICS - Kalendereintrag z.B. Outlook

Beitrag von brandelh »

GENAU !

wenn ich deine ANSI Datei mit Notepad++ (hat nichts mit Xbase+ zu tun) unter UTF-8 speichere, sieht sie genauso aus.
Wenn die 1.90.355 keine UTF8 Funktion hat (ich weiß es jetzt gar nicht), OT4XB von Pablo hat sie ;-)
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14662
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: ICS - Kalendereintrag z.B. Outlook

Beitrag von Jan »

Günter (Beyes) hat am 10. März 2006 um 12:10 Uhr in der NG generic eine Funktion UTF8toANSI gepostet. Die setze ich selber schon länger ein.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
adrian
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 272
Registriert: Mo, 08. Mai 2006 8:58
Wohnort: Aadorf TG
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: ICS - Kalendereintrag z.B. Outlook

Beitrag von adrian »

Danke Jan, habe ich gelesen.

Ich benötige genau die andere Richtung. Werde mal schauen, ob ich eventuell den Code anpassen kann.

Hubert: Habe schnell das Tutorial von Pablo gelesen, welcher Befehl sollte für die Umsetzung taugen?

adrian
es Grüessli

Adrian
Benutzeravatar
adrian
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 272
Registriert: Mo, 08. Mai 2006 8:58
Wohnort: Aadorf TG
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: ICS - Kalendereintrag z.B. Outlook

Beitrag von adrian »

Der Eintrag von Rolf vom » Do Jan 14, 2010 2:50 pm hat die Lösung gebracht.

Herzlichen Dank allen beteiligten, ins besonders Rolf für die Lösung.

adrian
es Grüessli

Adrian
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15710
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 73 Mal
Danksagung erhalten: 38 Mal
Kontaktdaten:

Re: ICS - Kalendereintrag z.B. Outlook

Beitrag von brandelh »

adrian hat geschrieben:Hubert: Habe schnell das Tutorial von Pablo gelesen, welcher Befehl sollte für die Umsetzung taugen?
In der Online-Hilfe :arrow: http://www.xbwin.com/ot4xbXHlp/
:arrow: ot4xb Reference Manual
:arrow: Reference
:arrow: Functions By Category
:arrow: Strings
:arrow: UTF8 / ANSI / OEM conversion

Code: Alles auswählen

cAnsiToUtf8( cAnsi ) -> cUtf8
cUtf8ToAnsi(cUtf8) -> cAnsi
cOemToUtf8(cOem) -> cutf8
cUtf8ToOem(cUtf8) -> cOem
daraus die erste ;-)
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12913
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: ICS - Kalendereintrag z.B. Outlook

Beitrag von AUGE_OHR »

adrian hat geschrieben:Wir möchten von unserer Applikation dem Kunden die Möglichkeit geben, direkt einen Outlook-Kalender Eintrag zu erstellen. Dies geht auch recht problemlos.

Ausser, es werden keine Sonderzeichen und Umlaute dargestellt, daher anstelle "Müller" erscheint "Mller". Ich nehme an dies hat was mit dem Zeichensatz zu tun, doch komme ich nicht weiter.
schon mal meinen Outlook Calendar Clone ausprobiert ?
der arbeitet ja auch über MAPI d.h. alles was du in meinen Xbase++ Application machst wird automatisch in Outlook durchgeführt.

mit den deutschen Umlauten habe ich kein Problem bzw. ConvToAnsiCP() funktioniert bei "deutschem" OEM -> ANSI.
da braucht man KEINE UTF-8 Konvertierung, das liegt dann eher an deinem Font.
Tip : die in FONT.CH programmunabhängigen Fonts benutzen

woran ich nun noch tüftle sind DBCS Zeichen wie ich die im chinesischen habe.
ich kann alles in chinesisch eintragen, editieren etc. auf einem chinesischen OS() aber ich will ja auch von einer deutsche OS() Version die Einträge zumindest lesen können ...
gruss by OHR
Jimmy
Antworten