Skip to Main Content

APEX

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Help understand this code

Eslam_ElbyalyFeb 23 2020 — edited Jun 5 2020

Hi,

This is code of @"John Snyders-Oracle" for subscribing to the model. There are things I do not understand about it and I have been surfing the web for a long time for this. I'd appreciate if you can help me understand it.

// create a private scope where $ is set to apex.jQuery

(function($) {

    // This is the function that calculates over all the rows of the model and then

    // updates something else.

    // Change this to do whatever calculation is needed.

    // Call this whenever the model data changes.

    function update(model) {

        var salKey = model.getFieldKey("SAL"),

            total = 0;

        console.log(">> starting sum SAL column")

        model.forEach(function(record, index, id) {

            var sal = parseFloat(record[salKey]),  // record[salKey] should be a little faster than using model.getValue in a loop

                meta = model.getRecordMetadata(id);

            if (!isNaN(sal) && !meta.deleted && !meta.agg) {

                total += sal;

            }

        });

        console.log(">> setting sum SAL column to " + total)

        $s("P5_TOTAL", total);

    }

    //

    // This is the general pattern for subscribing to model notifications

    //

    // need to do this here rather than in Execute when Page Loads so that the handler

    // is setup BEFORE the IG is initialized otherwise miss the first model created event

    $(function() {

        // the model gets released and created at various times such as when the report changes

        // listen for model created events so that we can subscribe to model notifications

        $("#emp").on("interactivegridviewmodelcreate", function(event, ui) {

            var sid,

                model = ui.model;

            // note this is only done for the grid veiw. It could be done for

            // other views if desired. The imporant thing to realize is that each

            // view has its own model

            if ( ui.viewId === "grid" ) {

                sid = model.subscribe( {

                    onChange: function(type, change) {

                        console.log(">> model changed ", type, change);

                        if ( type === "set" ) {

                            // don't bother to recalculate if other columns change

                            if (change.field === "SAL" ) {

                                update( model );

                            }

                        } else if (type !== "move" && type !== "metaChange") {

                            // any other change except for move and metaChange affect the calculation

                            update( model );

                        }

                    },

                    progressView: $("#P5_TOTAL") // this will cause a spinner on this field

                } );

                // if not lazy loaded there is no notification for initial data so update

                update( model );

                // just in case fetch all the data. Model notifications will

                // cause calls to update so nothing to do in the callback function.

                // can remove if data will always be less than 50 records

                model.fetchAll(function() {});

            }

        });

    });

})(apex.jQuery);

1- in line one, What does he mean with "creating private scope"? I know what a private scope mean but I do not understand it here.

2- line 37, (event, ui). Are there Parameter or Arguments(Values)? as far as I'm aware, in the following example,

"function(a) {return a}"

- When call it i.e " function test(5) "

"a" is a Parameter and "5" is it's Argument/Value. 

- If they are parameters, are they acting as an Out Parameter?

3- line 47, (type, change). Are they Out Parameters too?

This post has been answered by John Snyders-Oracle on Feb 24 2020
Jump to Answer
Comments
Post Details
Added on Feb 23 2020
7 comments
771 views