Reading busines object event in WDA
I have a alv table , and its the list of quotations . On document no click (whcih is a link) , I am calling CL_WD_RUNTIME_SERVICES=>ATTACH_FILE_TO_RESPONSE to call sap shortcut. Now i have a question here as well
The VA22 screen opens up in a very small display , how do I default this to maximum size ?
Once the user changes a quotation , this should generate a BOR event namely BUS2031( CHANGED ). I believe we can link change document events to BOR events in SWEC transaction.
Now is there any way to read the change event in WDA and refresh the ALV accordlingly.
Also is there any other way to refresh ALV as soon as the document is changed.
Thanks
Awaiting your response.
i know I can timed trigger a refresh say every 30 seconds , but this will happen even if the user is doing some processing ,
(for eg entering values on a popup in a different window.)
Similar Messages
-
Issue regarding [Work Flow] Business Object Event Raise in ABAP Program
Hi All,
I have one issue regarding [Work Flow] Business Object Event Raise in ABAP Program.
Actual TDS is as below:
If E message type written, raise Business object BUS2005 (Production order) Event PickShortage for production order passing warehouse, transfer request
(BUS2065 Object key) in event container. Also include table of text version of error
messages for this set of Transfer
Request.
Can anybody tell me how can i write it technically in ABAP Code.
Can anybody solve this issue!
Thanks in advance.
Thanks,
Deep.Hi,
Can anybody solve above posted issue!
Thanks,
Deep. -
RE: Re[2]: Service Object events and LockMgr
I think there are a lot to implement a lock manager. If several objects
should be updated in one transaction, the lock manager should be able to
handle rollbacks. Other things like release lock when exception happens,
avoiding dead locks, etc. Most of the features are provided by DBMS, so
I think using a option 2 would be a better solution.
-----Original Message-----
From: Dimitar Gospodinov [mailto:[email protected]]
Sent: Wednesday, July 28, 1999 2:44 PM
To: Peter Sham
Cc: Duncan Kinnear; [email protected]
Subject: Re[2]: Service Object events and LockMgr
Hello Peter,
Wednesday, July 28, 1999, 9:19:10 PM, you wrote:
PS> Hi,
PS> Just wonder exactly how this Lock Manager can be
implemented. Do you mean that you are
PS> going to cache every object that is instantiated from the
database? Or you just cache
PS> the object id, primary key, etc?
PS> Frankly speaking, I won't attempt to due with this kind
of currency coding myself as
PS> the database vendor has spent years in coding just to do this.
PS> Regards.
The second one - you just need some unique value that will identify
the object being locked. You should register with the Lock
Manager only
the objects that you want to lock.
For me, one of the goal of such pattern is to give you some freedom
from the specifics of the database lock mechanism.
Another benefit that I can see is that using such approach you can
always answer to the question: "Can I modify/delete this object?".
Best regards,
Dimitar mailto:[email protected]
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive
<URL:http://pinehurst.sageit.com/listarchive/forte>
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/forte>I think there are a lot to implement a lock manager. If several objects
should be updated in one transaction, the lock manager should be able to
handle rollbacks. Other things like release lock when exception happens,
avoiding dead locks, etc. Most of the features are provided by DBMS, so
I think using a option 2 would be a better solution.
-----Original Message-----
From: Dimitar Gospodinov [mailto:[email protected]]
Sent: Wednesday, July 28, 1999 2:44 PM
To: Peter Sham
Cc: Duncan Kinnear; [email protected]
Subject: Re[2]: Service Object events and LockMgr
Hello Peter,
Wednesday, July 28, 1999, 9:19:10 PM, you wrote:
PS> Hi,
PS> Just wonder exactly how this Lock Manager can be
implemented. Do you mean that you are
PS> going to cache every object that is instantiated from the
database? Or you just cache
PS> the object id, primary key, etc?
PS> Frankly speaking, I won't attempt to due with this kind
of currency coding myself as
PS> the database vendor has spent years in coding just to do this.
PS> Regards.
The second one - you just need some unique value that will identify
the object being locked. You should register with the Lock
Manager only
the objects that you want to lock.
For me, one of the goal of such pattern is to give you some freedom
from the specifics of the database lock mechanism.
Another benefit that I can see is that using such approach you can
always answer to the question: "Can I modify/delete this object?".
Best regards,
Dimitar mailto:[email protected]
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive
<URL:http://pinehurst.sageit.com/listarchive/forte>
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/forte> -
Re: Service Object events and LockMgr
On the option that you have considered, I have implemented the same model
in my previous project (using Java/RMI), but I felt that it is more than
what is normally needed for concurrency protection.
I can suggest another option that is worth considering which is in place in
our app for concurrency.
Almost every table in our db has created By, created On, modifed By,
modified On columns. The parent class of all business objects has
attributes that correspond to these four columns. In addition to these
four, there is a fifth attribute (introduced when concurrency was built)
called originalModifiedOn. Upon retrieval from the db, it is set to
modifiedOn value (from the db), during UPDATE, the value in this column is
added part of the WHERE clause. So when the second user tried to do save
the same object, the underlying db update will get a 'zero rows updated'
which is translated into an application error 'possible concurrency
error'. The user re-retreives the now 'stale' object before applying their
edits.
A lot of these things are and can be built into the framework imposing very
little work that each Object needs to do to have concurrency protection.
I am not sure if there is a mention in the Patterns paper of this model,
but it is very easy to implement and supports what is needed.
Kishore Puvvada's Mail
[email protected] on 07/28/99 01:47:00 AM
To: [email protected]@INTERNET
cc: (bcc: Kishore Puvvada/HQ-IS/TAL)
Subject: Service Object events and LockMgr
Hi folks,
We're currently looking at strategies for dealing with the simultaneous
updates to the database from multiple clients (concurrency
management). That is when two (or more) clients load the same object to
edit it, then make different changes and save them to the database.
We have a copy of a Forté document (from the "Patterns" course, I
think) which describes three methods of dealing with this:
1) Lock the database table row as soon as a client select it for editing
and hold the lock until it is saved.
2) Immediately before 'saving' check that the database hasn't changed
(either by reading what's there before updating, or by using a huge
'where' clause that contains all unchanged fields)
3) The Forté "LockMgr" pattern, which uses a service object with notifier
proxies to allow locking and updating notification between the clients.
Option 3 is obviously the most robust method, but it requires a fair
amount of coding and could also be a bottleneck for database reads and
writes.
But I have another option for which I was looking for opinions. What if
we had a "Change Event manager" which broadcast an event every time
a change is made to the database. Each business class would have its
own event. If the event had the object's primary key as a parameter, then
clients editing that particular object type could check to see if the object
currently on screen is the one that changed. That way you could disable
the 'save' until they had refreshed their on-screen data.
It's not particularily elegant, but it's reasonably simple to implement. It
also deals with changes sent across our WAN from other database
servers.
But this option is only worthwhile if you can replicate the "Change Event
manager" SO and still register for an event on the client. Can clients
register for SO events and receive an event generated by any of the SO's
replicates? Or when you register for an SO's event do you register for
only one instance of the SO?
Thanks in advance for any answers.
Cheers,
Duncan Kinnear,
McCarthy and Associates, Email:
[email protected]
PO Box 764, McLean Towers, Phone: +64 6 834 3360
Shakespeare Road, Napier, New Zealand. Fax: +64 6 834 3369
Providing Integrated Software to the Meat Processing Industry for over 10
years
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:
http://pinehurst.sageit.com/listarchive/forte>
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/forte>On the option that you have considered, I have implemented the same model
in my previous project (using Java/RMI), but I felt that it is more than
what is normally needed for concurrency protection.
I can suggest another option that is worth considering which is in place in
our app for concurrency.
Almost every table in our db has created By, created On, modifed By,
modified On columns. The parent class of all business objects has
attributes that correspond to these four columns. In addition to these
four, there is a fifth attribute (introduced when concurrency was built)
called originalModifiedOn. Upon retrieval from the db, it is set to
modifiedOn value (from the db), during UPDATE, the value in this column is
added part of the WHERE clause. So when the second user tried to do save
the same object, the underlying db update will get a 'zero rows updated'
which is translated into an application error 'possible concurrency
error'. The user re-retreives the now 'stale' object before applying their
edits.
A lot of these things are and can be built into the framework imposing very
little work that each Object needs to do to have concurrency protection.
I am not sure if there is a mention in the Patterns paper of this model,
but it is very easy to implement and supports what is needed.
Kishore Puvvada's Mail
[email protected] on 07/28/99 01:47:00 AM
To: [email protected]@INTERNET
cc: (bcc: Kishore Puvvada/HQ-IS/TAL)
Subject: Service Object events and LockMgr
Hi folks,
We're currently looking at strategies for dealing with the simultaneous
updates to the database from multiple clients (concurrency
management). That is when two (or more) clients load the same object to
edit it, then make different changes and save them to the database.
We have a copy of a Forté document (from the "Patterns" course, I
think) which describes three methods of dealing with this:
1) Lock the database table row as soon as a client select it for editing
and hold the lock until it is saved.
2) Immediately before 'saving' check that the database hasn't changed
(either by reading what's there before updating, or by using a huge
'where' clause that contains all unchanged fields)
3) The Forté "LockMgr" pattern, which uses a service object with notifier
proxies to allow locking and updating notification between the clients.
Option 3 is obviously the most robust method, but it requires a fair
amount of coding and could also be a bottleneck for database reads and
writes.
But I have another option for which I was looking for opinions. What if
we had a "Change Event manager" which broadcast an event every time
a change is made to the database. Each business class would have its
own event. If the event had the object's primary key as a parameter, then
clients editing that particular object type could check to see if the object
currently on screen is the one that changed. That way you could disable
the 'save' until they had refreshed their on-screen data.
It's not particularily elegant, but it's reasonably simple to implement. It
also deals with changes sent across our WAN from other database
servers.
But this option is only worthwhile if you can replicate the "Change Event
manager" SO and still register for an event on the client. Can clients
register for SO events and receive an event generated by any of the SO's
replicates? Or when you register for an SO's event do you register for
only one instance of the SO?
Thanks in advance for any answers.
Cheers,
Duncan Kinnear,
McCarthy and Associates, Email:
[email protected]
PO Box 764, McLean Towers, Phone: +64 6 834 3360
Shakespeare Road, Napier, New Zealand. Fax: +64 6 834 3369
Providing Integrated Software to the Meat Processing Industry for over 10
years
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:
http://pinehurst.sageit.com/listarchive/forte>
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/forte> -
hi
in terminal, i am seeing this message.
[AGENT] socket error: [object XrayWrapper [object Event]]; readyState=3. Perhaps Helper is not running on ws://127.0.0.1:14821/2 or is shutting down?
is something missing that should be running
i dont understand this message
thankyousolved. was a firefox addon called 1password
solved by deleting the desktop version of hte app and reinstalling
1password support was useless. didnt even know a piece of their own software. suggested it was a ffox profile issue. red herring. -
"new object" event in JDI?
I'm surprised that there seems to be no "new object" event in the JDI. As far as I can tell, the only way to identify a new instance of a class is by requesting MethodExitEvent, checking Method.isConstructor(), and then iterating over ClassType.instances() for objects you haven't seen before. This seems really inefficient. Is there no better way?
Weak. NO DUKE STARS FOR YOU!!!
-
Regarding [Work Flow] Business Object Event Raise in ABAP Program
Hi All,
I have one issue regarding [Work Flow] Business Object Event Raise in ABAP Program.
Actual TDS is as below:
If E message type written, raise Business object BUS2005 (Production order) Event PickShortage for production order passing warehouse, transfer request
(BUS2065 Object key) in event container. Also include table of text version of error
messages for this set of Transfer
Request.
Can anybody tell me how can i write it technically in ABAP Code.
Can anybody solve this issue!
Thanks in advance.
Thanks,
Deep.Hi,
Can anybody solve above posted issue!
Thanks,
Deep. -
Busines Object XI Release2 report in EP
Hi,
I am in need a help of a how to integrate Performance Management Report generated in Busines Object XI Release2 with EP.
Please note that Busines Object XI Release2 is integrated with Oracle and not SAP.
I have tried couple of ways.
1. I have created a "http connection" system and tries using URL iView but some how the SSO is not working as the login screen is appearing.
2. Created another system with details of crystal report server in it and used master Iview of Business object for iView, but this time not sure what to enter for "Path of Crystal Enterprise Server" in my case. The iview is giving error "Invalid path /reportView was requested" for any of the enteires I am filing in.
Any help will be highly appriciated.
Many Thanks,
Vishal DhawanLooks like Crystal Reports is using log4j for logging, which is so badly designed that it throws a fit if the log4j configuration is missing.
All you need to do to get it to work is put a log4j.properties file in the classpath (google for a dummy file with default values). It usually needs to be put in the root of the classpath.
Or you can initialize the log4j logging for your own application properly and Crystal Reports will piggyback on it. -
Example programs on abap object events?
Hi Experts,
I need some example programs on abap object events.
regards,
vijayHi,
go thru the below program. hope it could help you.
REPORT sapmz_hf_alv_grid .
Type pool for icons - used in the toolbar
TYPE-POOLS: icon.
TABLES: zsflight.
To allow the declaration of o_event_receiver before the
lcl_event_receiver class is defined, decale it as deferred in the
start of the program
CLASS lcl_event_receiver DEFINITION DEFERRED.
G L O B A L I N T E R N A L T A B L E S
*DATA: gi_sflight TYPE STANDARD TABLE OF sflight.
To include a traffic light and/or color a line the structure of the
table must include fields for the traffic light and/or the color
TYPES: BEGIN OF st_sflight.
INCLUDE STRUCTURE zsflight.
Field for traffic light
TYPES: traffic_light TYPE c.
Field for line color
types: line_color(4) type c.
TYPES: END OF st_sflight.
TYPES: tt_sflight TYPE STANDARD TABLE OF st_sflight.
DATA: gi_sflight TYPE tt_sflight.
G L O B A L D A T A
DATA: ok_code LIKE sy-ucomm,
Work area for internal table
g_wa_sflight TYPE st_sflight,
ALV control: Layout structure
gs_layout TYPE lvc_s_layo.
Declare reference variables to the ALV grid and the container
DATA:
go_grid TYPE REF TO cl_gui_alv_grid,
go_custom_container TYPE REF TO cl_gui_custom_container,
o_event_receiver TYPE REF TO lcl_event_receiver.
DATA:
Work area for screen 200
g_screen200 LIKE zsflight.
Data for storing information about selected rows in the grid
DATA:
Internal table
gi_index_rows TYPE lvc_t_row,
Information about 1 row
g_selected_row LIKE lvc_s_row.
C L A S S E S
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING
e_object e_interactive,
handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
ENDCLASS.
CLASS lcl_event_receiver IMPLEMENTATION
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_toolbar.
Event handler method for event toolbar.
CONSTANTS:
Constants for button type
c_button_normal TYPE i VALUE 0,
c_menu_and_default_button TYPE i VALUE 1,
c_menu TYPE i VALUE 2,
c_separator TYPE i VALUE 3,
c_radio_button TYPE i VALUE 4,
c_checkbox TYPE i VALUE 5,
c_menu_entry TYPE i VALUE 6.
DATA:
ls_toolbar TYPE stb_button.
Append seperator to the normal toolbar
CLEAR ls_toolbar.
MOVE c_separator TO ls_toolbar-butn_type..
APPEND ls_toolbar TO e_object->mt_toolbar.
Append a new button that to the toolbar. Use E_OBJECT of
event toolbar. E_OBJECT is of type CL_ALV_EVENT_TOOLBAR_SET.
This class has one attribute MT_TOOLBAR which is of table type
TTB_BUTTON. The structure is STB_BUTTON
CLEAR ls_toolbar.
MOVE 'CHANGE' TO ls_toolbar-function.
MOVE icon_change TO ls_toolbar-icon.
MOVE 'Change flight' TO ls_toolbar-quickinfo.
MOVE 'Change' TO ls_toolbar-text.
MOVE ' ' TO ls_toolbar-disabled.
APPEND ls_toolbar TO e_object->mt_toolbar.
ENDMETHOD.
METHOD handle_user_command.
Handle own functions defined in the toolbar
CASE e_ucomm.
WHEN 'CHANGE'.
PERFORM change_flight.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMETHOD.
ENDCLASS.
S T A R T - O F - S E L E C T I O N.
START-OF-SELECTION.
SET SCREEN '100'.
*& Module USER_COMMAND_0100 INPUT
MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN 'EXIT'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*& Module STATUS_0100 OUTPUT
MODULE status_0100 OUTPUT.
DATA:
For parameter IS_VARIANT that is sued to set up options for storing
the grid layout as a variant in method set_table_for_first_display
l_layout TYPE disvariant,
Utillity field
l_lines TYPE i.
After returning from screen 200 the line that was selected before
going to screen 200, should be selected again. The table gi_index_rows
was the output table from the GET_SELECTED_ROWS method in form
CHANGE_FLIGHT
DESCRIBE TABLE gi_index_rows LINES l_lines.
IF l_lines > 0.
CALL METHOD go_grid->set_selected_rows
EXPORTING
it_index_rows = gi_index_rows.
CALL METHOD cl_gui_cfw=>flush.
REFRESH gi_index_rows.
ENDIF.
Read data and create objects
IF go_custom_container IS INITIAL.
Read data from datbase table
PERFORM get_data.
Create objects for container and ALV grid
CREATE OBJECT go_custom_container
EXPORTING container_name = 'ALV_CONTAINER'.
CREATE OBJECT go_grid
EXPORTING
i_parent = go_custom_container.
Create object for event_receiver class
and set handlers
CREATE OBJECT o_event_receiver.
SET HANDLER o_event_receiver->handle_user_command FOR go_grid.
SET HANDLER o_event_receiver->handle_toolbar FOR go_grid.
Layout (Variant) for ALV grid
l_layout-report = sy-repid. "Layout fo report
Setup the grid layout using a variable of structure lvc_s_layo
Set grid title
gs_layout-grid_title = 'Flights'.
Selection mode - Single row without buttons
(This is the default mode
gs_layout-sel_mode = 'B'.
Name of the exception field (Traffic light field) and the color
field + set the exception and color field of the table
gs_layout-excp_fname = 'TRAFFIC_LIGHT'.
gs_layout-info_fname = 'LINE_COLOR'.
LOOP AT gi_sflight INTO g_wa_sflight.
IF g_wa_sflight-paymentsum < 100000.
Value of traffic light field
g_wa_sflight-traffic_light = '1'.
Value of color field:
C = Color, 6=Color 1=Intesified on, 0: Inverse display off
g_wa_sflight-line_color = 'C610'.
ELSEIF g_wa_sflight-paymentsum => 100000 AND
g_wa_sflight-paymentsum < 1000000.
g_wa_sflight-traffic_light = '2'.
ELSE.
g_wa_sflight-traffic_light = '3'.
ENDIF.
MODIFY gi_sflight FROM g_wa_sflight.
ENDLOOP.
Grid setup for first display
CALL METHOD go_grid->set_table_for_first_display
EXPORTING i_structure_name = 'SFLIGHT'
is_variant = l_layout
i_save = 'A'
is_layout = gs_layout
CHANGING it_outtab = gi_sflight.
*-- End of grid setup -
Raise event toolbar to show the modified toolbar
CALL METHOD go_grid->set_toolbar_interactive.
Set focus to the grid. This is not necessary in this
example as there is only one control on the screen
CALL METHOD cl_gui_control=>set_focus EXPORTING control = go_grid.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*& Module USER_COMMAND_0200 INPUT
MODULE user_command_0200 INPUT.
CASE ok_code.
WHEN 'EXIT200'.
LEAVE TO SCREEN 100.
WHEN'SAVE'.
PERFORM save_changes.
ENDCASE.
ENDMODULE. " USER_COMMAND_0200 INPUT
*& Form get_data
FORM get_data.
Read data from table SFLIGHT
SELECT *
FROM zsflight
INTO TABLE gi_sflight.
ENDFORM. " load_data_into_grid
*& Form change_flight
Reads the contents of the selected row in the grid, ans transfers
the data to screen 200, where it can be changed and saved.
FORM change_flight.
DATA:l_lines TYPE i.
REFRESH gi_index_rows.
CLEAR g_selected_row.
Read index of selected rows
CALL METHOD go_grid->get_selected_rows
IMPORTING
et_index_rows = gi_index_rows.
Check if any row are selected at all. If not
table gi_index_rows will be empty
DESCRIBE TABLE gi_index_rows LINES l_lines.
IF l_lines = 0.
CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
EXPORTING
textline1 = 'You must choose a line'.
EXIT.
ENDIF.
Read indexes of selected rows. In this example only one
row can be selected as we are using gs_layout-sel_mode = 'B',
so it is only ncessary to read the first entry in
table gi_index_rows
LOOP AT gi_index_rows INTO g_selected_row.
IF sy-tabix = 1.
READ TABLE gi_sflight INDEX g_selected_row-index INTO g_wa_sflight.
ENDIF.
ENDLOOP.
Transfer data from the selected row to screenm 200 and show
screen 200
CLEAR g_screen200.
MOVE-CORRESPONDING g_wa_sflight TO g_screen200.
LEAVE TO SCREEN '200'.
ENDFORM. " change_flight
*& Form save_changes
Changes made in screen 200 are written to the datbase table
zsflight, and to the grid table gi_sflight, and the grid is
updated with method refresh_table_display to display the changes
FORM save_changes.
DATA: l_traffic_light TYPE c.
Update traffic light field
Update database table
MODIFY zsflight FROM g_screen200.
Update grid table , traffic light field and color field.
Note that it is necessary to use structure g_wa_sflight
for the update, as the screen structure does not have a
traffic light field
MOVE-CORRESPONDING g_screen200 TO g_wa_sflight.
IF g_wa_sflight-paymentsum < 100000.
g_wa_sflight-traffic_light = '1'.
C = Color, 6=Color 1=Intesified on, 0: Inverse display off
g_wa_sflight-line_color = 'C610'.
ELSEIF g_wa_sflight-paymentsum => 100000 AND
g_wa_sflight-paymentsum < 1000000.
g_wa_sflight-traffic_light = '2'.
clear g_wa_sflight-line_color.
ELSE.
g_wa_sflight-traffic_light = '3'.
clear g_wa_sflight-line_color.
ENDIF.
MODIFY gi_sflight INDEX g_selected_row-index FROM g_wa_sflight.
Refresh grid
CALL METHOD go_grid->refresh_table_display.
CALL METHOD cl_gui_cfw=>flush.
LEAVE TO SCREEN '100'.
ENDFORM. " save_changes
regards
-Rakesh -
How to find the WhereUsed List for a Business Object Event?
How to find the WhereUsed List for a Business Object Event?
Can anybody let me know how to get which
Whereused function will get the data from
different Werks in multi-level?
Any sample program please!!! -
Please let me know to find the where used list for a business object - event?
There are many events defined for each Business Object. But I find either none or just a few of these events for the business objects defined through the event linkages.
Only events that start a follow on process using a workflow, standard task or an FM or defined in event linkages. Not all entries available will be flagged as active. Some of these could be supplied as standard and you activate them as needed and may involve additional config steps. Some of them might have been active once and deactivated later.
I am assuming that all events for a business object must have been defined for a specific purpose and that they must be getting triggered/created somewhere.
Every object can have certain standard entries like Created, Changed etc. There could be object specific events also. There are standard SAP objects with no events defined at all. You can also extend an object with your own events. How you want to react to an event is specific to your business needs. Also, not all the events defined for an object are triggered/created. You may have to do it yourself with various tools provided by SAP. You can test what events get published for an object by activating event trace and taking the object thorough various stages.
a) Is there a way to get a where-used list for events?
One way is to look at the event linkages (txn SWETYPV) as you have already done. Another way is to txn SWU0 to simulate an event and see how the system would react to that event.
b) Are there some SAP-defined events that never get created?
Answered above.
ANd checkout this link
http://help.sap.com/saphelp_46c/helpdata/en/a5/3ec8534ac011d1894e0000e829fbbd/content.htm
Thanks, -
What exactly is Object Event Repository?
Hello,
I´ve just read a marketing article about the new SAP Object Event Repository. Precisely because it is a marking article the key-facts and functions are missing. It sounds like a reduced AII with extended database functions for Tag-tracking. Can somebody explain the benefit, technology and functions of the OER? What is the different between AII and OER?
Thank you, BastianHi,
SAP OER serves as a system of record for uniquely identified objects (like EPCs). So you are right in saying it like an extended database functions for tag tracking.
But it will not reduce the AII functionalities. AII will still remain as the data capturing application (tag read) and the repository of these reads for the tags will be maintained in the OER. So these two are two different applications.
OER allows for tracking any id or document for which information has been sent from AII. OER will also have the capability of generating reports (business intelligence) for these data reads maintained in its repository.
SAP has recently unveiled is PTA (Product Tracking & Authentication) feature in OER. Read at http://www.sap.com/company/press/press.epx?PressID=7440
Since this product has not come in the market yet, we need to wait till the time of its release for documents on the product. Then we might know the exact benefits/technology on OER.
Thanks,
Ashish -
Crystal Report: failed to read parameter object
Hello -
I have a report that consists of numerous static parms and one dynamic parm. I can save the report to my desktop but cannot save it to BO 3.1 CMC Personal Folder (or any folder for that matter).
The dynamic parm does not use a LOV based on Business Views. A table associated with the same data source as the stored proc on which the Report itself is based provides two fields - a code field that is used in the Value and a name field which is used in the Description.
The specific error is:
"Failed to read data from report file <file name> Reason: failed to read parameter object".
All the normal things have been checked -
- VERIFied the database
- Ensured 'No Printer' is checked
- Ran the report (successfully) on the desktop (locally)
The data source is Oracle. The report can be saved to the CMC and run without problem if the dynamic parameter is deleted from the report.
The version of Crystal Reports is CR 2008 vers 12.04
I've seen numerous postings regarding LOVs and Business Views, especially surrounding security issues, but I've yet to see a note about a dynamic parameter based on a table....
ThanksHi!
Thanks for the response....
Re: check the "Enable Repository Refresh" checkbox
The SAVE failed with the Failed to read data from report file error.
When I went to the Bus View mgr, I found the LOV. It was set as a cascading prompt (not what I wanted when I set the parm) and could not edit it. No permissions.
I went back to the report and tried to edit the parm into which I had stuffed the LOV I can't touch in Bus Views, and found I can't open in the report canvas without logging into the repository.... which I did.... and went to edit the parm...can't open in the report canvas without logging into the repository.... which I did.... and went to edit the parm... You get the idea....
What I had WANTED to do is take a table with 2 fields in it - a NAME and a CODE field, create a dynamic parm, use the CODE field as the Value and the NAME field as a description. When I brought in the LOV, it came in as a cascading LOV... I needed to have the Description as the user fronted piece... but I can't seem to get there from here..... -
Reading an object from a binary file
i am writing objects into my binary file using printwriter class. i am able to write objects into the file but i am having problems reading the object from the file. is there any other way of going about it. i tried using the objectoutputstream and object input stream class. but i am getting run time errors coz of something to do with serialization
i am storing records as a object into a binary file so that it is easy to seek my recordsOf course you have trouble reading objects after you wrote them with a PrintWriter.
You should rather have fixed the Serialization errors: only objkects that implement Serializable correctly can be serialized. -
Writing and Reading serialized Objects
[code=java]
/*hey guys i'm new to java and i have been given an exercise to make a cd collection, write it into a file and read the data back to the program.
the program is suppose to show you a menu to select from where you can add, delete, view sort, CD's when you add a CD it must be written to a file as an Object and when you want to view CDs or search for a CD the program must read the CD objects from the file they have been written to and must return a cd nam, artist and release date. the code looks like it is writing the Cd to a file but when i try to read (view or search for a cd from the file it gives an error null). so i think i'm note reading the right way.
thank you for helping .
import java.io.Serializable;
public class cd implements Serializable {
//creating attributes
private String cdname = null;
private double price = 0.0;
private String artist =null;
private int ratings =0;
private String genre=null;
private String releaseDate =null;
// creating an Empty constructor
public cd(){
public cd (String cdname,double price, int ratings, String genre, String artist, String releaseDate){
this.cdname=cdname;
this.price=price;
this.artist=artist;
this.ratings=ratings;
this.genre=genre;
this.releaseDate=releaseDate;
public String getGenre(){
return genre;
public void setGenre(String genre){
this.genre =genre;
public String getArtist(){
return artist;
public void setArtist(String artist){
this.artist=artist;
public String getName(){
return cdname;
public void setName(String cdname){
this.cdname = cdname;
public Double getPrice(){
return price;
public void setPrice(double price){
this.price = price;
public String getReleaseDate(){
return releaseDate;
public void setReleaseDate(String releaseDate){
this.releaseDate = releaseDate;
public int getRatings(){
return ratings;
public void setRatings( int ratings){
this.ratings = ratings;
import java.util.*;
public class hipHopCollection {
ArrayList<cd> list = new ArrayList <cd> ();
EasyIn ei = new EasyIn();
private cd invoke;
private int b;
public void load()
System.out.println(" You Entered " + b + " To Add A CD ");
invoke = new cd();
System.out.println("Please Enter A CD Name ");
invoke.setName(ei.readString());
System.out.println("Please Enter A CD Price");
invoke.setPrice(ei.readDouble());
System.out.println("Please Give Ratings For The CD");
invoke.setRatings(ei.readInt());
System.out.println("Please Enter A CD release date ");
invoke.setReleaseDate(ei.readString());
System.out.println("Please Enter artist Name ");
invoke.setArtist(ei.readString());
System.out.println("Please Enter A CD Genre ");
invoke.setGenre(ei.readString());
list.add(invoke); // trying to add cd information to invoke.
}// end of load
// The following method should return the Object variable invoke that holds the cd INFO
public Object getInvoke()
return invoke;
public int getB()
return b;
public void setB()
b=ei.readInt();
public void menu(){
System.out.println("......................................................... ");
System.out.println("Hi There Please Enter A Number For Your Choice");
System.out.println(" Pess >>");
System.out.println("1 >> Add A CD");
System.out.println("2 >> View List Of CD's");
System.out.println("3 >> Sort CD's By Price");
System.out.println("4 >> Search CD By Name");
System.out.println("5 >> Remove CD(s) By Name");
System.out.println("0 >> Exit");
System.out.println(".........................................................");
System.out.print("Please Enter Chioce >> ");
}// end of menu
public void GoodBye()
System.out.println(" You Entered " + b + " To exit Good_bye" );
System.exit(0);
}//end of GoodBye
public void PriceSort()
System.out.println(" You Entered " + b + " To Sort CD(s) By price ");
Collections.sort(list, new SortByPrice());
for(cd s : list)
System.out.println(s.getName() + ": " + s.getPrice());
}// end of PriceSort
public void NameSearch()
System.out.println(" You Entered " + b + " To Search CD(s) By Name ");
System.out.println("Please Enter The Name Of The CD You Are Searching For " );
String search = ei.readString();
for(int i=0; i<list.size();i++){
if(search.equalsIgnoreCase(list.get(i).getName() )){
System.out.println(list.get(i).getName() + " " + list.get(i).getPrice() + " " + list.get(i).getRatings() + " " + list.get(i).getGenre() );
}//end of NameSearch
public void ViewList()
System.out.println(" You Entered " + b + " To view CD(s) By Name ");
for(int i=0; i<list.size();i++)
System.out.println(list.get(i).getName() + " " + list.get(i).getPrice() + " " + list.get(i).getRatings() + " " + list.get(i).getGenre() );
}// end of ViewList
public void DeleteCd()
System.out.println(" You Entered " + b + " To Delete CD(s) By Name ");
System.out.println("Please Enter The Name Of The CD You Want to Delete ");
String search = ei.readString();
for(int i=0; i<list.size();i++)
if(search.equalsIgnoreCase(list.get(i).getName() ))
System.out.println(list.get(i).getName());
list.remove(i);
}// end of DeleteCD
public static void main(String[] args) {
//creating an Instance of EasyIn by object ei. Easy in is a Scanner class for reading
EasyIn ei = new EasyIn();
ArrayList<cd> list = new ArrayList <cd> (); // creating an array cd list
hipHopCollection call = new hipHopCollection();
ReadWrite rw = new ReadWrite();
while (true){
call.menu();
call.setB();
//b = ei.readInt();
if(call.getB()==0)
call.GoodBye();
if(call.getB()==1)
call.load();
rw.doWriting();// trying to write the cd object to a file
if(call.getB()==2)
rw.doReading();// trying to read the cd object from a file
//call.ViewList();
if(call.getB()==3)
call.PriceSort();
if(call.getB()==4)
call.NameSearch();
if(call.getB()==5)
call.DeleteCd();
}// end of while
}// end of main
}// end of class
// importing all the packages that we will use
import java.io.ObjectInputStream;
import java.io.FileInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.Serializable;
public class ReadWrite {
// these are all the attributes
private String FileName ="CdCollections.dat";
private OutputStream output;
private ObjectOutputStream oos;
private FileOutputStream fos;
private File file;
private FileInputStream fis;
private ObjectInputStream ois;
//creating an empty constructor
public ReadWrite()
// we could initialise all the attributes inside this empty constructor
//creating a constructor with arguments of a file name.
public ReadWrite(File file)
this.file=file;
try
//Use a FileOutputStream to send data to a file called CdCollections.dat
fos = new FileOutputStream(file,true);
Use an ObjectOutputStream to send object data to the
FileOutputStream for writing to disk.
oos = new ObjectOutputStream (fos);
fis=new FileInputStream(file);
ois = new ObjectInputStream(fis);
catch(FileNotFoundException e)
System.out.println("File Not Found");
catch(IOException a)
System.out.println(a.getMessage());
System.out.println("Please check file permissions of if file is not corrupt");
}// end of the second constructor
//the following lines of code will be the accessors and mutators
* @return the output
public OutputStream getOutput() {
return output;
* @param output the output to set
public void setOutput(OutputStream output) {
this.output = output;
* @return the objStream
public ObjectOutputStream getOos() {
return oos;
* @param objStream the objStream to set
public void setObjStream(ObjectOutputStream objStream) {
this.oos = oos;
public File getFile() {
return file;
public void setFile(File file) {
this.file = file;
public FileInputStream getFis() {
return fis;
public void setFis(FileInputStream fis) {
this.fis = fis;
public ObjectInputStream getOis() {
return ois;
public void setOis(ObjectInputStream ois) {
this.ois = ois;
// the following lines of code will be the methods for reading and writing
the following method doWriting will write data from the hipHopCollections source code.
that will be all the cd information.
Pass our object to the ObjectOutputStream's
writeObject() method to cause it to be written out
to disk.
obj_out.writeObject (myObject);
public void doWriting()
hipHopCollection call = new hipHopCollection();
//creating an Object variable hold that will hold cd data from hipHopCollections invoke
Object hold = call.getInvoke();// THI COULD BE THE PART WHERE I MADE A MISTAKE
ReadWrite stream = new ReadWrite (new File(FileName));
try
Pass our object to the ObjectOutputStream's
writeObject() method to cause it to be written out to disk.
stream.getOos().writeObject(hold);
stream.getOos().writeObject(hold);
stream.getOos().close();
System.out.println("Done writing Object");
catch (IOException e)
System.out.println(e.getMessage());
System.out.println("Program Failed To Write To The File");
finally
System.out.println("The program Has come To An End GoodBye");
}// end of method DoWriting
The following method is for reading data from the file written by the above method named
DoWriting
// PLEASE NOT THIS IS THE METHOD THAT GIVES ME NULL EXCEPTION
public void doReading()
ReadWrite read = new ReadWrite(new File(FileName));
try{
//System.out.println("I AM NOW INSIDE THE TRY TO READ");
Object obj = read.getOis().readObject();
System.out.println("tried reading the object");
cd c = (cd)obj; // trying to cast the object back to cd type
System.out.println("I have typed cast the Object");
System.out.println(c.getName());
System.out.println(c.getGenre());
System.out.println(c.getArtist());
System.out.println(c.getPrice());
System.out.println(c.getRatings());
System.out.println(c.getReleaseDate());
read.getOis().close();
catch(ClassNotFoundException e)
System.out.println(e.getMessage());
System.out.println("THE CLASS COULD NOT BE FOUND");
catch(IOException e)
System.out.println(e.getMessage());// null
System.out.println("WE COULD NOT READ THE DATA INSIDE THE FILE");
}//end of method doReading
}// end of class ReadWriteCross posted
http://www.java-forums.org/new-java/59965-writing-reading-serialized-java-object.html
Moderator advice: Please read the announcement(s) at the top of the forum listings and the FAQ linked from every page. They are there for a purpose.
Then edit your post and format the code correctly.
db
Maybe you are looking for
-
My email account is gone i cant access my downloads
I had an old email address I used as my sign in info and had a lot of music downloaded from i tunes. The email address won't let me in and I am going to lose all my purchased music.....What can I do?
-
hi,all respond differnce between sap scripts and smartforms
-
Sort Sequence for Product Catalogue ISA B2B
Hi there I'm trying to find another way of sorting items within a catalogue area. As it is in the standard system , the products are simply sorted according to the Product number (acceding). The requirement is to be able to rearrange the sequence acc
-
Oracle Universal Installer doesnt show up..
Hello Friends, I am a newbie to Oracle and I was trying to install Oracle 8.1.7 on Linux 7.3 ,which I downloaded from the Oracle website and I configured all my files,set the permissions and the ownerships right , but even then my Oracle Universal In
-
What is ReclaimSpaceAgent and how can I control it?
I've noticed this daemon called ReclaimSpaceAgent (com.apple.reclaimSpace) that seems to screw up my Parallels virtual disk. There's a correlation between when it runs and when I have disk corruption problems (when installing some windows software o