Data objects in the alert modeler.

Hi,
in the default alert modeler profile, there are some data objects.
Can we add more data objects to this profile..
As in ... i want to display the campaign information of the business partner in the alert..
also .. i want to display the last interaction record data like ... date.. description of the interaction record ..
How can i achieve this.
Regards
Vandana Gupta

hi vandana
i suppose that u cant add new data object to ur alert modeler,because alert modeler is linked to the meta model and these meta models includes the set of data object which u can use while using a default profile but what u can do is assign new function event as data objects are linked with the events ,that way u can easily incubate ur new data object which u want to use with the alert modeler profile and assign that profile to the IC profile,
for creating new function events u have to do some coding which is very easy ,if u don know u may ask the same in ur time who knows that.
guess it will help
best regards
ashish

Similar Messages

  • MI: the data objects in the SCV dont have the active DOE triggered adapter

    We try to use SDOE_LOAD on MI7.1 to do the initial load.
    However, we get the error:
    "the data objects in the SCV dont have the active DOE triggered adapter."
    We cannot find a fix anywhere.
    Please help. thanks a lot!

    Hi,
    Assuming that you are using 7.1 in non-backward compatibility mode.
    1. The client post the update/delete/insert request to DOE in bound queue.
    2. The DoE post these messages to the BE.
    3. Meanwhile, after posting all the message client starts reading outbound messages in DoE till the outbound queue is empty.
    4. WHILE the client is reading outbound messages in 3. above the BE has validated the update/delete/insert request and posted a confirmation/rejection messages to DoE outbound queue the message will flow down to the client in the same sync cycle.
    However, if it's posted to DoE after the client has finishing syncing with DoE the message will flow down to the client in the next sync.
    So you see it cannot be guaranteed that the ocnfirmation/rehection message will flow down to the client in the same sync cycle.It may or may not happen.
    I hope this clarifies.
    Best Regards,
    Amit

  • How to find the size of the master data objects in the BW system?

    Hi,
    We would like to understand the size of the master data tables overall for a specific source system (Logical name is Ex.ABCD, which supplies all master data to BW). Can you please advise the procedure to find out this?
    Is there any table that will allows to see all the master data objects related to specific sources system so that we can find out that table size? Thanks.
    For example, we have many Texts, Hier & Attributes.
    0COUNTRY_TEXT
    0REGION_TEXT
    0PERSON_ATTR
    0MATERIAL_LPRH_HIER
    Advance Thanks.
    Edited by: BW USA on Feb 2, 2010 10:52 AM

    Hi,
    You can find out all the master data tales used in the BW system by
    Tcode : SE11
    Enter as /BIC/P* for master data tables and press F4 which gives list of master data tables currently used in BW system.
    Similarly for Texts  /BIC/T*  and press F4
    Similarly for Hierarchies /BIC/H-* press F4
    and can know the size of the all tables.
    Thanks,
    Gopal

  • How to open the Transported model Object in the Target Portal Story Board

    Hi All,
    How To Transport Applications Modeled in Visual Composer from NetWeaver 2004s to NetWeaver 2004
    I have transported one VC model from Development  portal to Testing Portal. But Once i transported , under the
    PortalContent -> Visual Composer -> Models folder , i am able to see the transport model and the view. If i want to edit that model in the VC story board , I am not able to see that model name in the list when logged into the visual composer Tool of the Testing portal server.
    Is there any thing need to do the work around it.
    And onemore thing, In the development portal server, when i am working on that model , it will be depended on on system object for retreiveing the BAPI data. In the Testing protal server after i transported. , i need to map some system object to run the model in Testing portal.
    What is the work around this to map the system object  with the Transported model in Testing portal server.
    should i need to create the new system object even if the R3 server is same as in Testing portal server also. or the System object need to be create only if the mapped  R3 server is different from the Development portal server.
    Please let me know how to do this.
    Regards
    Vijay

    Hi Marcel,
    Thanks for the reply,
    I have exported the .gml file from the dev server Then i trying to import that .gml file in the production server. when i click on the import file option .it is opening the popup and disappearing immediately with out browsing the file I dont know wht is the problem around it.
    But agin in the production server, i have just opend one existing model. then i clicked on the Import file option. then the popup is allowing me to browse the .gml file. but after i browsed the file,  if say ok, it will be merging with the already opened model itself.
    Can u please tell me , what is the problem, i am not able to browse the file ,when no model is not opened in the VC.
    REgards
    Vijay

  • Unable to create Model from DOE Data Object

    Hi,
    I created a Mobile Laptop WebDynpro DC in NWDS 7.1, the build and deploy work fine.
    The problem is that when I attempt to create a Model based on a Data Object from the
    Mobile Middleware 7.1 DOE, I always get an exception when the Data Object metadata is
    imported (the last step of the Model Creation Wizard).
    Here's the exception :
    Status ERROR
    Plugin : com.sap.ide.cmi.core
    code=0
    Internal error
       Plugin name: Common Model Tools Core
       Internal error  : com.sap.ide.cmi.core
       Class      : com.sap.tc.mobile.dt.metaimp.ModelImportWizard
       Method     : run(IProgressMonitor)
       Message    : Failed to create model
       Exception  : com.sap.ide.metamodel.general.exception.ObjectRequiredException: ModelClassPropertySetting "//WebDynpro/ModelClass:ca.test.sandbox.mitest1.test3.ZTESTDATAOBJ/Property:ACTUAL/Setting:backendKey", Role "SettingDefinition": A minimum of 1 object(s) is required
    ObjectRequiredException: ModelClassPropertySetting "//WebDynpro/ModelClass:ca.test.sandbox.mitest1.test3.ZTESTDATAOBJ/Property:ACTUAL/Setting:backendKey", Role "SettingDefinition": A minimum of 1 object(s) is required
    at com.sap.ide.metamodel.webdynpro.implementation.ModelClassPropertySettingProxy._validate(ModelClassPropertySettingProxy.java:358)
    at com.sap.ide.metamodel.core.DevelopmentObjectProxy.validate(DevelopmentObjectProxy.java:825)
    at com.sap.tc.mobile.dt.metaimp.MBOModelImporter.doImport(MBOModelImporter.java:170)
    at com.sap.tc.mobile.dt.metaimp.ModelImportWizard.createModel(ModelImportWizard.java:200)
    at com.sap.ide.cmi.core.model.importer.CMIWizard$2.run(CMIWizard.java:197)
    at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:113)
    I know this is not related to Middleware authorization, I tested with a userid with full DOE authorization.
    When I display the Data Object metadata from the Middleware, it shows as status 'active'.
    The exception seems to complain about the backend key, but there is a backend key field in
    the Data Object.
    I have the same exception even with any SAP delivered Data Objects (MAM30_001, etc..).
    any thoughts on what the problem is ?
    thanks,
    Yanick.

    Hi Yannick,
    This type of error can occur with local non-dc Mobile App when some jars required for the model generation are missing.                                                         
    The easiest way to fix this is to create a DC for your Mobile app from the
    Mobile App Offline perspective. 
    Let me know if it works
    Genevieve

  • Encrypt the data and make the model unusable

    hi, having to distribute the 3d animations made ​​with sap, I would like to be sure that the data contained in the CAD models exported (. rh. vds pdf 3d) can not be used to reconstruct the model. How can I encrypt the data and make the model unusable?
    thanks

    Max,
    There are other forms of file-based protection offered for mobile devices (SAP Afaria) and by other software vendors to secure the end deliverable (e.g. Adobe for 3D PDFs).   In addition, SAP's partner NextLabs offers a very comprehensive solution to automate the security of your sensitive information and even provide expiration dating.
    In addition to file protection, 3D Visual Enterprise includes a function to obfuscate the geometry itself thereby making reverse engineering almost impossible.   The "Randomize Objects" function can be used to randomly skew the vertices of the model by small amounts.  It keeps the normals correct, however, so that the object still looks smooth. This in turn makes precise measurements extremely difficult.
    Regards,
    Ken

  • How to retrieve the BRF+  function result data object of type table in ABAP

    Hi,
    I am calling a BRF+ function from Abap....If the result data object of the function is element then i am able to get the value back in ABAP...Suppose the result data object of the function is of table type,I couldnt retrieve the value....Can you please help me how to retrieve the table data object value of the function from abap....
    Regards,
    Dheepak.

    Hi,
    Thanks carsten and Tiwari for your reply...
    Tiwari,
    I understand that if i know the data type of the result data object which i am going to get i can declare it my ABAP program and get the values....But i am developing a generic program which calls the various BRF+ functions based on the function id...So i am not aware what is the data type of the result data object....so is there a any way to handle this situation...Please advice...
    Carsten,
    I used the GET_DATA_OBJECT_STRUCTURE method of class CL_FDT_FUNCTION_PROCESS to get the data object structure...i am able to get whether it is an element or structure or internal table...
    But is there any way to get the data type of the object...For example if it is going to be an element of type BELNR_D,is it possible to get the BELNR_D value in my program...Please advice...
    Thanks,
    Dheepak.

  • How to restrict the size of Buffer data object

    Hi everyone.
    How do you restrict the size of the Buffer data object. The byte array that you get by calling getData(). I want to restrict the size to be at most X nbr of bytes. I'm 'filling' the buffer like this:
    Buffer readBuffer;
    PushBufferStream stream;
    stream.read(readBuffer);

    This is my code:
    class DataSourceHandler implements DataSink, BufferTransferHandler {
              private int MAX_DATA_PACKET_SIZE = 2000;
              private DataSource source;
              private PullBufferStream pullStrms[] = null;
              private PushBufferStream pushStrms[] = null;
              // Data sink listeners.
              private Vector listeners = new Vector(1);
              // Stored all the streams that are not yet finished (i.e. EOM
              // has not been received.
              private SourceStream unfinishedStrms[] = null;
              // Loop threads to pull data from a PullBufferDataSource.
              // There is one thread per each PullSourceStream.
              private Loop loops[] = null;
              private Buffer readBuffer;
               * Sets the media source this <code>MediaHandler</code> should use to
               * obtain content.
              public void setSource(DataSource source)
                        throws IncompatibleSourceException {
                   // Different types of DataSources need to handled differently.
                   if (source instanceof PushBufferDataSource) {
                        System.out.println("source instanceof PushBufferDataSource");
                        pushStrms = ((PushBufferDataSource) source).getStreams();
                        unfinishedStrms = new SourceStream[pushStrms.length];
                        // Set the transfer handler to receive pushed data from
                        // the push DataSource.
                        for (int i = 0; i < pushStrms.length; i++) {
                             pushStrms.setTransferHandler(this);
                             unfinishedStrms[i] = pushStrms[i];
                   } else if (source instanceof PullBufferDataSource) {
                        System.out.println("source instanceof PullBufferDataSource");
                        pullStrms = ((PullBufferDataSource) source).getStreams();
                        unfinishedStrms = new SourceStream[pullStrms.length];
                        // For pull data sources, we'll start a thread per
                        // stream to pull data from the source.
                        loops = new Loop[pullStrms.length];
                        for (int i = 0; i < pullStrms.length; i++) {
                             loops[i] = new Loop(this, pullStrms[i]);
                             unfinishedStrms[i] = pullStrms[i];
                   } else {
                        // This handler only handles push or pull buffer datasource.
                        throw new IncompatibleSourceException();
                   this.source = source;
                   readBuffer = new Buffer();
                   byte[] data = new byte[MAX_DATA_PACKET_SIZE];
                   readBuffer.setData(data);
              * For completeness, DataSink's require this method. But we don't need
              * it.
              public void setOutputLocator(MediaLocator ml) {
              public MediaLocator getOutputLocator() {
                   return null;
              public String getContentType() {
                   return source.getContentType();
              * Our DataSink does not need to be opened.
              public void open() {
              public void start() {
                   try {
                        source.start();
                   } catch (IOException e) {
                        System.err.println(e);
                   // Start the processing loop if we are dealing with a
                   // PullBufferDataSource.
                   if (loops != null) {
                        for (int i = 0; i < loops.length; i++)
                             loops[i].restart();
              public void stop() {
                   try {
                        source.stop();
                   } catch (IOException e) {
                        System.err.println(e);
                   // Start the processing loop if we are dealing with a
                   // PullBufferDataSource.
                   if (loops != null) {
                        for (int i = 0; i < loops.length; i++)
                             loops[i].pause();
              public void close() {
                   stop();
                   if (loops != null) {
                        for (int i = 0; i < loops.length; i++)
                             loops[i].kill();
              public void addDataSinkListener(DataSinkListener dsl) {
                   if (dsl != null)
                        if (!listeners.contains(dsl))
                             listeners.addElement(dsl);
              public void removeDataSinkListener(DataSinkListener dsl) {
                   if (dsl != null)
                        listeners.removeElement(dsl);
              protected void sendEvent(DataSinkEvent event) {
                   if (!listeners.isEmpty()) {
                        synchronized (listeners) {
                             Enumeration list = listeners.elements();
                             while (list.hasMoreElements()) {
                                  DataSinkListener listener = (DataSinkListener) list
                                            .nextElement();
                                  listener.dataSinkUpdate(event);

  • Adding new Data Object while migrating from MI 2.5 to NM7.1

    Dear All,
          We have a custom MI 2.5 application which we need to migrate to 7.1. While migration, we want to add a newly created data object also in migrated application. But when I try to import MBO model, it is not letting me import new data object. The import finishes successfully. But changes in merepmeta.xml are not done. It creates a file with back up of existing merepmeta.xml i.e. merepmeta.xml.bak and create new merepmeta.xml but it is blank. Am I missing something???
           When I import MBO only with existing data objects (syncbos), it is allowing me perfectly. It is changing the merepmeta.xml accordingly as well without creating backup.
    Thanks in advance,
    Saptak Kulkarni.

    Dear Arjun,
         To answer your questions, previously all the SyncBOs were downloaded independently taking username as the import parameter in getList. (Default values). Yes we can provide the same with 7.1 but we wanted to have some sorts of associations between all SyncBOs.
         So first of all, we changed all the BAPI wrappers of old SyncBOs to download all the data independent of user. Now we created new Data Object to only download user specific data. We associated all other Data Objects on this DO. Created a rule for this data object to only download the sync user instance. We were expecting that whenever a user syncs, a single instance of new user data object will get downloaded and subsequently all other data objects having relationship on user will get downloaded. I hope this is not much confusing.
          Now while we import the MBO model, if we don't import new user data object, then also other data object instance get downloaded and fortunately properly filtered. We don't receive any kind of error over here.
          The new data object is not used anywhere in the application. The associations are in new data object and not in the older one. New data object is the leading one wherein others follow.
          Not a single instance is getting dropped for other Data Objects.
          The xml is blank only when we try to import the new Data Object and correctly it gives an error as expected when I try to deploy the application.
    Thanks in advance,
    Saptak.

  • How to configure IC winclient alert modeler - CRM 5.0

    We are wanting to assign a marketing attribute against certain customers, to have them flagged within CIC0 that any incoming calls from them need to be forwarded to one particular person within our organisation. The alert modeler would work well for this, where it would display an alert on these certain customers.
    I have figured out most of how to do this, in terms of components to turn on in IMG. However, I want the Alert Modeler Editor to pick up a marketing attribute I have defined (I have set a profile to retrieve the marketing attribute already - using tx CRMC_CIC_BP_PROFILE), and have it display either the text held against the attribute (have set the att as a chara), or else pick up a name held against the attribute and display set text - as an example "All calls are to be forwarded to <name>" where <name> is held against the marketing attribute set. Can anyone assist with this part? At present, in CIC0 I have now displaying the name of the customer in the Call processing area (we don't use this for call processing). I don't want the name to display, I want the above text instead.
    I think i need to set some rules in the rule modeler itself, but am not sure how to do this - sample code would be greatly appreciated as well!
    Thanks in advance

    Hi Cara,
    In order to make use of the Marketing attributes in CIC Alert Modeler, please make sure the following customizing entires are maintained properly:
    1) You need to first create the attributes using the transaction 'crmd_prof_char'.
    Just create an attribute(say for eg., BP_MAIN) with some description, format and Number of chanracters and then save the attribute.
    2) Now, create a profile template (attribute set) using the transaction 'crmd_prof_templ'.
    Just create an attribute(say for eg., BP_MAIN_SET) with some description, authorization, etc., and once
    this is done, you need to assign the attribute just got created in step 1 and then save the attribute set.
    3) Assign this attribute set(profile template) which got created in step 2 to a Business partner(for which the marketting attributes are to be set) using the transaction 'crmd_prof_bp' and maintain his attribute values.
    4) Create target groups and assign business partner:
    Using the transaction 'crmd_mktseg', you can create the Target Group as follows:
    -> Right mouse click in the top right field and choose 'Create Profile Set'.
    -> In the Popup, just give some description and then click on the green check mark.
    -> Now right mouse click in the top right field 'create target group' -> Right mouse click on the new group, goto the properties and then provide some description of the target group.
    -> Right mouse click on the new group, and choose Open target group.
    -> Add business partner to the target group with button 'Add'.
    5) In transaction CRMC_CIC_BP_PROFILE, maintain your own 'Retrieval Profile'.
    -> Decide if the data should be read asynchronously
    -> Decide if the target groups should be read
    -> Decide which profile templates should be read (insert your own created attribute set via F4)
    -> Decide which BW key figures should be read (optional).
    6) Change your CIC Profile and insert the following Profile Categories apart from the Alert Modeler Profile(ALRT_MODLRX):
    -> COMPANY_PROF = your newly created business partner retrieval profile
    -> CONTACT_PROF  = your newly created business partner retrieval profile
    7) Change your CIC Framework ID and insert the following Components as part of the Hidden Components:
    COMPANY_PROF
    CONTACT_PROF
    Please follow the above mentioned steps in accordance with your own BP Marketing attribute and I hope this way will fetch the value of the Marketing attribute of the respective BP during confirmation in CIC, with which the Alert Message can be triggered.
    Hope this information helps !
    With Best Regards,
    Vinod

  • Reusing Human Tasks across BPM Processes with different Data Objects

    Hi
    JDeveloper 11.1.1.6, WLS 10.3.6, SOA/BPM 11.1.1.6
    I have defined 2 BPM Processes, P1 and P2, which has 2 different Process Data Objects O1 and O2.
    But I am reusing the same Human Task in both the processes.
    For the Human Task to support the activities in both the processes, I have added O1 and O2 Data Objects in the Human Task Definition.
    And hence the ADF Taskflow / page generated out of the Human Task will have both the Data Objects O1 and O2 as payload objects in the Page.
    When an instance of Process P1 is created, the payload O1 will have values, but O2 will be null.
    And when an instance of Process P2 is created, the payload O2 will have values, but O1 will be null.
    It works well like this, but I am a bit concerned about the performance from BPM Process and also ADF page.
    In ADF page, let us say, somehow I can control the rendering of the attributes or creation of the iterator bindings based on identifying which process is being executed.
    (By setting the iterator binding refresh property in page definition)
    In this way attribute bindings for O1 will not be created when P2 is being executed.
    But still when the Process instance is created, and when we see the payload structure of the human task in the EM - Audit Trail,
    I still see both data objects O1 and O2 are created in the Payload, but O1 will have nulls in process P2.
    So my question is, from performance point of view, is it advisable to define different Data Objects in reusable Human tasks ?
    Or should I have to define a separate Human Task definition which contains only the Data Objects related to the process it is being called from ?
    Thanks for any help
    Sameer 

    Martijn,
    You are correct in your assessment that the JAG in the current JHeadstart release cannot cope with multiple bc4j packages. There is no work around for this. Upgrading to 9051 will not help.
    In the JHeadstart-ADF release, this restriction has been lifted. You can place your EO, VO and AM objects in different packages, and you can group them in a separate project (Model project), while generating your JHeadstart application in a ViewController project.
    We have a number of customers that use the latest JHeadstart-ADF builds to build their ADF apps. If you are interested in joining this beta program, please send an e-mail to [email protected]
    Steven Davelaar,
    JHeadstart Team.

  • Alert Modeler Configuration.

    Hello,
    I Need your help regarding the Alert Modeler customizing for IC WinClient framework. (CRM 4.0 Standalone)
    We have done all the basic customizing, regarding the IC profile, assign the alert
    modeler element for 'hidden components' and so on, but the main problem I think is
    to cofigure transaction 'Define Alert Modeler Profiles'.
    My intention is to make available on the IC WinClient a message that contains a
    marketing attribute of the BP, that is already assigned on transaction
    'Define Retrieval Profiles for Business Partner Attributes'.
    I´m not sure of what is missing but I think it´s something regarding the functions
    and global data we have to enter for my specific alert modeler profile.
    Could anybody help me on that please ?
    Thanks in advance and Best regards,
    Paulo Pela

    Hello,
    Thank you for your rapid help.
    In fact, I don´t know which tab (function or Global data, etc...) do I need to write the code and what javascript code do I need to write to display a marketing attribute from BP.
    Do you have any material to help me? If yes, please send it to [email protected]
    I couldn't´t find any documentation on SAP material.
    Or can you guide me to do it?
    Thank you for your attention,
    Regards
    Paulo Pela

  • How to reference layout object in the program unit?

    Hi Everyone
    I am trying to change the outcome of the result for a field- F_Test_Result1, so i create a format trigger for it, the code is showed at below:
    function F_Test_Result1FormatTrigger return boolean is
    begin
    if F_TEST_Result1 = '0'     then
         F_Test_Result1 := 'Pass';
    end if;
    return (TRUE);
    end;
    but the report builder return error said F_TEST_Result1 is not defined yet. so how do i refer these layout object and data object(from the data model) in trigger?
    Thank you
    Bryan
    Edited by: Bryanevil on Apr 22, 2009 8:50 PM

    Hello,
    I suggest to Create a Formula Column in the group containing the column PASS_FAIL_SUMMARY
    and use a PL/SQL code like this for the Formula Column :
    function CF_1Formula return Char is
    begin
    if :PASS_FAIL_SUMMARY = '0' then
    return ('pass');
    else
    return('--');
    end if;
    end;
    Then, set this Formula Column as Source for the field in the layout .
    Regards

  • I made a new Date object

    See, here's the thing with dates in java, the way i see it. We used to have Date, but Date wasn't international so we got Calendar. But some things, like SimpleDateFormat, still expect java.util.Date. java.sql.Date is out there somewhere, too. None of them have direct support for date differences (i.e. dateA - dateB = 8 days, or whatever). Now you're probably reading this thinking "Java supports all of this" and you're right. Calendar has a getTime method that returns a Date, and i can just pass THAT to SimpleDateFormat. With a little math, getTimeInMillis can be used to find the difference in two Calendars. But i got to thinking, "There should only be one Date object i need to think about," and since i don't ever have enough to do at work i put one together. I don't know if any of you are going to care enough to use it, mostly i'm just looking for advice on features i should add to it, inefficiencies in the design, stuff that's hard to understand, or whatever.
    This is it:
    *This catastrophe brought to you by SrA Meyerin.
    *Proximo Satis pro administatio.
    package awesomedate;
    //The following are imported for the toFormattedString(), toUtilDate(), toSQLDate, and toCalendar() methods, respectively.
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.GregorianCalendar;
    import java.sql.*;
    import java.util.TimeZone;
    *This class is designed to be the ultimate date object. It stores dates accurate to the millisecond, has the ability to do date
    *arithmetic (adding/subtracting days/months/whatever), date comparison, and date formatting. Also it can, at will, be used as any
    *of the other date objects in the standard java API.
    public class AwesomeDate
         *Milliseconds from the epoch. This field is where everything starts.
        private long millis;
         * The current year. This is the only aspect of the current date that is stored in addition to the milliseconds. Everything else
         * is calculated as needed.
        private int year;
        //The following six variables are fairly self explanatory. I'll explain them anyway.
         *Milliseconds in one non-leap year. This can be passed to the "adjustDate()" method
         * but mostly it is used to make my code more readable.
        public final static long MILLIS_IN_YEAR = 31536000000L;
         *Milliseconds in one leap year. This can be passed to the "adjustDate()" method
         * but mostly it is used to make my code more readable.
        public static final long MILLIS_IN_LEAP_YEAR = 31622400000L;
         *Milliseconds in one day. This can be passed to the "adjustDate()" method
         * but mostly it is used to make my code more readable.
        public static final long MILLIS_IN_DAY = 86400000;
         *Milliseconds in one hour. This can be passed to the "adjustDate()" method
         * but mostly it is used to make my code more readable.
        public static final long MILLIS_IN_HOUR = 3600000;
         *Milliseconds in one minute. This can be passed to the "adjustDate()" method
         * but mostly it is used to make my code more readable.
        public static final long MILLIS_IN_MINUTE = 60000;
         *Milliseconds in one second. This can be passed to the "adjustDate()" method
         * but mostly it is used to make my code more readable.
        public static final long MILLIS_IN_SECOND = 1000;
         *The number of days in each month.
        private int[] daysInMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
         *The timezone offset. GMT is 0, and the default, however, CST (where i live), is -6.
        private int timeZoneOffset = -6;
         *As the name would indicate, this is the number of milliseconds beyond 00:00 of jan 1 of the current year.
        private long millisAfterYear;
         *Basic constructor. Defaults to the current date and time. Works on Greenwich Mean Time, so it may seem off. To avoid this, multiply
         *add your time zone offset * MILLIS_IN_HOUR to the time in milliseconds.
        public AwesomeDate()
            setTimeInMillis(System.currentTimeMillis());
         *Fairly simple constructor. Sets time to the the number of milliseconds passed past the epoch.
        public AwesomeDate(long millis)
            setTimeInMillis(millis);
         *This constructor sets the date to the year/month/day passed.
        public AwesomeDate(int year, int month, int day)
            setDate(year, month, day);
         *This constructor sets the date time to the year/month/day/minute/hour/second passed.
        public AwesomeDate(int year, int month, int day, int hour, int minute, int second)
            setDate(year, month, day, hour, minute, second);
         *When you have the number of milliseconds, the first thing you must calculate is year. Because the number of milliseconds in a
         *year may vary, this is also the most difficult to calculate. This is the method that does it, though.
        private void setYearAfter1970()
            //I don't want to alter the actual number of milliseconds, so i make this variable and perform calculations on it.
            long theseMillis = this.millis;
            //Start at 1970 (the epoch) and work from there.
            year = 1970;
            long nextYear = MILLIS_IN_YEAR;
            //In this loop i subtract the number of millis in whatever year. The condition is if i have enough millis to make it through
                //another year.
            while (theseMillis >= nextYear)
                if (isLeapYear(year))
                    theseMillis = theseMillis - MILLIS_IN_LEAP_YEAR;
                    nextYear = MILLIS_IN_YEAR;
                else
                    theseMillis = theseMillis - MILLIS_IN_YEAR;
                    if (isLeapYear(year + 1))
                        nextYear = MILLIS_IN_LEAP_YEAR;
                year++;
            millisAfterYear = theseMillis;
            this.year = year;
         *Calculating the year from before 1970 must be done differently. It's pretty much just inverted.
        private void setYearBefore1970()
            long theseMillis = this.millis;
            year = 1970;
            long nextYear = MILLIS_IN_YEAR;
            while (theseMillis <= 0)
                if (isLeapYear(year))
                    theseMillis = theseMillis + MILLIS_IN_LEAP_YEAR;
                    nextYear = MILLIS_IN_YEAR;
                else
                    theseMillis = theseMillis + MILLIS_IN_YEAR;
                    if (isLeapYear(year - 1))
                        nextYear = MILLIS_IN_LEAP_YEAR;
                year--;
            millisAfterYear = theseMillis * -1;
            this.year = year;
         *Just what it sounds like. Pass it the number of milliseconds past the epoch and it will calculate the date based on that.
        public void setTimeInMillis(long millis)
            this.millis = millis;
            if (millis >= 0)
                setYearAfter1970();
            else
                setYearBefore1970();
         *Returns the number of milliseconds from the epoch.
        public long getTimeInMillis()
            return this.millis;
         *Returns the current year.
        public int getYear()
            return this.year;
         *Sets the date to 00:00 of Jan 1 of the passed year.
        public void setYear(int year)
            this.year = year;
            long theseMillis = 0;
            if (year > 1970)
                //Kind of like setYearAfter1970 method, except it's adding instead of subtracting. So actually it's the opposite.
                for (int cntr = 1970; cntr < this.year; cntr++)
                    if (isLeapYear(cntr))
                        theseMillis = theseMillis + MILLIS_IN_LEAP_YEAR;
                    else
                        theseMillis = theseMillis + MILLIS_IN_YEAR;
            else
                for (int cntr = 1970; cntr > this.year; cntr--)
                    if (isLeapYear(cntr))
                        theseMillis = theseMillis - MILLIS_IN_LEAP_YEAR;
                    else
                        theseMillis = theseMillis - MILLIS_IN_YEAR;
            //On a leap year there are 29 days in February. If not, there's 28.
            if (isLeapYear(year))
                daysInMonth[1] = 29;
            else
                daysInMonth[1] = 28;
            //This variable helps me calculate denominations of time that are below year.
            millisAfterYear = 0;
            setTimeInMillis(theseMillis);
         *Sets the month to the one that you passed, 0 being January and 11 being December.
        public void setMonth(int month)
            if (month < 0 || month > 11)
                throw new ArrayIndexOutOfBoundsException(month);
            long theseMillis = getTimeInMillis();
            int days = 0;
            setYear(this.year);
            if (getTimeInMillis() > 0)
                theseMillis = theseMillis - getTimeInMillis();
            else
                theseMillis = theseMillis + getTimeInMillis();
            for (int cntr = 0; cntr < month; cntr++)
                days = days + daysInMonth[cntr];
            millisAfterYear = days * MILLIS_IN_DAY + 1;
            setTimeInMillis(getTimeInMillis() + millisAfterYear);
         *Returns the month stored in this object. With this object 0 represents January and 11 represents December.
        public int getMonth()
            long theseMillis = millisAfterYear;
            int cntr = 0;
            while (theseMillis > (MILLIS_IN_DAY * daysInMonth[cntr]))
                theseMillis = theseMillis - MILLIS_IN_DAY * daysInMonth[cntr];
                cntr++;
            return cntr;
         *Set the day of month to the one passed.
        public void setDayOfMonth(int day)
            if (day < 1 || day > daysInMonth[getMonth()])
                throw new ArrayIndexOutOfBoundsException(day);
            setMonth(getMonth());
            //Internally, this actually works starting at zero, however to anyone using this class it appears to start at 1. Therefore
                //i must subtract one here.
            long addMillis = MILLIS_IN_DAY * (day - 1);
            millisAfterYear = millisAfterYear + addMillis;
            setTimeInMillis(getTimeInMillis() + addMillis + 1);
         *Returns the day of month.
        public int getDayOfMonth()
            int days = (int)(millisAfterYear / MILLIS_IN_DAY);
            int cntr = 0;
            while (days >= daysInMonth[cntr])
                days = days - daysInMonth[cntr];
                cntr++;
            //Internally this class stores dates starting at zero, but i want it to look like it starts at 1.
            return days + 1;
         *Sets the time to the currently selected day at the passed hour on the hour. uses 24 hour clock.
        public void setHour(int hour)
            if (hour < 0 || hour > 23)
                throw new ArrayIndexOutOfBoundsException(hour);
            setDayOfMonth(getDayOfMonth());
            long addMillis = MILLIS_IN_HOUR * hour;
            millisAfterYear = millisAfterYear + addMillis;
            setTimeInMillis(getTimeInMillis() + addMillis);
         *Returns the hour (but not how many minutes past the hour).
        public int getHour()
            long millisAfterDay = millisAfterYear % MILLIS_IN_DAY;
            return (int)(millisAfterDay / MILLIS_IN_HOUR);
         *Set the minutes past the hour. Works 0-59.
        public void setMinute(int minute)
            if (minute < 0 || minute > 59)
                throw new ArrayIndexOutOfBoundsException(minute);
            setHour(getHour());
            long addMillis = MILLIS_IN_MINUTE * minute;
            millisAfterYear = millisAfterYear + addMillis;
            setTimeInMillis(getTimeInMillis() + addMillis);
         *Returns the minutes past the hour, 0-59.
        public int getMinute()
            long millisAfterHour = millisAfterYear % MILLIS_IN_HOUR;
            return (int)(millisAfterHour / MILLIS_IN_MINUTE);
         *Sets the seconds past the minute, 0-59.
        public void setSecond(int second)
            if (second < 0 || second > 59)
                throw new ArrayIndexOutOfBoundsException(second);
            setMinute(getMinute());
            long addMillis = MILLIS_IN_SECOND * second;
            millisAfterYear = millisAfterYear + addMillis;
            setTimeInMillis(getTimeInMillis() + addMillis);
         *Returns the seconds past the minute, 0-59.
        public int getSecond()
            long millisAfterMinute = millisAfterYear % MILLIS_IN_MINUTE;
            return (int)(millisAfterMinute / MILLIS_IN_SECOND);
         *The more commonly seen set method of other date objects. Sets the date/time to 00:00 of the year/month/day passed. Convenience method
         *for setDate(int year, int month, int day, int hour, int minute, int second).
        public void setDate(int year, int month, int day)
            setDate(year, month, day, 0 , 0 , 0);
         *Sets every date/time field.
        public void setDate(int year, int month, int day, int hour, int minute, int second)
            setYear(year);
            setMonth(month);
            setDayOfMonth(day);
            setHour(hour);
            setMinute(minute);
            setSecond(second);
         *Returns yes if the stored date is a leap year. A leap year is every year that is divisible by four unless it is divisible by 100
         *unless it is also divisible by 400.
        public boolean isLeapYear()
            return isLeapYear(this.year);
         *For internal use. Returns if the passed year meets the criteria for a leap year.
        private boolean isLeapYear(int year)
            boolean leapYear = false;
            if (year % 4 == 0)
                if (year % 100 != 0)
                    leapYear = true;
                else if (year % 400 == 0)
                    leapYear = true;
            return leapYear;
         *Returns the difference in milliseconds between the time stored in this object and the millis passed to this method.
        public long getDifferenceInMillis(long millis)
            return getTimeInMillis() - millis;
         *Returns the difference in milliseconds between this date and the date passed to this method.
        public long getDifferenceInMillis(AwesomeDate otherDate)
            return getDifferenceInMillis(otherDate.getTimeInMillis());
         *Designed to be a wrapper method for the getDifferenceInMillis method. This method changes millis into years/days/whatever. Pass
         *the number of milliseconds you have to convert in the first parameter. The second parameter should be the type of denomination you
         *want (year, day, whatever). Use the MILLIS_IN_* fields associated with this object. Also bear in mind when workin with years that
         *some years are leap years, so in extreme cases of differences of 365+ years you may gain/lose a year.
        public static int toGreaterDenom(long millis, long denom)
            return (int)(millis / denom);
         * The first argument is how many of whatever (days, months, years, etc.) to add (use negative numbers to subtract). For the second
         * argument pass one of the MILLIS_IN_* fields. Thus, to add two hours would be
         * <code>
         *      AwesomeDate.adjustDate(2, AwesomeDate.MILLIS_IN_HOUR);
         * </code>
        public void adjustDate(int amount, long typeMillis)
            setTimeInMillis(this.millis + amount * typeMillis);
         *Returns an object of type java.util.Date set to the date/time stored here.
        public java.util.Date toUtilDate()
            long offset = TimeZone.getDefault().getRawOffset();
            return new java.util.Date(getTimeInMillis() +  -1 * offset);
    //        return new java.util.Date(getTimeInMillis());
         *Returns an object of type GregorianCalendar set to the date/time stored here.
        public GregorianCalendar toGregorianCalendar()
            long offset = TimeZone.getDefault().getRawOffset();
            GregorianCalendar cal = new GregorianCalendar();
            cal.setTimeInMillis(getTimeInMillis() - offset);
            return cal;
         *Returns an object of type java.sql.Date set to the date/time stored here.
        public java.sql.Date toSQLDate()
            long offset = TimeZone.getDefault().getRawOffset();
            return new java.sql.Date(getTimeInMillis() - offset);
        /** Format the date  using the string that you pass. Works just like the SimpleDateFormat object. Infact, it uses one! Heres
         *how it works:
         *Letter  Date or Time Component  Presentation  Examples  <br>
         *G  Era designator  Text  AD  <br>
         *y  Year  Year  1996; 96  <br>
         *M  Month in year  Month  July; Jul; 07<br> 
         *w  Week in year  Number  27  <br>
         *W  Week in month  Number  2  <br>
         *D  Day in year  Number  189  <br>
         *d  Day in month  Number  10  <br>
         *F  Day of week in month  Number  2<br> 
         *E  Day in week  Text  Tuesday; Tue  <br>
         *a  Am/pm marker  Text  PM  <br>
         *H  Hour in day (0-23)  Number  0<br> 
         *k  Hour in day (1-24)  Number  24  <br>
         *K  Hour in am/pm (0-11)  Number  0  <br>
         *h  Hour in am/pm (1-12)  Number  12  <br>
         *m  Minute in hour  Number  30  <br>
         *s  Second in minute  Number  55  <br>
         *S  Millisecond  Number  978  <br>
         *z  Time zone  General time zone  Pacific Standard Time; PST; GMT-08:00<br> 
         *Z  Time zone  RFC 822 time zone  -0800  <br>
        public String toFormattedString(String format)
            SimpleDateFormat formattage = new SimpleDateFormat(format);
            return formattage.format(toUtilDate());
         *I overrode the toString method. Now it tells everyone how awesome my AwesomeDate is.
        public String toString()
            String output = "John's Awesome Date!";
            output = output + " Millis: " + getTimeInMillis();
            output = output + " Year: " + getYear();
            output = output + " Month: " + getMonth();
            output = output + " Date: " + getDayOfMonth();
            output = output + " Time: ";
            if (getHour() < 10)
                output = output + "0" + getHour();
            else
                output = output + getHour();
            if (getMinute() < 10)
                output = output + "0" + getMinute();
            else
                output = output + getMinute();
            output = output + " Seconds: " + getSecond();
            return output;
        public static void main(String[] psvm)
            AwesomeDate blah = new AwesomeDate();
            GregorianCalendar blah1 = new GregorianCalendar();
            GregorianCalendar blah2 = new GregorianCalendar();
    }

    The reason Callendar is so complicated is that it is trying to solve a very complicated problem.
    You don't appear to support leap seconds (of which there can be upto 2 in any time interval)
    http://www.timeanddate.com/time/leapseconds.html
    Some of your code will not work for large dates very well (seems to iterate over the years). Try using your date class for astronomical or geological calculations. them big numbers will make your code slow at the moment.
    You don't seem to support timezones or transitory offsets (BST vs GMT). You most definately don't handle changes to timezone offsets that have occured in the past or historical daylight savings time offsets (they have not always been the same)
    The difference between two calendars is a "duration" a duration means nothing unless it is applied to a caledar/date (although you may be able to get away with it if the duration is always stored in millis)

  • Difference b/w DATA TYPE and DATA OBJECT & differences b/w TYPE and LIKE

    hai
    can any one say the differences between Data type and Data Object.
    And also differences between TYPE and LIKE
    thanks
    Gani

    hi,
    _Data Types and Data Objects_
          Programs work with local program data – that is, with byte sequences in the working memory. Byte sequences that belong together are called fields and are characterized by a length, an identity (name), and – as a further attribute – by a data type. All programming languages have a concept that describes how the contents of a field are interpreted according to the data type.
          In the ABAP type concept, fields are called data objects. Each data object is thus an instance of an abstract data type. There are separate name spaces for data objects and data types. This means that a name can be the name of a data object as well as the name of a data type simultaneously.
    Data Types
       As well as occurring as attributes of a data object, data types can also be defined independently. You can then use them later on in conjunction with a data object. The definition of a user-defined data type is based on a set of predefined elementary data types. You can define data types either locally in the declaration part of a program using the TYPESstatement) or globally in the ABAP Dictionary. You can use your own data types to declare data objects or to check the types of parameters in generic operations.
         All programming languages distinguish between various types of data with various uses, such as ….. type data for storing or displaying values and numerical data for calculations. The attributes in question are described using data types. You can define, for example, how data is stored in the repository, and how the ABAP statements work with the data.
    Data types can be divided into elementary, reference, and complex types.
    a. Elementary Types
    These are data types of fixed or variable length that are not made up of other types.
    The difference between variable length data types and fixed length data types is that the length and the memory space required by data objects of variable length data types can change dynamically during runtime, and that these data types cannot be defined irreversibly while the data object is being declared.
    Predefined and User-Defined Elementary Data Types
    You can also define your own elementary data types in ABAP using the TYPES statement. You base these on the predefined data types. This determines all of the technical attributes of the new data type. For example, you could define a data type P_2 with two decimal places, based on the predefined data type P. You could then use this new type in your data declarations.
    b.  Reference Types
    Reference types are deep data types that describe reference variables, that is, data objects that contain references. A reference variable can be defined as a component of a complex data object such as a structure or internal table as well as a single field.
    c. Complex Data Types
    Complex data types are made up of other data types. A distinction is made here between structured types and table types.
    Data Objects
          Data objects are the physical units with which ABAP statements work at runtime. The contents of a data object occupy memory space in the program. ABAP statements access these contents by addressing the name of the data object and interpret them according to the data type.. For example, statements can write the contents of data objects in lists or in the database, they can pass them to and receive them from routines, they can change them by assigning new values, and they can compare them in logical expressions.
           Each ABAP data object has a set of technical attributes, which are fully defined at all times when an ABAP program is running (field length, number of decimal places, and data type). You declare data objects either statically in the declaration part of an ABAP program (the most important statement for this is DATA), or dynamically at runtime (for example, when you call procedures). As well as fields in the memory area of the program, the program also treats literals like data objects.
            A data object is a part of the repository whose content can be addressed and interpreted by the program. All data objects must be declared in the ABAP program and are not persistent, meaning that they only exist while the program is being executed. Before you can process persistent data (such as data from a database table or from a sequential file), you must read it into data objects first. Conversely, if you want to retain the contents of a data object beyond the end of the program, you must save it in a persistent form.
    Declaring Data Objects
          Apart from the interface parameters of procedures, you declare all of the data objects in an ABAP program or procedure in its declaration part. These declarative statements establish the data type of the object, along with any missing technical attributes. This takes place before the program is actually executed. The technical attributes can then be queried while the program is running.
         The interface parameters of procedures are generated as local data objects, but only when the procedure is actually called. You can define the technical attributes of the interface parameters in the procedure itself. If you do not, they adopt the attributes of the parameters from which they receive their values.
    ABAP contains the following kinds of data objects:
    a.  Literals
    Literals are not created by declarative statements. Instead, they exist in the program source code. Like all data objects, they have fixed technical attributes (field length, number of decimal places, data type), but no name. They are therefore referred to as unnamed data objects.
    b.  Named Data Objects
    Data objects that have a name that you can use to address the ABAP program are known as named objects. These can be objects of various types, including text symbols, variables and constants.
    Text symbols are pointers to texts in the text pool of the ABAP program. When the program starts, the corresponding data objects are generated from the texts stored in the text pool. They can be addressed using the name of the text symbol.
    Variables are data objects whose contents can be changed using ABAP statements. You declare variables using the DATA, CLASS-DATA, STATICS, PARAMETERS, SELECT-OPTIONS, and RANGESstatements.
    Constants are data objects whose contents cannot be changed. You declare constants using the CONSTANTSstatement.
    c.  Anonymous Data  Objects
    Data objects that cannot be addressed using a name are known as anonymous data objects. They are created using the CREATE DATAstatement and can be addressed using reference variables.
    d.  System-Defined Data Objects
    System-defined data objects do not have to be declared explicitly - they are always available at runtime.
    e.  Interface Work Areas
    Interface work areas are special variables that serve as interfaces between programs, screens, and logical databases. You declare interface work areas using the TABLES and NODESstatements.
    What is the difference between Type and Like?
    Answer1:
    TYPE, you assign datatype directly to the data object while declaring.
    LIKE,you assign the datatype of another object to the declaring data object. The datatype is referenced indirectly.
    Answer2:
    Type is a keyword used to refer to a data type whereas Like is a keyword used to copy the existing properties of already existing data object.
    Answer3:
    type refers the existing data type
    like refers the existing data object
    reward if useful
    thanks and regards
    suma sailaja pvn

Maybe you are looking for