[52929] in SAPr3-news
ABAP <- Novell GroupWise5: Problem Datum_Zeit auslesen
daemon@ATHENA.MIT.EDU (leowie)
Tue Jan 11 08:23:16 2005
To: sapr3-news@mit.edu
Date: 11 Jan 2005 05:23:10 -0800
From: leowie@gmx.at (leowie)
Message-ID: <811b8ef2.0501110523.c5757ba@posting.google.com>
Hallo,
habe ein Problem in Zusammenhang mit dem Auslesen von (kombinierten?)
Datums_Zeit - Feldern wie StartTime und EndTime (Format c: DD/MM/YY
space HH:MM:SS) aus Novell GroupWise5.
Das Setzen der Felder in eine Variable Typ C hingegen klappt aber z.B.
mit
... = '31/12/05 16:30:00'.
Fragliche Stellen siehe bitte unten unter <<<===??? .
Für etwaige Tipps wäre ich dankbar.
Grüsse aus Wien,
Leo
PS: entschuldigt bitte den noch primitiven Programmierstil: ich bin
ABAP-Neuling.
REPORT Z_GROUPWISE5_TERMIN .
*----------------------------------------------------------------------*
* Topic: Example: eMail mit Novell Groupwise 5
*
*
*
* Description: Primitives Test-Programm, welches in Novell GroupWise5
*
* im eigenen Kalender einen Termin anlegt.
*
*
*
* Novell GroupWise API: siehe
*
* http://developer.novell.com/ndk/gwobjapi.htm
*
*
*
* R/3 Release: MiniSAP TestSuite / 46D (Beilage Buch: ABAP Objects)
*
*
*
* Programmer: Leo Wiebogen
*
* Date: Dec 2004
*
*
*
*------------------------------ Questions
-----------------------------*
* Version 1: Diskussionsbasis zur geplanten Schulung
*
*
*
* Programm funktioniert, aber noch Qick+Dirty Spagetti-Code!
*
* (habe noch keine APAP-Erfahrung, keine Schulungen genossen etc.)
*
*
*
* Fraglich:
*
* Names? Functions? Includes? Input-Parameter? Messages?
*
* Debug-Modus on/off? Code-Beauty (KeyWords) ...
*
*
*
*-------------------------------Corrections----------------------------*
* Date Userid Correction Text
*
* 04.01.2004 Wiebogen :::::::::::::: :::::::::::::::::::::::::::::
*
*----------------------------------------------------------------------*
* --- Includes ---
INCLUDE OLE2INCL.
* --- Local Variables ---
CONSTANTS: OK TYPE I VALUE 0.
data: debugmode type i value 0,
bug type i value 0,
ii(3) type i value 0.
data: UserID(25) TYPE c,
CmdLine(70) TYPE c,
Password(25) TYPE c,
WhenToPrompt(25) TYPE c,
Reserved(25) TYPE c .
* --- COM-Handles ---
DATA: GWSession TYPE OLE2_OBJECT,
GWAccount TYPE OLE2_OBJECT,
GWFolder TYPE OLE2_OBJECT,
GWMessages TYPE OLE2_OBJECT,
GWMessage TYPE OLE2_OBJECT,
GWAppointment TYPE OLE2_OBJECT,
GWRecipients TYPE OLE2_OBJECT,
GWRecipient TYPE OLE2_OBJECT,
GWAddress TYPE OLE2_OBJECT,
GWAttachments TYPE OLE2_OBJECT,
GWAttachment TYPE OLE2_OBJECT,
GWBusySearchResult TYPE OLE2_OBJECT,
GWBusySearchElement TYPE OLE2_OBJECT,
GWTimeBlock TYPE OLE2_OBJECT,
GWCombinedResult TYPE OLE2_OBJECT,
GWTimeBlocks TYPE OLE2_OBJECT .
DATA: EMailAddress_Acco TYPE c,
EMailType_Acco TYPE c,
DisplayName_Acco TYPE c.
DATA: in_StartDate(17) TYPE c,
" Laenge (17) ist wichtig
" Format c: DD/MM/YY space HH:MM:SS zB: '31/12/05 16:30:00'
in_Duration TYPE f VALUE '',
in_EndDate(17) Type c,
finished type i value 0.
DATA: i_timeblocks type i value 0,
num(3) type c,
out_TB-ObjType(2) type c,
out_TB-StartDate(17) type c, " <<<===???
out_TB-Duration(8) type c,
out_TB-dur_std type p decimals 6,
out_TB-EndDate(17) type c. " <<<===???
* --- MAIN ---
PERFORM check_GW-installed.
IF Bug = 0.
* --- GWSession_init ---
CREATE OBJECT GWSession 'NovellGroupWareSession' .
perFORM check_GW-OLE-Errors.
PERFORM init_GW-Objects.
PERFORM get_GW-Acco-Fold-Addr-Mess.
* Termin-Beispiel:
in_StartDate = '31/01/05 14:45:00'.
in_Duration = 2 / 24. " 2 Stunden
in_EndDate = ''.
PERFORM create_GW-Appointment.
* Free all objects
PERFORM init_GW-Objects.
FREE OBJECT GWSession .
GWSession-HANDLE = -1.
ENDIF.
*----------------------------------------------------------------------*
FORM create_GW-Appointment.
* --- Eine Appointment - Message erzeugen ---
perFORM check_GW-OLE-Errors.
ii = 10.
perFORM info_debug.
if bug = 0.
* --- Message erzeugen (liegt vorerst im Root-Folder;
* noch ungesendeter Entwurf, ohne Zeiten etc.)
CALL METHOD OF GWMessages 'ADD' = GWMessage exporting
#1 =
'GW.MESSAGE.APPOINTMENT'
#2 = 4 . " 4 = draft
perFORM check_GW-OLE-Errors.
ii = 20.
perFORM info_debug.
if bug = 0. " --- GWMessage added
FREE OBJECT GWMessages. " wird nicht mehr benoetig
* --- Subject und BodyText zuweisen
SET PROPERTY OF GWMessage 'Subject'
= 'Test: ABAP Groupwise5 Termin'.
SET PROPERTY OF GWMessage 'BodyText'
= 'Primitives Testprogramm Z_GroupWise5_Termin von Leo
Wiebogen'
.
perFORM check_GW-OLE-Errors.
ii = 30.
perFORM info_debug.
if bug = 0. "Subj + Body set
* --- Empfaenger ---
CALL METHOD OF GWMessage 'RECIPIENTS' = GWRecipientS.
perFORM check_GW-OLE-Errors.
ii = 40.
perFORM info_debug.
if bug = 0. " GWRecipientS added
* Empfaenger (eigener Account) anlegen
CALL METHOD OF GWRecipients 'ADD' = GWRecipient
exporting #1 = GWAddress
#2 = 0.
perFORM check_GW-OLE-Errors.
ii = 41.
perFORM info_debug.
if bug = 0. "GWRecipient eigener Account added
* ggf. weitere Empfaenger ... (vorerst keine)
* (Memo: Recipients 'Count')
* --- Wunsch-Termin (-Datum,-Zeit,-Dauer,-Art) zuweisen ---
* (ohne "BusySearch" werden Termine einfach überlagert).
SET PROPERTY OF GWMessage 'Startdate' = in_StartDate.
" default: Duration 1 Stunde
IF in_Duration > 0.
SET PROPERTY OF GWMessage 'Duration' = in_duration.
else.
if in_EndDate <> ''.
SET PROPERTY OF GWMessage 'Enddate' = in_EndDate.
endif.
endif.
perFORM check_GW-OLE-Errors.
ii = 42.
perFORM info_debug.
* --- Termin-BusySearch ---
CALL METHOD OF GWMessage 'StartBusySearch' =
GWBusySearchResult exporting
#1 = in_StartDate
#2 = 7. " >= 7 Tage
* Loop bis zur Beendigung des Searches */
finished = 0.
WHILE finished = 0.
GET PROPERTY OF GWBusySearchResult 'completed' =
finished.
CALL METHOD OF GWBusySearchResult 'REFRESH'.
ENDwhile.
* 'CombinedResult' liegt nun in GWBusySearchElement vor:
* ein combinierter SnapShot über alle Empfaenger im Handle.
* Returns blank timeblock, wenn alle Empfaenger frei sind
...
GET PROPERTY OF GWBusySearchResult 'CombinedResult' =
GWBusySearchElement.
perFORM check_GW-OLE-Errors.
ii = 43 .
perFORM info_debug.
if bug = 0.
* Es koennten TimeBlocks da sein.
GET PROPERTY OF GWBusySearchElement 'TIMEBLOCKS' =
GWTimeBlocks.
perFORM check_GW-OLE-Errors.
ii = 44 .
perFORM info_debug.
if bug = 0.
* Timeblocks zählen
GET PROPERTY OF GWTimeBlocks 'COUNT' = i_timeblocks.
* CALL FUNCTION 'POPUP_TO_INFORM'
* EXPORTING
* TITEL = 'GWTimeBlocks COUNT'
* TXT1 = i_timeblocks
* TXT2 = ''.
* wenn timeblocks da: loop: alle auslesen
if i_timeblocks >= 1.
DO.
CALL METHOD OF GWBusySearchElement
'TIMEBLOCKS' = GWTimeBlock
exporting #1 = sy-index .
" nummer des blockes
perFORM check_GW-OLE-Errors.
ii = 45 .
perFORM info_debug.
* ObjType: 0 = free,
* < 1 = blocked >,
* 2 = out of *office,
* 3 = Tentative
GET PROPERTY OF GWTimeBlock 'ObjType'
= out_TB-ObjType.
GET PROPERTY OF GWTimeBlock 'StartDate'
= out_TB-StartDate. " <<<===???
* Duration: in Tagen
GET PROPERTY OF GWTimeBlock 'Duration'
= out_TB-Duration.
GET PROPERTY OF GWTimeBlock 'EndDate'
= out_TB-EndDate. " <<<===???
perFORM check_GW-OLE-Errors.
ii = 46.
perFORM info_debug.
* CALL FUNCTION 'POPUP_TO_INFORM'
* EXPORTING
* TITEL = 'TimeBlock'
* TXT1 = sy-index
* TXT2 = out_TB-StartDate.
num = sy-index.
out_tb-dur_std = out_TB-Duration.
multiply out_TB-Dur_std by 24.
WRITE: / 'TimeBlock: Nr:', num,
'ObjType:', out_TB-ObjType,
'StartDate:', out_TB-StartDate, "
<<<===???
" PROBLEM: Date nicht darstellbar
'Duration[Std]:',
out_TB-dur_std decimals 2,
'EndDate:', out_TB-EndDate. "
<<<===???
" PROBLEM: Date nicht darstellbar
IF sy-index = i_timeblocks.
EXIT.
ENDIF.
enddo.
endif. " i_timeblocks >= 1.
endif.
endif. " BusySearchResult vorhanden
endif. "GWRecipient TO added
endif. " GWRecipientS added
FREE OBJECT GWRecipientS. " wird nicht mehr benoetig
* --- Attachments ---
CALL METHOD OF GWMessage 'ATTACHMENTS' = GWAttachments.
perFORM check_GW-OLE-Errors.
ii = 70.
perFORM info_debug.
if bug = 0. " GWAttachmentS added
* Loop: alle Attachments ... (vorerst nur ein Attachment)
CALL METHOD OF GWAttachments 'ADD' = GWAttachment
exporting
#1 =
'H:\ABAP\Z_GROUPWISE5_TERMIN.ABP'
#2 = 1 . " 1 = File
perFORM check_GW-OLE-Errors.
ii = 80.
perFORM info_debug.
* end loop Att
endif. " GWAttachmentS added
FREE OBJECT GWAttachments. " wird nicht mehr benoetig
* --- Senden der Mail - Message ---
* if abfrage Termin seinen = wahr ...
CALL METHOD OF GWMessage 'SEND'.
perFORM check_GW-OLE-Errors.
ii = 90.
perFORM info_debug.
* endif.
endif. "Subj + Body set
endif. " GWMessage is added
endif.
ENDFORM.
*----------------------------------------------------------------------*
FORM get_GW-Acco-Fold-Addr-Mess.
* --- Login in den Account ---
call method of GWSession 'login' = GWAccount importing
#1 = UserID
#2 = CmdLine
#3 = Password
#4 = WhenToPrompt
#5 = Reserved .
" imp = rein, exp = raus
perFORM check_GW-OLE-Errors.
if bug = 0.
* --- Den Root Folder ermitteln ----
* im Root Folder wird das Mail vor dem Senden angelegt
GET PROPERTY OF GWAccount 'rootfolder' = GWFolder.
PERFORM check_GW-OLE-Errors.
if bug = 0.
* GET PROPERTY OF GWAccount 'rootfolder' = GWFolder.
FREE OBJECT GWAccount. " wird nicht mehr benoetigt
" siehe auch: SET PROPERTY OF ... '...' = ...
* --- Adresse des Root Folders merken ---
* ASSIGN GWAddress = GWFolder:Owner.
GET PROPERTY OF GWFolder 'owner' = GWAddress.
PERFORM check_GW-OLE-Errors.
if bug = 0.
* --- Alle-MessageS im Root Folder ermitteln ---
* hier wird die neue Message erzeugt, bleibt da bis zum Senden
GET PROPERTY OF GWFolder 'messages' = GWMessages.
PERFORM check_GW-OLE-Errors.
* OK wenn hier angelangt ohne Fehler.
FREE OBJECT GWFolder. " wird nicht mehr benoetigt
endif.
endif.
endif.
ENDFORM.
*----------------------------------------------------------------------*
FORM check_GW-installed.
* check whether and where Novell Groupwise 5 is installed
* (Quelle/Vorlage: FUNCTION RSAQ_XINT_CRYSTAL_REPORTS2)
data prg_location(255) type c.
CALL FUNCTION 'REGISTRY_GET'
EXPORTING
key = 'SHELL\OPEN\COMMAND'
section = 'groupwise5'
" 'word.document.8'
" 'excel.sheet.8'
IMPORTING
value = prg_location.
IF prg_location IS INITIAL.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
TITEL = 'Novell GroupWise 5 nicht installiert'(011)
TXT1 = 'Für diese Aktion benötigen Sie Novell
Groupwise'(012)
TXT2 = 'Kontaktieren Sie Ihren PC-Administrator'(013) .
Bug = 99.
EXIT.
ELSE.
data dummy(25) TYPE c.
SPLIT prg_location AT '/' INTO prg_location dummy. "remove /dde
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
TITEL = 'Gefundenes Programm'
TXT1 = prg_location
TXT2 = ''. " dummy
endif.
ENDFORM.
*----------------------------------------------------------------------*
FORM init_GW-Objects.
EMailAddress_Acco = ''.
EMailType_Acco = ''.
DisplayName_Acco = ''.
FREE OBJECT GWTimeBlock.
FREE OBJECT GWTimeBlocks.
FREE OBJECT GWCombinedResult.
FREE OBJECT GWBusySearchElement.
FREE OBJECT GWBusySearchResult.
FREE OBJECT GWAttachment .
FREE OBJECT GWAttachments .
FREE OBJECT GWAddress .
FREE OBJECT GWRecipient .
FREE OBJECT GWRecipients .
FREE OBJECT GWMessage .
FREE OBJECT GWMessages .
FREE OBJECT GWFolder .
FREE OBJECT GWAccount .
ENDFORM.
*----------------------------------------------------------------------*
* Subroutine for error handling
FORM check_GW-OLE-Errors.
IF SY-SUBRC NE 0.
" WRITE: / 'Error in OLE call', SY-MSGLI.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
TITEL = 'Error'
TXT1 = 'Error in OLE Call:'
TXT2 = 'GroupWise5'.
perFORM init_GW-Objects.
FREE OBJECT GWSession.
GWSession-HANDLE = -1.
Bug = 1.
EXIT.
ENDIF.
ENDFORM.
*----------------------------------------------------------------------*
* Subroutine for info handling
FORM info_debug.
IF debugmode = 1.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
TITEL = 'Info Debugging'
TXT1 = 'Stelle:'
TXT2 = ii.
ENDIF.
ENDFORM.