Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    listgrid.expandRecord rejects grid record

    Still working on my 3 level nested listgrids. In the code below I am trying to simulate the 'related' mode between the top level 'topic' grid (a.k.a. OnlineAgendaGrid) and the 'issueSubGrid'.

    My method:
    Code:
    1. populate the topic grid
    2. for each topic
        2.1 filter my issues for this topic
        2.2 create expansion related grid under this topic (issueSubGrid)
        2.3 populate issueSubGrid with filtered issues (setData)
    3. draw everything
    My problem is in step 2.2. Below is the code.

    Code:
    Log.setPriority("Log", 5);
    Log.logDebug("**** ProjectIssue version****************** OnlineMeetingButton.Click");
    
    if (!window.OnlineMeetingForm) {
        var message = "Component ID \"OnlineMeetingForm\", target of action \"Edit rec\" does not exist";
        isc.Log.logWarn(message);
        if (isc.designTime) {
            isc.say(message);
        }
    }
    
    OnlineMeetingWindow.autoDraw = false;
    OnlineMeetingForm.setValue("MeetingName", Application.currentMeetingName);
    OnlineMeetingForm.setValue("TeleconferenceInfo", Application.currentTeleconferenceInfo);
    
    OnlineAgendaGrid.autoDraw = false;
    OnlineAgendaGrid.canExpandRecords=true;
    OnlineAgendaGrid.canExpandMultipleRecords=false;
    OnlineAgendaGrid.expansionMode="related";
    OnlineAgendaGrid.childExpansionMode="related";
    //OnlineAgendaGrid.detailDS="ProjectIssue";
    //OnlineAgendaGrid.expansionRelatedProperties = { autoFetchData:true, autoFetchTextMatchStyle:"exact", canExpandRecords:true, canExpandMultipleRecords:false, detailDS:"IncompleteTask", height:"200", overflow:"visible"};
    
    var issueArray = [];
    issueArray = ProjectIssue.cacheData;
    Log.logDebug("************ ProjectIssue.cacheData record count: " + issueArray.length);
    
    if (!OnlineAgendaGrid) {Log.logDebug("************ OnlineAgendaGrid is undefined.");}
    
    MeetingTopic.fetchData( { "MeetingTypeID" : Application.currentMeetingTypeID },
        function (dsResponse, data, dsRequest) {
            Log.logDebug("************meeting topic records fetched: " + this.echo(dsResponse));
            if (dsResponse.status >= 0) {
                if (dsResponse.totalRows > 0) {
                	OnlineAgendaGrid.setData(data);
                    var totalTopics = dsResponse.totalRows;
                    for (var currentTopicIndex = 0; currentTopicIndex < totalTopics; currentTopicIndex++) {
                        var currentTopicRecord = {};
                        currentTopicRecord = OnlineAgendaGrid.data[currentTopicIndex];
                        //var currentTopicMember = OnlineAgendaGrid.getMember(currentTopicIndex);
                        Log.logDebug("************ currentTopicRecord: " + this.echo(currentTopicRecord));
                        if (currentTopicRecord.SearchEnabled) {
                            var issueCriteria = { };
                            if (!(typeof currentTopicRecord.IssueTypeID === "undefined")) {
                                issueCriteria.IssueTypeID = String(currentTopicRecord.IssueTypeID);
                            }
                            if (!(typeof currentTopicRecord.CategoryID === "undefined")) {
                                issueCriteria.CategoryID = String(currentTopicRecord.CategoryID) ;
                            }
                            if (!(typeof currentTopicRecord.ImpactID === "undefined")) {
                                issueCriteria.ImpactID = String(currentTopicRecord.ImpactID) ;
                            }
                                                    
                            var issueResults = ProjectIssue.applyFilter(issueArray, issueCriteria);
                            
                            Log.logDebug("************ ProjectIssue.applyFilter record count: " + issueResults.length + " for " + this.echo(issueCriteria));
    						var issueCount = issueResults.length;
    						if (issueCount > 0) {
    							Log.logDebug("************ ProjectIssue.applyFilter issueResults[zero]: " + this.echo(issueResults[0]));
    							//Log.logDebug("************ issueResults[zero]: " + this.echo(issueResults[0]));
    							
    							//currentTopicRecord.canExpand(true);
    							Log.logDebug("************ working with currentTopicRecord: " + this.echo(currentTopicRecord));
    							OnlineAgendaGrid.expandRecord(currentTopicRecord);
    							var issueSubGrid = OnlineAgendaGrid.getExpansionComponent(currentTopicRecord);
    							if (issueSubGrid === null) {Log.logDebug("************ issueSubGrid is null.");}
    
    							issueSubGrid.canExpandRecords=true;
    							issueSubGrid.canExpandMultipleRecords=false;
    							issueSubGrid.expansionMode="related";
    							issueSubGrid.setData(issueResults);
    							Log.logDebug("************ issueSubGrid: " + this.echo(issueSubGrid));							
    													
    							for (currentIssueIndex = 0; currentIssueIndex < issueCount; currentIssueIndex++) {
    								var currentIssueRecord = {};
    								currentIssueRecord = issueResults[currentIssueIndex];
    								Log.logDebug("************ currentIssueIndex = " + currentIssueIndex + " of " + issueCount);
    								Log.logDebug("************ currentIssueRecord = issueResults[" + currentIssueIndex + "]: " + this.echo(currentIssueRecord));
    								if (issueArray.remove(currentIssueRecord)) {
    									Log.logDebug("************ IssueNumber: " + currentIssueRecord.IssueNumber + " removed from issueArray");		
    								} else {
    									Log.logDebug("************ Error removing issue: " + this.echo(currentIssueRecord));
    								}				
    
    								currentIssueGridRecord = issueSubGrid.getRecord(currentIssueIndex);																			
    								currentIssueGridRecord.detailDS = "IncompleteTask";
    							}   // end for loop																								
    						} else {
    							Log.logDebug("************ issueCount is zero"); 
    							//currentTopicRecord.setProperty("canExpand", false);
    						} 	// end if issueCount is zero 
    					} else {
    						Log.logDebug("************ searchEnabled is false");  
    						// currentTopicRecord.setProperty("canExpand", false);
    					} 	// end if currentTopicRecord.SearchEnabled
    				} // end for currentTopicIndex
    				Log.logDebug("************ done with all topics. Launching OnlineMeetingWindow");
    				OnlineMeetingWindow.setTitle("Project:" + Application.currentProjectNumber + " " + Application.currentMeetingName);
    				OnlineMeetingWindow.markForRedraw("grids populated");
    				OnlineMeetingWindow.show();				
    			} else {
    				Log.logDebug("*********** No meeting topic records fetched for MeetingTypeID: " + Application.currentMeetingTypeID);	
                    isc.say("No meeting topic records fetched for MeetingTypeID: " + Application.currentMeetingTypeID);	
    			} // end if MeetingTopic.fetchData dsResponse.totalRows > 0		
    		} else {
    			Log.logDebug("*********** Error fetching meeting topic records for MeetingTypeID: " + Application.currentMeetingTypeID);	
                isc.say("Error fetching meeting topic records for MeetingTypeID: " + Application.currentMeetingTypeID);			
    		} // end if MeetingTopic.fetchData dsResponse.status >= 0					
    		OnlineMeetingWindow.markForRedraw("grids populated");
    		Log.logDebug("************ end MeetingTopic.fetchData function"); 
    		Log.logDebug("************ OnlineAgendaGrid: " + this.echo(OnlineAgendaGrid));
    	} // end MeetingTopic.fetchData function
    );	// end MeetingTopic.fetchData call						
    Log.logDebug("************ done with MeetingTopic.fetchData call");
    
    Log.logDebug("****END***END***END*** OnlineMeetingButton.Click");
    Below is the end of the developer console. It dumps the currentTopicRecord, which was taken from the current ListGridRecord. Passed to expandRecord it gets TypeError: _6 is undefined.

    Code:
    10:44:44.091:TMR6:DEBUG:Log:************ working with currentTopicRecord: {TopicLeaderName: "Vicki Spencer",
    MeetingTypeID: 101,
    CommunityID: 101,
    TopicNumber: 1,
    MeetingTopicID: 101,
    ImpactName: "5-Catastrophic",
    SearchEnabled: true,
    TopicTitle: "All High Impact Issues",
    ImpactID: 101,
    Created: Date(01/30/2013),
    Modified: Date(07/23/2012),
    MeetingName: "Weekly Status Meeting",
    TopicLeaderID: 102,
    ProjectID: 101}
    10:44:44.124:TMR6:WARN:Log:TypeError: _6 is undefined
        ListGrid.addEmbeddedComponent(_1=>{Obj},  _2=>{Obj},  _3=>0)
        ListGrid.expandRecord(_1=>{Obj})
        unnamed({Obj}, [object Array], {Obj})
        [c]Class.fireCallback(_1=>function (dsResponse, data, dsRequest),  _2=>"dsResponse,data,dsRequest",  _3=>[object Array],  _4=>{Obj},  _5=>undef)
        [c]Class.fireCallback(_1=>function (dsResponse, data, dsRequest),  _2=>"dsResponse,data,dsRequest",  _3=>[object Array])
        DataSource.fireResponseCallbacks({Obj}, {Obj}, {Obj}, {Obj})
        DataSource._completeResponseProcessing({Obj}, {Obj}, {Obj}, {Obj}, {Obj})
        DataSource._handleClientOnlyReply({Obj}, {Obj}, {Obj})
        [c]Class.fireCallback(_1=>{Obj},  _2=>"rpcResponse,data,rpcRequest",  _3=>[object Array],  _4=>{Obj},  _5=>undef)
        [c]Class.fireCallback(_1=>{Obj},  _2=>"rpcResponse,data,rpcRequest",  _3=>[object Array])
        [c]RPCManager.fireReplyCallback(_1=>{Obj},  _2=>{Obj},  _3=>{Obj},  _4=>{Obj})
        [c]RPCManager.fireReplyCallbacks(_1=>{Obj},  _2=>{Obj})
        [c]RPCManager.performOperationReply(_1=>{Obj},  _2=>{Obj})
        RPCManager._performTransactionReply(31)
        [c]Class.fireCallback(_1=>{Obj},  _2=>undef,  _3=>[object Array],  _4=>{Obj},  _5=>true)
        Timer._fireTimeout("$ir561")
        unnamed()
        unnamed() @
    There is no reflection in the server log. It just shows the last fetch activity.

    Code:
    === 2013-02-01 15:44:43,625 [sor2] DEBUG RPCManager - Processing 1 requests.
    === 2013-02-01 15:44:43,671 [sor2] DEBUG RPCManager - Request #1 (DSRequest) payload: {
        criteria:{
        },
        operationConfig:{
            dataSource:"MeetingTopic",
            operationType:"fetch"
        },
        appID:"builtinApplication",
        operation:"MeetingTopic_fetch",
        oldValues:null
    }
    === 2013-02-01 15:44:43,687 [sor2] INFO  IDACall - Performing 1 operation(s)
    === 2013-02-01 15:44:43,687 [sor2] DEBUG AppBase - [builtinApplication.MeetingTopic_fetch] No userTypes defined, allowing an
    yone access to all operations for this application
    === 2013-02-01 15:44:43,687 [sor2] DEBUG AppBase - [builtinApplication.MeetingTopic_fetch] No public zero-argument method na
    med '_MeetingTopic_fetch' found, performing generic datasource operation
    === 2013-02-01 15:44:43,687 [sor2] INFO  SQLDataSource - [builtinApplication.MeetingTopic_fetch] Performing fetch operation
    with
            criteria: {}    values: {}
    === 2013-02-01 15:44:43,687 [sor2] INFO  SQLWhereClause - [builtinApplication.MeetingTopic_fetch] empty condition
    === 2013-02-01 15:44:43,687 [sor2] INFO  SQLDataSource - [builtinApplication.MeetingTopic_fetch] derived query: SELECT $defa
    ultSelectClause FROM (MeetingType, MeetingTopic) LEFT JOIN TeamMember ON MeetingTopic.TopicLeaderID = TeamMember.TeamMemberI
    D LEFT JOIN Category ON MeetingTopic.CategoryID = Category.CategoryID LEFT JOIN IssueType ON MeetingTopic.IssueTypeID = Issu
    eType.IssueTypeID LEFT JOIN IssueImpact ON MeetingTopic.ImpactID = IssueImpact.ImpactID  WHERE MeetingTopic.MeetingTypeID =
    MeetingType.MeetingTypeID AND ($defaultWhereClause)
    === 2013-02-01 15:44:43,687 [sor2] INFO  SQLDataSource - [builtinApplication.MeetingTopic_fetch] Executing SQL query on 'Pla
    netProjectDB': SELECT MeetingTopic.CategoryID, Category.CategoryName, MeetingTopic.CommunityID, MeetingTopic.Created, Meetin
    gTopic.ExpectedResults, MeetingTopic.ImpactID, IssueImpact.ImpactName, MeetingTopic.IssueTypeID, IssueType.IssueTypeName, Me
    etingType.MeetingName, MeetingTopic.MeetingTopicID, MeetingTopic.MeetingTypeID, MeetingTopic.Modified, MeetingTopic.ProjectI
    D, MeetingTopic.SearchEnabled, MeetingTopic.SessionTime, MeetingTopic.SessionType, MeetingTopic.TopicLeaderID, TeamMember.Te
    amMemberName AS TopicLeaderName, MeetingTopic.TopicNumber, MeetingTopic.TopicTitle FROM (MeetingType, MeetingTopic) LEFT JOI
    N TeamMember ON MeetingTopic.TopicLeaderID = TeamMember.TeamMemberID LEFT JOIN Category ON MeetingTopic.CategoryID = Categor
    y.CategoryID LEFT JOIN IssueType ON MeetingTopic.IssueTypeID = IssueType.IssueTypeID LEFT JOIN IssueImpact ON MeetingTopic.I
    mpactID = IssueImpact.ImpactID  WHERE MeetingTopic.MeetingTypeID = MeetingType.MeetingTypeID AND (('1'='1'))
    === 2013-02-01 15:44:43,687 [sor2] DEBUG PoolableSQLConnectionFactory - [builtinApplication.MeetingTopic_fetch] DriverManage
    r fetching connection for PlanetProjectDB via jdbc url jdbc:mysql://localhost:3306/PUBLIC
    === 2013-02-01 15:44:43,687 [sor2] DEBUG PoolableSQLConnectionFactory - [builtinApplication.MeetingTopic_fetch] Passing cred
    entials getConnection separately from JDBC URL
    === 2013-02-01 15:44:43,703 [sor2] DEBUG PoolableSQLConnectionFactory - [builtinApplication.MeetingTopic_fetch] Returning po
    oled Connection
    === 2013-02-01 15:44:43,703 [sor2] DEBUG SQLTransaction - [builtinApplication.MeetingTopic_fetch] Started new PlanetProjectD
    B transaction "20245200"
    === 2013-02-01 15:44:43,703 [sor2] INFO  SQLDriver - [builtinApplication.MeetingTopic_fetch] Executing SQL query on 'PlanetP
    rojectDB': SELECT MeetingTopic.CategoryID, Category.CategoryName, MeetingTopic.CommunityID, MeetingTopic.Created, MeetingTop
    ic.ExpectedResults, MeetingTopic.ImpactID, IssueImpact.ImpactName, MeetingTopic.IssueTypeID, IssueType.IssueTypeName, Meetin
    gType.MeetingName, MeetingTopic.MeetingTopicID, MeetingTopic.MeetingTypeID, MeetingTopic.Modified, MeetingTopic.ProjectID, M
    eetingTopic.SearchEnabled, MeetingTopic.SessionTime, MeetingTopic.SessionType, MeetingTopic.TopicLeaderID, TeamMember.TeamMe
    mberName AS TopicLeaderName, MeetingTopic.TopicNumber, MeetingTopic.TopicTitle FROM (MeetingType, MeetingTopic) LEFT JOIN Te
    amMember ON MeetingTopic.TopicLeaderID = TeamMember.TeamMemberID LEFT JOIN Category ON MeetingTopic.CategoryID = Category.Ca
    tegoryID LEFT JOIN IssueType ON MeetingTopic.IssueTypeID = IssueType.IssueTypeID LEFT JOIN IssueImpact ON MeetingTopic.Impac
    tID = IssueImpact.ImpactID  WHERE MeetingTopic.MeetingTypeID = MeetingType.MeetingTypeID AND (('1'='1'))
    === 2013-02-01 15:44:43,703 [sor2] INFO  DSResponse - [builtinApplication.MeetingTopic_fetch] DSResponse: List with 5 items
    === 2013-02-01 15:44:43,703 [sor2] DEBUG RPCManager - Content type for RPC transaction: text/plain; charset=UTF-8
    === 2013-02-01 15:44:43,703 [sor2] DEBUG SQLTransaction - Committing PlanetProjectDB transaction "20245200"
    === 2013-02-01 15:44:43,718 [sor2] DEBUG RPCManager - non-DMI response, dropExtraFields: false
    === 2013-02-01 15:44:43,718 [sor2] DEBUG SQLTransaction - Ending PlanetProjectDB transaction "20245200"
    === 2013-02-01 15:44:43,718 [sor2] INFO  Compression - /isomorphic/IDACall: 1784 -> 496 bytes
    === 2013-02-01 15:44:48,421 [sor5] INFO  Download - Returning 304: Not modified on conditional get of: D:\My Websites\Planet
     Project\isomorphic\skins\SilverWave\images\button\button_Focused_Over_stretch.png
    === 2013-02-01 15:44:48,421 [sor2] INFO  Download - Returning 304: Not modified on conditional get of: D:\My Websites\Planet
     Project\isomorphic\skins\SilverWave\images\button\button_Focused_Over_start.png
    === 2013-02-01 15:44:48,421 [or12] INFO  Download - Returning 304: Not modified on conditional get of: D:\My Websites\Planet
     Project\isomorphic\skins\SilverWave\images\button\button_Focused_Over_end.png
    I'll keep bumping around. Any thoughts on how I am creating this error would be appreciated.

    Rick

    P.S. I am running SmartClient Version: v8.2p_2013-01-14/EVAL Development Only on Mozilla Firefox 12.0 with Firebug using Windows XP Pro 32 bit.

    #2
    It also does not work when I give expandRecord a real ListGridRecord and not just a Record. At least, that should be the case. See below that I give it OnlineAgendaGrid.getRecord(currentTopicIndex). It is suspicious to me that this ListGridRecord looks more like just a Record. It has my fields. But, I see no canExpand or enabled, or detailDS properties.

    Code:
    13:47:09.605:TMR7:DEBUG:Log:************ OnlineAgendaGrid.getRecord(currentTopicIndex): {TopicLeaderName: "Vicki Spencer",
    MeetingTypeID: 101,
    CommunityID: 101,
    TopicNumber: 1,
    MeetingTopicID: 101,
    ImpactName: "5-Catastrophic",
    SearchEnabled: true,
    TopicTitle: "All High Impact Issues",
    ImpactID: 101,
    Created: Date(01/30/2013),
    Modified: Date(07/23/2012),
    MeetingName: "Weekly Status Meeting",
    TopicLeaderID: 102,
    ProjectID: 101}
    13:47:09.634:TMR7:WARN:Log:TypeError: _6 is undefined
        ListGrid.addEmbeddedComponent(_1=>{Obj},  _2=>{Obj},  _3=>0)
        ListGrid.expandRecord(_1=>{Obj})
        unnamed({Obj}, [object Array], {Obj})
        [c]Class.fireCallback(_1=>function (dsResponse, data, dsRequest),  _2=>"dsResponse,data,dsRequest",  _3=>[object Array],  _4=>{Obj},  _5=>undef)
        [c]Class.fireCallback(_1=>function (dsResponse, data, dsRequest),  _2=>"dsResponse,data,dsRequest",  _3=>[object Array])
        DataSource.fireResponseCallbacks({Obj}, {Obj}, {Obj}, {Obj})
        DataSource._completeResponseProcessing({Obj}, {Obj}, {Obj}, {Obj}, {Obj})
        DataSource._handleClientOnlyReply({Obj}, {Obj}, {Obj})
        [c]Class.fireCallback(_1=>{Obj},  _2=>"rpcResponse,data,rpcRequest",  _3=>[object Array],  _4=>{Obj},  _5=>undef)
        [c]Class.fireCallback(_1=>{Obj},  _2=>"rpcResponse,data,rpcRequest",  _3=>[object Array])
        [c]RPCManager.fireReplyCallback(_1=>{Obj},  _2=>{Obj},  _3=>{Obj},  _4=>{Obj})
        [c]RPCManager.fireReplyCallbacks(_1=>{Obj},  _2=>{Obj})
        [c]RPCManager.performOperationReply(_1=>{Obj},  _2=>{Obj})
        RPCManager._performTransactionReply(31)
        [c]Class.fireCallback(_1=>{Obj},  _2=>undef,  _3=>[object Array],  _4=>{Obj},  _5=>true)
        Timer._fireTimeout("$ir705")
        unnamed()
        unnamed() @ 
    
    13:47:09.682:TMR1:WARN:Log:TypeError: this.getDataSource() is null
        Canvas.fetchRelatedData(_1=>{Obj},  _2=>"MeetingTopic")
        [c]Class.fireCallback(_1=>{Obj},  _2=>undef,  _3=>[object Array],  _4=>{Obj},  _5=>true)
        Timer._fireTimeout("$ir707")
        unnamed()
        unnamed() @
    Below is the newer code.

    Code:
    Log.setPriority("Log", 5);
    Log.logDebug("**** ProjectIssue version****************** OnlineMeetingButton.Click");
    
    if (!window.OnlineMeetingForm) {
        var message = "Component ID \"OnlineMeetingForm\", target of action \"Edit rec\" does not exist";
        isc.Log.logWarn(message);
        if (isc.designTime) {
            isc.say(message);
        }
    }
    
    OnlineMeetingWindow.autoDraw = false;
    OnlineMeetingForm.setValue("MeetingName", Application.currentMeetingName);
    OnlineMeetingForm.setValue("TeleconferenceInfo", Application.currentTeleconferenceInfo);
    
    OnlineAgendaGrid.autoDraw = false;
    OnlineAgendaGrid.canExpandRecords=true;
    OnlineAgendaGrid.canExpandMultipleRecords=false;
    OnlineAgendaGrid.expansionMode="related";
    OnlineAgendaGrid.childExpansionMode="related";
    //OnlineAgendaGrid.detailDS="ProjectIssue";
    //OnlineAgendaGrid.expansionRelatedProperties = { autoFetchData:true, autoFetchTextMatchStyle:"exact", canExpandRecords:true, canExpandMultipleRecords:false, detailDS:"IncompleteTask", height:"200", overflow:"visible"};
    
    var issueArray = [];
    issueArray = ProjectIssue.cacheData;
    Log.logDebug("************ ProjectIssue.cacheData record count: " + issueArray.length);
    
    if (!OnlineAgendaGrid) {Log.logDebug("************ OnlineAgendaGrid is undefined.");}
    
    MeetingTopic.fetchData( { "MeetingTypeID" : Application.currentMeetingTypeID },
        function (dsResponse, data, dsRequest) {
            Log.logDebug("************meeting topic records fetched: " + this.echo(dsResponse));
            if (dsResponse.status >= 0) {
                if (dsResponse.totalRows > 0) {
                	OnlineAgendaGrid.setData(data);
                	OnlineAgendaGrid.draw();
                    var totalTopics = dsResponse.totalRows;
                    for (var currentTopicIndex = 0; currentTopicIndex < totalTopics; currentTopicIndex++) {
                        var currentTopicRecord = {};
                        currentTopicRecord = OnlineAgendaGrid.data[currentTopicIndex];
                        Log.logDebug("************ currentTopicRecord: " + this.echo(currentTopicRecord));
                        if (currentTopicRecord.SearchEnabled) {
                            var issueCriteria = { };
                            if (!(typeof currentTopicRecord.IssueTypeID === "undefined")) {
                                issueCriteria.IssueTypeID = String(currentTopicRecord.IssueTypeID);
                            }
                            if (!(typeof currentTopicRecord.CategoryID === "undefined")) {
                                issueCriteria.CategoryID = String(currentTopicRecord.CategoryID) ;
                            }
                            if (!(typeof currentTopicRecord.ImpactID === "undefined")) {
                                issueCriteria.ImpactID = String(currentTopicRecord.ImpactID) ;
                            }
    
                            var issueResults = ProjectIssue.applyFilter(issueArray, issueCriteria);
    
                            Log.logDebug("************ ProjectIssue.applyFilter record count: " + issueResults.length + " for " + this.echo(issueCriteria));
    						var issueCount = issueResults.length;
    						if (issueCount > 0) {
    							Log.logDebug("************ ProjectIssue.applyFilter issueResults[zero]: " + this.echo(issueResults[0]));
    							//Log.logDebug("************ issueResults[zero]: " + this.echo(issueResults[0]));
    
    							//currentTopicRecord.canExpand(true);
    							Log.logDebug("************ working with currentTopicRecord: " + this.echo(currentTopicRecord));
    							Log.logDebug("************ OnlineAgendaGrid.getRecord(currentTopicIndex): " + this.echo(OnlineAgendaGrid.getRecord(currentTopicIndex)));
    							OnlineAgendaGrid.expandRecord(OnlineAgendaGrid.getRecord(currentTopicIndex));
    
    							var issueSubGrid = OnlineAgendaGrid.getExpansionComponent(OnlineAgendaGrid.getRecord(currentTopicIndex));
    							if (issueSubGrid === null) {Log.logDebug("************ issueSubGrid is null.");}
    
    							issueSubGrid.canExpandRecords=true;
    							issueSubGrid.canExpandMultipleRecords=false;
    							issueSubGrid.expansionMode="related";
    							issueSubGrid.setData(issueResults);
    							Log.logDebug("************ issueSubGrid: " + this.echo(issueSubGrid));
    
    							for (currentIssueIndex = 0; currentIssueIndex < issueCount; currentIssueIndex++) {
    								var currentIssueRecord = {};
    								currentIssueRecord = issueResults[currentIssueIndex];
    								Log.logDebug("************ currentIssueIndex = " + currentIssueIndex + " of " + issueCount);
    								Log.logDebug("************ currentIssueRecord = issueResults[" + currentIssueIndex + "]: " + this.echo(currentIssueRecord));
    								if (issueArray.remove(currentIssueRecord)) {
    									Log.logDebug("************ IssueNumber: " + currentIssueRecord.IssueNumber + " removed from issueArray");
    								} else {
    									Log.logDebug("************ Error removing issue: " + this.echo(currentIssueRecord));
    								}
    
    								currentIssueGridRecord = issueSubGrid.getRecord(currentIssueIndex);
    								currentIssueGridRecord.detailDS = "IncompleteTask";
    							}   // end for loop
    						} else {
    							Log.logDebug("************ issueCount is zero");
    							//currentTopicRecord.setProperty("canExpand", false);
    						} 	// end if issueCount is zero
    					} else {
    						Log.logDebug("************ searchEnabled is false");
    						// currentTopicRecord.setProperty("canExpand", false);
    					} 	// end if currentTopicRecord.SearchEnabled
    				} // end for currentTopicIndex
    				Log.logDebug("************ done with all topics. Launching OnlineMeetingWindow");
    				OnlineMeetingWindow.setTitle("Project:" + Application.currentProjectNumber + " " + Application.currentMeetingName);
    				OnlineMeetingWindow.markForRedraw("grids populated");
    				OnlineMeetingWindow.show();
    			} else {
    				Log.logDebug("*********** No meeting topic records fetched for MeetingTypeID: " + Application.currentMeetingTypeID);
                    isc.say("No meeting topic records fetched for MeetingTypeID: " + Application.currentMeetingTypeID);
    			} // end if MeetingTopic.fetchData dsResponse.totalRows > 0
    		} else {
    			Log.logDebug("*********** Error fetching meeting topic records for MeetingTypeID: " + Application.currentMeetingTypeID);
                isc.say("Error fetching meeting topic records for MeetingTypeID: " + Application.currentMeetingTypeID);
    		} // end if MeetingTopic.fetchData dsResponse.status >= 0
    		OnlineMeetingWindow.markForRedraw("grids populated");
    		Log.logDebug("************ end MeetingTopic.fetchData function");
    		Log.logDebug("************ OnlineAgendaGrid: " + this.echo(OnlineAgendaGrid));
    	} // end MeetingTopic.fetchData function
    );	// end MeetingTopic.fetchData call
    Log.logDebug("************ done with MeetingTopic.fetchData call");
    
    Log.logDebug("****END***END***END*** OnlineMeetingButton.Click");
    Curious.

    Rick

    Comment


      #3
      My bumping around made some progress. The top grid had not been drawn yet. So, I had to draw it (and its parents).

      I am still looking at dev console results. But, this particular problem is solved.

      Rick

      Comment


        #4
        Seems like this is a monologue. Hope it does not stay that way. My latest code below gets the dev console results further down. It seems I am getting my issue data into the expanded component, but it won't get drawn even with an explicit call. I have attached the resulting window image.

        Code:
        Log.setPriority("Log", 5);
        Log.logDebug("**** ProjectIssue version****************** OnlineMeetingButton.Click");
        
        if (!window.OnlineMeetingForm) {
            var message = "Component ID \"OnlineMeetingForm\", target of action \"Edit rec\" does not exist";
            isc.Log.logWarn(message);
            if (isc.designTime) {
                isc.say(message);
            }
        }
        
        OnlineMeetingWindow.autoDraw = false;
        OnlineMeetingForm.setValue("MeetingName", Application.currentMeetingName);
        OnlineMeetingForm.setValue("TeleconferenceInfo", Application.currentTeleconferenceInfo);
        
        OnlineAgendaGrid.autoDraw = false;
        OnlineAgendaGrid.canExpandRecords=true;
        OnlineAgendaGrid.canExpandMultipleRecords=false;
        OnlineAgendaGrid.expansionMode="related";
        OnlineAgendaGrid.childExpansionMode="related";
        //OnlineAgendaGrid.detailDS="ProjectIssue";
        //OnlineAgendaGrid.expansionRelatedProperties = { autoFetchData:true, autoFetchTextMatchStyle:"exact", canExpandRecords:true, canExpandMultipleRecords:false, detailDS:"IncompleteTask", height:"200", overflow:"visible"};
        
        var issueArray = [];
        issueArray = ProjectIssue.cacheData;
        Log.logDebug("************ ProjectIssue.cacheData record count: " + issueArray.length);
        
        if (!OnlineAgendaGrid) {Log.logDebug("************ OnlineAgendaGrid is undefined.");}
        
        OnlineMeetingWindow.draw();
        
        MeetingTopic.fetchData( { "MeetingTypeID" : Application.currentMeetingTypeID },
            function (dsResponse, data, dsRequest) {
                Log.logDebug("************meeting topic records fetched: " + this.echo(dsResponse));
                if (dsResponse.status >= 0) {
                    if (dsResponse.totalRows > 0) {
                    	OnlineAgendaGrid.setData(data);
                    	OnlineAgendaGrid.draw();
                        var totalTopics = dsResponse.totalRows;
                        for (var currentTopicIndex = 0; currentTopicIndex < totalTopics; currentTopicIndex++) {
                            var currentTopicRecord = {};
                            currentTopicRecord = OnlineAgendaGrid.data[currentTopicIndex];
                            Log.logDebug("************ currentTopicRecord: " + this.echo(currentTopicRecord));
                            if (currentTopicRecord.SearchEnabled) {
                                var issueCriteria = { };
                                if (!(typeof currentTopicRecord.IssueTypeID === "undefined")) {
                                    issueCriteria.IssueTypeID = String(currentTopicRecord.IssueTypeID);
                                }
                                if (!(typeof currentTopicRecord.CategoryID === "undefined")) {
                                    issueCriteria.CategoryID = String(currentTopicRecord.CategoryID) ;
                                }
                                if (!(typeof currentTopicRecord.ImpactID === "undefined")) {
                                    issueCriteria.ImpactID = String(currentTopicRecord.ImpactID) ;
                                }
        
                                var issueResults = ProjectIssue.applyFilter(issueArray, issueCriteria);
        
                                Log.logDebug("************ ProjectIssue.applyFilter record count: " + issueResults.length + " for " + this.echo(issueCriteria));
        						var issueCount = issueResults.length;
        						if (issueCount > 0) {
        							Log.logDebug("************ ProjectIssue.applyFilter issueResults[zero]: " + this.echo(issueResults[0]));
        							//Log.logDebug("************ issueResults[zero]: " + this.echo(issueResults[0]));
        
        							//currentTopicRecord.canExpand(true);
        							//Log.logDebug("************ working with currentTopicRecord: " + this.echo(currentTopicRecord));
        							Log.logDebug("************ OnlineAgendaGrid.getRecord(currentTopicIndex): " + this.echo(OnlineAgendaGrid.getRecord(currentTopicIndex)));
        							Log.logDebug("************ OnlineAgendaGrid: " + this.echo(OnlineAgendaGrid));
        
        							OnlineAgendaGrid.expandRecord(OnlineAgendaGrid.getRecord(currentTopicIndex));
        
        							Log.logDebug("************ OnlineAgendaGrid.getExpansionComponent: " + this.echo(OnlineAgendaGrid.getExpansionComponent(OnlineAgendaGrid.getRecord(currentTopicIndex))));
        
        							var issueSubGrid = OnlineAgendaGrid.getExpansionComponent(OnlineAgendaGrid.getRecord(currentTopicIndex));
        							if (issueSubGrid === null) {Log.logDebug("************ issueSubGrid is null.");}
        
        							issueSubGrid.canExpandRecords=true;
        							issueSubGrid.canExpandMultipleRecords=false;
        							issueSubGrid.expansionMode="related";
        							issueSubGrid.setData(issueResults);
        							issueSubGrid.draw();
        							Log.logDebug("************ issueSubGrid: " + this.echo(issueSubGrid));
        
        							for (currentIssueIndex = 0; currentIssueIndex < issueCount; currentIssueIndex++) {
        								var currentIssueRecord = {};
        								currentIssueRecord = issueResults[currentIssueIndex];
        								Log.logDebug("************ currentIssueIndex = " + currentIssueIndex + " of " + issueCount);
        								Log.logDebug("************ currentIssueRecord = issueResults[" + currentIssueIndex + "]: " + this.echo(currentIssueRecord));
        								if (issueArray.remove(currentIssueRecord)) {
        									Log.logDebug("************ IssueNumber: " + currentIssueRecord.IssueNumber + " removed from issueArray");
        								} else {
        									Log.logDebug("************ Error removing issue: " + this.echo(currentIssueRecord));
        								}
        
        								//currentIssueGridRecord = issueSubGrid.getRecord(currentIssueIndex);
        								//currentIssueGridRecord.detailDS = "IncompleteTask";
        							}   // end for loop
        						} else {
        							Log.logDebug("************ issueCount is zero");
        							//currentTopicRecord.setProperty("canExpand", false);
        						} 	// end if issueCount is zero
        					} else {
        						Log.logDebug("************ searchEnabled is false");
        						// currentTopicRecord.setProperty("canExpand", false);
        					} 	// end if currentTopicRecord.SearchEnabled
        				} // end for currentTopicIndex
        				Log.logDebug("************ done with all topics. Launching OnlineMeetingWindow");
        				OnlineMeetingWindow.setTitle("Project:" + Application.currentProjectNumber + " " + Application.currentMeetingName);
        				OnlineMeetingWindow.markForRedraw("grids populated");
        				OnlineMeetingWindow.show();
        			} else {
        				Log.logDebug("*********** No meeting topic records fetched for MeetingTypeID: " + Application.currentMeetingTypeID);
                        isc.say("No meeting topic records fetched for MeetingTypeID: " + Application.currentMeetingTypeID);
        			} // end if MeetingTopic.fetchData dsResponse.totalRows > 0
        		} else {
        			Log.logDebug("*********** Error fetching meeting topic records for MeetingTypeID: " + Application.currentMeetingTypeID);
                    isc.say("Error fetching meeting topic records for MeetingTypeID: " + Application.currentMeetingTypeID);
        		} // end if MeetingTopic.fetchData dsResponse.status >= 0
        		OnlineMeetingWindow.markForRedraw("grids populated");
        		Log.logDebug("************ end MeetingTopic.fetchData function");
        		Log.logDebug("************ OnlineAgendaGrid: " + this.echo(OnlineAgendaGrid));
        	} // end MeetingTopic.fetchData function
        );	// end MeetingTopic.fetchData call
        Log.logDebug("************ done with MeetingTopic.fetchData call");
        
        Log.logDebug("****END***END***END*** OnlineMeetingButton.Click");
        I can even see in the console below that the expanded component first is dumped with no data, and then later dumped after setData with the correct number of records.

        Code:
        16:15:25.005:TMR0:DEBUG:Log:************ ProjectIssue.applyFilter record count: 1 for {}
        16:15:25.005:TMR0:DEBUG:Log:************ ProjectIssue.applyFilter issueResults[zero]: {OriginatorName: "Lars P. Bear",
        CommunityID: 101,
        IssueTypeName: "Assumption",
        IssueStatus: "Open",
        LikelihoodID: 101,
        IssueTitle: "Quality L4 assumption",
        IssueNumber: 7,
        ImpactID: 102,
        GoalStatus: "Y",
        Created: Date(01/30/2013),
        Modified: Date(07/23/2012),
        OriginatorID: 101,
        ProjectID: 101,
        OwnerName: "Lars P. Bear",
        ProjectTitle: "SSN Suppression on checks for Universal ..."[54],
        Description: "A made up issue with category Quality, i..."[70],
        CategoryName: "Quality",
        ImpactName: "4-Serious",
        IssueID: 104,
        ProjectNumber: "7633",
        IssueTypeID: 102,
        CategoryID: 102,
        LikelihoodTitle: "5-Very Likely",
        OwnerID: 104,
        Private: false}
        16:15:25.005:TMR0:DEBUG:Log:************ OnlineAgendaGrid.getRecord(currentTopicIndex): {TopicTitle: "All Remaining Issues",
        TopicLeaderName: "Richard Bollinger",
        MeetingTypeID: 101,
        Created: Date(01/30/2013),
        CommunityID: 101,
        Modified: Date(07/23/2012),
        TopicNumber: 5,
        MeetingTopicID: 104,
        MeetingName: "Weekly Status Meeting",
        TopicLeaderID: 101,
        SearchEnabled: true,
        ProjectID: 101}
        16:15:25.010:TMR0:DEBUG:Log:************ OnlineAgendaGrid: ListGrid{ID: "OnlineAgendaGrid",
        autoDraw: false,
        dataSource: "MeetingTopic",
        overflow: "visible",
        fields: Array[9],
        showDetailFields: false,
        selectionType: "single",
        autoFetchData: false,
        canRemoveRecords: false,
        height: 612,
        autoFetchTextMatchStyle: "exact",
        members: Array[2],
        position: "absolute",
        className: "listGrid",
        width: 1121,
        left: 5,
        top: 5,
        vertical: true,
        children: Array[7],
        data: Array[5],
        parentElement: [PaneContainer ID:OnlineMeetingTabs_paneContainer],
        topElement: [Window ID:OnlineMeetingWindow],
        canExpandRecords: true,
        canExpandMultipleRecords: false,
        expansionMode: "related",
        childExpansionMode: "related",
        tabIndex: 5658,
        booleanTrueImage: "[SKINIMG]/DynamicForm/checked.png",
        booleanFalseImage: "[SKINIMG]/DynamicForm/unchecked.png",
        booleanPartialImage: "[SKINIMG]/DynamicForm/partialcheck.gif",
        booleanImageWidth: 15,
        booleanImageHeight: 15,
        originalFields: Array[0],
        completeFields: Array[9],
        canFreezeFields: true,
        defaultFieldState: "[{name:"TopicNumber",width:null},{name:"..."[274],
        header: [Toolbar ID:isc_Toolbar_3],
        sorter: [ImgButton ID:OnlineAgendaGrid_sorter],
        headers: Array[1],
        body: [GridBody ID:OnlineAgendaGrid_body],
        bodies: Array[1],
        dragScrollTarget: [GridBody ID:OnlineAgendaGrid_body],
        cacheOffsetCoords: true,
        zIndex: 204140,
        innerWidth: 1103,
        memberSizes: Array[2],
        selection: [Selection ID:OnlineAgendaGrid_selection],
        }
        16:15:25.044:TMR0:DEBUG:layout:OnlineAgendaGrid_expansionLayout_isc_OID_11:resizing[ListGrid ID:OnlineAgendaGrid_expansionRelated_isc_OID_10]: 1118w 
        16:15:25.069:TMR0:INFO:layout:OnlineAgendaGrid_expansionRelated_isc_OID_10:adding newMembers: [Toolbar ID:isc_Toolbar_10],[GridBody ID:OnlineAgendaGrid_expansionRelated_isc_OID_10_body] at position: 0
        16:15:25.070:TMR0:DEBUG:layout:OnlineAgendaGrid_expansionRelated_isc_OID_10:resizing [Toolbar ID:isc_Toolbar_10]: 1116w 
        16:15:25.071:TMR0:DEBUG:layout:OnlineAgendaGrid_expansionRelated_isc_OID_10:resizing [GridBody ID:OnlineAgendaGrid_expansionRelated_isc_OID_10_body]: 1116w 
        16:15:25.076:TMR0:DEBUG:layout:OnlineAgendaGrid_expansionRelated_isc_OID_10:new user width: 1100 for member [Toolbar ID:isc_Toolbar_10], oldSize: undefined reason: undefined
        16:15:25.076:TMR0:DEBUG:layout:OnlineAgendaGrid_expansionRelated_isc_OID_10:new user height: 21 for member [Toolbar ID:isc_Toolbar_10], oldSize: null reason: undefined
        16:15:25.086:TMR0:INFO:layout:isc_Toolbar_10:adding newMembers: [ImgButton ID:isc_ImgButton_34] at position: 0
        16:15:25.087:TMR0:DEBUG:layout:isc_Toolbar_10:resizing [ImgButton ID:isc_ImgButton_34]: 21h 
        16:15:25.102:TMR0:DEBUG:layout:isc_Toolbar_10:centering wrt visible breadth: 21
        16:15:25.104:TMR0:INFO:layout:isc_Toolbar_10:layoutChildren (reason: initial draw):
        layout specified size: 1100w x 21h
        drawn size: 1100w x 21h
        available size: 1100w (length) x 21h
           [ImgButton ID:isc_ImgButton_34]
              31 drawn length (resizeLength: 31) (policyLength: 31) (explicit size)
              21 drawn breadth (breadth policy: fill)
        
        16:15:25.106:TMR0:DEBUG:layout:OnlineAgendaGrid_expansionRelated_isc_OID_10:new field widths: 31
        16:15:25.115:TMR0:DEBUG:layout:OnlineAgendaGrid_expansionRelated_isc_OID_10:centering wrt visible breadth: 1116
        16:15:25.118:TMR0:INFO:layout:OnlineAgendaGrid_expansionRelated_isc_OID_10:layoutChildren (reason: initial draw):
        layout specified size: 1118w x 100h
        drawn size: 1118w x 100h
        available size: 1116w x 98h (length)
           [Toolbar ID:isc_Toolbar_10]
              21 drawn length (resizeLength: 21) (policyLength: 21) (explicit size)
              1100 drawn breadth (explicit size)
           [GridBody ID:OnlineAgendaGrid_expansionRelated_isc_OID_10_body]
              77 drawn length (resizeLength: 77) (policyLength: *) (no length specified)
              1116 drawn breadth (breadth policy: fill)
        
        16:15:25.129:TMR0:DEBUG:layout:OnlineAgendaGrid_expansionLayout_isc_OID_11:centering wrt visible breadth: 1118
        16:15:25.130:TMR0:INFO:layout:OnlineAgendaGrid_expansionLayout_isc_OID_11:layoutChildren (reason: initial draw):
        layout specified size: 1143w x 10h
        drawn size: 1143w x 100h
        available size: 1143w x 10h (length)[ListGrid ID:OnlineAgendaGrid_expansionRelated_isc_OID_10]
              100 drawn length (policyLength: 100) (inherent size)
              1118 drawn breadth (breadth policy: fill)
        
        16:15:25.194:TMR0:DEBUG:layout:OnlineAgendaGrid_expansionLayout_isc_OID_11:resizing[ListGrid ID:OnlineAgendaGrid_expansionRelated_isc_OID_10] (drawn): 1078w 
        16:15:25.199:TMR0:DEBUG:layout:isc_Toolbar_10:centering wrt visible breadth: 21
        16:15:25.199:TMR0:INFO:layout:isc_Toolbar_10:layoutChildren (reason: resized):
        layout specified size: 1060w x 21h
        drawn size: 1060w x 21h
        available size: 1060w (length) x 21h
           [ImgButton ID:isc_ImgButton_34]
              31 drawn length (resizeLength: 31) (policyLength: 31) (explicit size)
              21 drawn breadth (breadth policy: fill)
        
        16:15:25.200:TMR0:DEBUG:layout:OnlineAgendaGrid_expansionRelated_isc_OID_10:new user width: 1060 for member [Toolbar ID:isc_Toolbar_10], oldSize: 1100 reason: undefined
        16:15:25.201:TMR0:DEBUG:layout:OnlineAgendaGrid_expansionRelated_isc_OID_10:new field widths: 31
        16:15:25.202:TMR0:DEBUG:layout:OnlineAgendaGrid_expansionRelated_isc_OID_10:resizing [GridBody ID:OnlineAgendaGrid_expansionRelated_isc_OID_10_body] (drawn): 1076w 77h
        16:15:25.211:TMR0:DEBUG:layout:OnlineAgendaGrid_expansionRelated_isc_OID_10:centering wrt visible breadth: 1076
        16:15:25.212:TMR0:INFO:layout:OnlineAgendaGrid_expansionRelated_isc_OID_10:layoutChildren (reason: resized):
        layout specified size: 1078w x 100h
        drawn size: 1118w x 100h
        available size: 1076w x 98h (length)
           [Toolbar ID:isc_Toolbar_10]
              21 drawn length (resizeLength: 21) (policyLength: 21) (explicit size)
              1060 drawn breadth (explicit size)
           [GridBody ID:OnlineAgendaGrid_expansionRelated_isc_OID_10_body]
              77 drawn length (resizeLength: 77) (policyLength: *) (no length specified)
              1076 drawn breadth (breadth policy: fill)
        
        16:15:25.215:TMR0:DEBUG:layout:OnlineAgendaGrid_expansionLayout_isc_OID_11:centering wrt visible breadth: 1118
        16:15:25.216:TMR0:INFO:layout:OnlineAgendaGrid_expansionLayout_isc_OID_11:layoutChildren (reason: resized):
        layout specified size: 1103w x 10h
        drawn size: 1143w x 100h
        available size: 1103w x 10h (length)[ListGrid ID:OnlineAgendaGrid_expansionRelated_isc_OID_10]
              100 drawn length (policyLength: 100) (inherent size)
              1078 drawn breadth (breadth policy: fill)
        
        16:15:25.234:TMR0:DEBUG:Log:************ OnlineAgendaGrid.getExpansionComponent: ListGrid{autoDraw: false,
        creator:[ListGrid ID:OnlineAgendaGrid],
        ID: "OnlineAgendaGrid_expansionRelated_isc_OI..."[44],
        width: 1143,
        autoFitData: "vertical",
        autoFitMaxRecords: 4,
        canExpandRecords: true,
        expansionMode: "related",
        canEdit: false,
        position: "absolute",
        className: "listGrid",
        height: 100,
        members: Array[0],
        vertical: true,
        children: Array[0],
        fixedRecordHeights: false,
        virtualScrolling: true,
        overflow: "visible",
        data: Array[0],
        selection: [Selection ID:OnlineAgendaGrid_expansionRelated_isc_OID_12_selection],
        selectionType: "multiple"}
        16:15:25.261:TMR0:INFO:layout:OnlineAgendaGrid_expansionRelated_isc_OID_13:adding newMembers: [Toolbar ID:isc_Toolbar_11],[GridBody ID:OnlineAgendaGrid_expansionRelated_isc_OID_13_body] at position: 0
        16:15:25.261:TMR0:DEBUG:layout:OnlineAgendaGrid_expansionRelated_isc_OID_13:resizing [Toolbar ID:isc_Toolbar_11]: 1141w 
        16:15:25.262:TMR0:DEBUG:layout:OnlineAgendaGrid_expansionRelated_isc_OID_13:resizing [GridBody ID:OnlineAgendaGrid_expansionRelated_isc_OID_13_body]: 1141w 
        16:15:25.272:TMR0:DEBUG:layout:OnlineAgendaGrid_expansionRelated_isc_OID_13:new user width: 1125 for member [Toolbar ID:isc_Toolbar_11], oldSize: undefined reason: undefined
        16:15:25.273:TMR0:DEBUG:layout:OnlineAgendaGrid_expansionRelated_isc_OID_13:new user height: 21 for member [Toolbar ID:isc_Toolbar_11], oldSize: null reason: undefined
        16:15:25.295:TMR0:INFO:layout:isc_Toolbar_11:adding newMembers: [ImgButton ID:isc_ImgButton_35] at position: 0
        16:15:25.296:TMR0:DEBUG:layout:isc_Toolbar_11:resizing [ImgButton ID:isc_ImgButton_35]: 21h 
        16:15:25.315:TMR0:DEBUG:layout:isc_Toolbar_11:centering wrt visible breadth: 21
        16:15:25.316:TMR0:INFO:layout:isc_Toolbar_11:layoutChildren (reason: initial draw):
        layout specified size: 1125w x 21h
        drawn size: 1125w x 21h
        available size: 1125w (length) x 21h
           [ImgButton ID:isc_ImgButton_35]
              31 drawn length (resizeLength: 31) (policyLength: 31) (explicit size)
              21 drawn breadth (breadth policy: fill)
        
        16:15:25.319:TMR0:DEBUG:layout:OnlineAgendaGrid_expansionRelated_isc_OID_13:new field widths: 31
        16:15:25.331:TMR0:DEBUG:layout:OnlineAgendaGrid_expansionRelated_isc_OID_13:centering wrt visible breadth: 1141
        16:15:25.334:TMR0:INFO:layout:OnlineAgendaGrid_expansionRelated_isc_OID_13:layoutChildren (reason: initial draw):
        layout specified size: 1143w x 100h
        drawn size: 1143w x 100h
        available size: 1141w x 98h (length)
           [Toolbar ID:isc_Toolbar_11]
              21 drawn length (resizeLength: 21) (policyLength: 21) (explicit size)
              1125 drawn breadth (explicit size)
           [GridBody ID:OnlineAgendaGrid_expansionRelated_isc_OID_13_body]
              77 drawn length (resizeLength: 77) (policyLength: *) (no length specified)
              1141 drawn breadth (breadth policy: fill)
        
        16:15:25.350:TMR0:DEBUG:Log:************ issueSubGrid: ListGrid{autoDraw: false,
        creator:[ListGrid ID:OnlineAgendaGrid],
        ID: "OnlineAgendaGrid_expansionRelated_isc_OI..."[44],
        width: 1143,
        autoFitData: "vertical",
        autoFitMaxRecords: 4,
        canExpandRecords: true,
        expansionMode: "related",
        canEdit: false,
        position: "absolute",
        className: "listGrid",
        height: 100,
        members: Array[2],
        vertical: true,
        children: Array[4],
        fixedRecordHeights: false,
        virtualScrolling: true,
        overflow: "visible",
        data: Array[1],
        selectionType: "multiple",
        canExpandMultipleRecords: false,
        selection: [Selection ID:OnlineAgendaGrid_expansionRelated_isc_OID_13_selection],
        booleanTrueImage: "[SKINIMG]/DynamicForm/checked.png",
        booleanFalseImage: "[SKINIMG]/DynamicForm/unchecked.png",
        booleanPartialImage: "[SKINIMG]/DynamicForm/partialcheck.gif",
        booleanImageWidth: 15,
        booleanImageHeight: 15,
        fields: Array[1],
        originalFields: Array[0],
        completeFields: Array[1],
        defaultFieldState: "[]",
        header: [Toolbar ID:isc_Toolbar_11],
        sorter: [ImgButton ID:OnlineAgendaGrid_expansionRelated_isc_OID_13_sorter],
        headers: Array[1],
        body: [GridBody ID:OnlineAgendaGrid_expansionRelated_isc_OID_13_body],
        bodies: Array[1],
        dragScrollTarget: [GridBody ID:OnlineAgendaGrid_expansionRelated_isc_OID_13_body],
        cacheOffsetCoords: true,
        zIndex: 205112,
        tabIndex: 6678,
        innerWidth: 1125,
        memberSizes: Array[2],
        }
        16:15:25.350:TMR0:DEBUG:Log:************ currentIssueIndex = 0 of 1
        16:15:25.351:TMR0:DEBUG:Log:************ currentIssueRecord = issueResults[0]: {OriginatorName: "Lars P. Bear",
        CommunityID: 101,
        IssueTypeName: "Assumption",
        IssueStatus: "Open",
        LikelihoodID: 101,
        IssueTitle: "Quality L4 assumption",
        IssueNumber: 7,
        ImpactID: 102,
        GoalStatus: "Y",
        Created: Date(01/30/2013),
        Modified: Date(07/23/2012),
        OriginatorID: 101,
        ProjectID: 101,
        OwnerName: "Lars P. Bear",
        ProjectTitle: "SSN Suppression on checks for Universal ..."[54],
        Description: "A made up issue with category Quality, i..."[70],
        CategoryName: "Quality",
        ImpactName: "4-Serious",
        IssueID: 104,
        ProjectNumber: "7633",
        IssueTypeID: 102,
        CategoryID: 102,
        LikelihoodTitle: "5-Very Likely",
        OwnerID: 104,
        Private: false}
        16:15:25.351:TMR0:DEBUG:Log:************ IssueNumber: 7 removed from issueArray
        16:15:25.351:TMR0:DEBUG:Log:************ currentTopicRecord: {TopicTitle: "All Remaining Issues, again",
        TopicLeaderName: "Richard Bollinger",
        MeetingTypeID: 101,
        Created: Date(01/30/2013),
        CommunityID: 101,
        Modified: Date(07/23/2012),
        TopicNumber: 9,
        MeetingTopicID: 105,
        MeetingName: "Weekly Status Meeting",
        TopicLeaderID: 101,
        SearchEnabled: true,
        ProjectID: 101}
        16:15:25.351:TMR0:DEBUG:Log:************ ProjectIssue.applyFilter record count: 0 for {}
        16:15:25.351:TMR0:DEBUG:Log:************ issueCount is zero
        16:15:25.351:TMR0:DEBUG:Log:************ done with all topics. Launching OnlineMeetingWindow
        16:15:25.533:TMR0:DEBUG:Log:************ end MeetingTopic.fetchData function
        16:15:25.539:TMR0:DEBUG:Log:************ OnlineAgendaGrid: ListGrid{ID: "OnlineAgendaGrid",
        autoDraw: false,
        dataSource: "MeetingTopic",
        overflow: "visible",
        fields: Array[9],
        showDetailFields: false,
        selectionType: "single",
        autoFetchData: false,
        canRemoveRecords: false,
        height: 612,
        autoFetchTextMatchStyle: "exact",
        members: Array[2],
        position: "absolute",
        className: "listGrid",
        width: 1121,
        left: 5,
        top: 5,
        vertical: true,
        children: Array[7],
        data: Array[5],
        parentElement: [PaneContainer ID:OnlineMeetingTabs_paneContainer],
        topElement: [Window ID:OnlineMeetingWindow],
        canExpandRecords: true,
        canExpandMultipleRecords: false,
        expansionMode: "related",
        childExpansionMode: "related",
        tabIndex: 5658,
        booleanTrueImage: "[SKINIMG]/DynamicForm/checked.png",
        booleanFalseImage: "[SKINIMG]/DynamicForm/unchecked.png",
        booleanPartialImage: "[SKINIMG]/DynamicForm/partialcheck.gif",
        booleanImageWidth: 15,
        booleanImageHeight: 15,
        originalFields: Array[0],
        completeFields: Array[9],
        canFreezeFields: true,
        defaultFieldState: "[{name:"TopicNumber",width:null},{name:"..."[274],
        header: [Toolbar ID:isc_Toolbar_3],
        sorter: [ImgButton ID:OnlineAgendaGrid_sorter],
        headers: Array[1],
        body: [GridBody ID:OnlineAgendaGrid_body],
        bodies: Array[1],
        dragScrollTarget: [GridBody ID:OnlineAgendaGrid_body],
        cacheOffsetCoords: true,
        zIndex: 204140,
        innerWidth: 1103,
        memberSizes: Array[2],
        selection: [Selection ID:OnlineAgendaGrid_selection],
        }
        16:15:26.026:TMR4:WARN:Log:TypeError: this.getDataSource() is undefined
            Canvas.fetchRelatedData(_1=>{Obj},  _2=>"MeetingTopic")
            [c]Class.fireCallback(_1=>{Obj},  _2=>undef,  _3=>[object Array],  _4=>{Obj},  _5=>true)
            Timer._fireTimeout("$ir860")
            unnamed()
            unnamed() @ 
        
        16:15:26.029:TMR3:WARN:Log:TypeError: this.getDataSource() is null
            Canvas.fetchRelatedData(_1=>{Obj},  _2=>"MeetingTopic")
            [c]Class.fireCallback(_1=>{Obj},  _2=>undef,  _3=>[object Array],  _4=>{Obj},  _5=>true)
            Timer._fireTimeout("$ir869")
            unnamed()
            unnamed() @ 
        
        16:15:26.032:TMR4:WARN:Log:TypeError: this.getDataSource() is undefined
            Canvas.fetchRelatedData(_1=>{Obj},  _2=>"MeetingTopic")
            [c]Class.fireCallback(_1=>{Obj},  _2=>undef,  _3=>[object Array],  _4=>{Obj},  _5=>true)
            Timer._fireTimeout("$ir870")
            unnamed()
            unnamed() @ 
        
        16:15:26.033:TMR6:WARN:Log:TypeError: this.getDataSource() is undefined
            Canvas.fetchRelatedData(_1=>{Obj},  _2=>"MeetingTopic")
            [c]Class.fireCallback(_1=>{Obj},  _2=>undef,  _3=>[object Array],  _4=>{Obj},  _5=>true)
            Timer._fireTimeout("$ir873")
            unnamed()
            unnamed() @ 
        
        16:15:26.036:TMR5:WARN:Log:TypeError: this.getDataSource() is null
            Canvas.fetchRelatedData(_1=>{Obj},  _2=>"MeetingTopic")
            [c]Class.fireCallback(_1=>{Obj},  _2=>undef,  _3=>[object Array],  _4=>{Obj},  _5=>true)
            Timer._fireTimeout("$ir881")
            unnamed()
            unnamed() @ 
        
        16:15:26.038:TMR6:WARN:Log:TypeError: this.getDataSource() is undefined
            Canvas.fetchRelatedData(_1=>{Obj},  _2=>"MeetingTopic")
            [c]Class.fireCallback(_1=>{Obj},  _2=>undef,  _3=>[object Array],  _4=>{Obj},  _5=>true)
            Timer._fireTimeout("$ir882")
            unnamed()
            unnamed() @ 
        
        16:15:26.039:TMR7:WARN:Log:TypeError: this.getDataSource() is undefined
            Canvas.fetchRelatedData(_1=>{Obj},  _2=>"MeetingTopic")
            [c]Class.fireCallback(_1=>{Obj},  _2=>undef,  _3=>[object Array],  _4=>{Obj},  _5=>true)
            Timer._fireTimeout("$ir883")
            unnamed()
            unnamed() @ 
        
        16:15:26.043:TMR5:WARN:Log:TypeError: this.getDataSource() is null
            Canvas.fetchRelatedData(_1=>{Obj},  _2=>"MeetingTopic")
            [c]Class.fireCallback(_1=>{Obj},  _2=>undef,  _3=>[object Array],  _4=>{Obj},  _5=>true)
            Timer._fireTimeout("$ir891")
            unnamed()
            unnamed() @ 
        
        16:15:26.045:TMR6:WARN:Log:TypeError: this.getDataSource() is undefined
            Canvas.fetchRelatedData(_1=>{Obj},  _2=>"MeetingTopic")
            [c]Class.fireCallback(_1=>{Obj},  _2=>undef,  _3=>[object Array],  _4=>{Obj},  _5=>true)
            Timer._fireTimeout("$ir892")
            unnamed()
            unnamed() @ 
        
        16:15:26.045:TMR7:WARN:Log:TypeError: this.getDataSource() is undefined
            Canvas.fetchRelatedData(_1=>{Obj},  _2=>"MeetingTopic")
            [c]Class.fireCallback(_1=>{Obj},  _2=>undef,  _3=>[object Array],  _4=>{Obj},  _5=>true)
            Timer._fireTimeout("$ir893")
            unnamed()
            unnamed() @ 
        
        16:15:26.057:TMR0[E]:DEBUG:layout:OnlineAgendaGrid_expansionLayout_isc_OID_11:centering wrt visible breadth: 1078
        16:15:26.058:TMR0[E]:INFO:layout:OnlineAgendaGrid_expansionLayout_isc_OID_11:layoutChildren (reason: memberResized: (-40,0): OnlineAgendaGrid_expansionRelated_isc_OID_10):
        layout specified size: 1103w x 10h
        drawn size: 1103w x 100h
        available size: 1103w x 10h (length)[ListGrid ID:OnlineAgendaGrid_expansionRelated_isc_OID_10]
              100 drawn length (policyLength: 100) (inherent size)
              1078 drawn breadth (breadth policy: fill)
        
        16:15:26.062:TMR5:WARN:Log:TypeError: this.getDataSource() is null
            Canvas.fetchRelatedData(_1=>{Obj},  _2=>"MeetingTopic")
            [c]Class.fireCallback(_1=>{Obj},  _2=>undef,  _3=>[object Array],  _4=>{Obj},  _5=>true)
            Timer._fireTimeout("$ir901")
            unnamed()
            unnamed() @ 
        
        16:15:26.062:TMR6:WARN:Log:TypeError: this.getDataSource() is undefined
            Canvas.fetchRelatedData(_1=>{Obj},  _2=>"MeetingTopic")
            [c]Class.fireCallback(_1=>{Obj},  _2=>undef,  _3=>[object Array],  _4=>{Obj},  _5=>true)
            Timer._fireTimeout("$ir902")
            unnamed()
            unnamed() @
        This is not just a bonehead thinko. I am at a loss to explain the this.getDataSource() is null/undefined pattern. I turned off the bottom level grid for the time being that would look for 'IncompeteTask's.

        I hope I do not need a new approach.

        Rick
        Attached Files

        Comment


          #5
          Hi Rick
          The problem here is that you have expansionMode set to "related" which turns on a number of built-in behaviors, causing the expandRecord() method to automatically create a listGrid with a dataSource derived from the recordDetailDS as described here.

          This is done when 'expandRecord()' fires, which also handles drawing the inner grid, and issuing a fetch request.

          This is the logic which is throwing errors in your example - the related data fetch assumes the dataSource will be populated and crashes when it isn't.

          It looks like your code does modify the detailDS at the record-level, but this is done after the expandRecord() call, so by then the expansion component has already been created (without having found a dataSource).
          Also your logic explicitly calls "setData()" on the expansion-component (the inner grid), but this doesn't prevent the built in logic from attempting to perform a fetch (leading to the reported error).

          In short - the framework wasn't set up to support the kind of overrides you've got in place here.

          It seems like what you should be doing is overriding "getExpansionComponent()" to handle your custom use case.
          You can use this method to create your own custom ListGrid with the appropriate dataSource and data based on the record being expanded.

          Regards
          Isomorphic Software

          Comment


            #6
            First, I want to express my appreciation for your expert analysis and thoughtful reply. I have completely reconfigured my approach. I created the getExpansionComponent override as a named function. I create the ProjectIssue clientOnly dataSource on a prior window to avoid the extra callback level.

            In the result below showing the same error I get, can be seen the grid I create and return with its two records.

            Code:
            13:59:39.234:TMR5:DEBUG:Log:************ issueResults for setData: 2
            13:59:39.242:TMR5:DEBUG:Log:************ returning expansion component: ListGrid{autoDraw: false,
            canEdit: false,
            showDetailFields: false,
            autoFetchData: false,
            canRemoveRecords: false,
            fields: Array[10],
            members: Array[0],
            ID: "isc_ListGrid_0",
            position: "absolute",
            className: "listGrid",
            width: 200,
            height: 100,
            vertical: true,
            children: Array[0],
            data: Array[2],
            selectionType: "multiple",
            selection: [Selection ID:isc_ListGrid_0_selection]}
            13:59:39.268:TMR5:WARN:Log:TypeError: _6 is undefined
                ListGrid.addEmbeddedComponent(_1=>{Obj},  _2=>{Obj},  _3=>0)
                ListGrid.expandRecord(_1=>{Obj})
                unnamed({Obj}, [object Array], {Obj})
                [c]Class.fireCallback(_1=>function (dsResponse, data, dsRequest),  _2=>"dsResponse,data,dsRequest",  _3=>[object Array],  _4=>{Obj},  _5=>undef)
                [c]Class.fireCallback(_1=>function (dsResponse, data, dsRequest),  _2=>"dsResponse,data,dsRequest",  _3=>[object Array])
                DataSource.fireResponseCallbacks({Obj}, {Obj}, {Obj}, {Obj})
                DataSource._completeResponseProcessing({Obj}, {Obj}, {Obj}, {Obj}, {Obj})
                DataSource._handleClientOnlyReply({Obj}, {Obj}, {Obj})
                [c]Class.fireCallback(_1=>{Obj},  _2=>"rpcResponse,data,rpcRequest",  _3=>[object Array],  _4=>{Obj},  _5=>undef)
                [c]Class.fireCallback(_1=>{Obj},  _2=>"rpcResponse,data,rpcRequest",  _3=>[object Array])
                [c]RPCManager.fireReplyCallback(_1=>{Obj},  _2=>{Obj},  _3=>{Obj},  _4=>{Obj})
                [c]RPCManager.fireReplyCallbacks(_1=>{Obj},  _2=>{Obj})
                [c]RPCManager.performOperationReply(_1=>{Obj},  _2=>{Obj})
                RPCManager._performTransactionReply(31)
                [c]Class.fireCallback(_1=>{Obj},  _2=>undef,  _3=>[object Array],  _4=>{Obj},  _5=>true)
                Timer._fireTimeout("$ir736")
                unnamed()
                unnamed() @
            In the button code below I explicitly create the topicGrid. You can see its properties. I have removed as many of them that I thought would invoke the framework. Yet you can see I have not succeeded. I still get the same error. I removed the third level grid entirely. I checked and expansionMode defaults to null. I have commented out the sole detailDS property.

            I wish the error would give up a clue as to what datasource is being invoked. The error happends during the expandRecord call. A good grid gets returned, but the competition is too much.

            Code:
            Log.setPriority("Log", 5);
            Log.logDebug("***getExpansionComponent override version******** OnlineMeetingButton.Click");
            
            OnlineMeetingWindow.autoDraw = false;
            //topicGrid.autoDraw = false;
            
            if (!window.OnlineMeetingForm) {
            	var message = "Component ID \"OnlineMeetingForm\", target of action \"Edit rec\" does not exist";
            	isc.Log.logWarn(message);
            	if (isc.designTime) {
            		isc.say(message);
            	}
            }
            
            OnlineMeetingForm.setValue("MeetingName", Application.currentMeetingName);
            OnlineMeetingForm.setValue("TeleconferenceInfo", Application.currentTeleconferenceInfo);
            
            var IssueDuplicateList = new Array;
            
            function duplicateIssue (issueNumber) {
            	var dup;
            	if (IssueDuplicateList.indexOf(issueNumber) < 0 ) {
            		IssueDuplicateList.push(issueNumber);
            		dup = false;
            	} else {
            		dup = true;
            	}
            	return dup;
            }
            
            function getIssueGrid (tRec) {
            	Log.logDebug("************ creating expansion component for: " + this.echo(tRec));
            	var issueGrid = isc.ListGrid.create({
            		autoDraw:false,
            	//	dataSource:"Issue",
            	//	detailDS:"IncompleteTask",
            		canEdit:false,
            	//	canExpandRecords:true,
            	//	canExpandMultipleRecords:false,
            	//	expansionMode:"related",
            		showDetailFields:false,
            		autoFetchData:false,
            		canRemoveRecords:false,
            		fields:[
            			{
            				name:"IssueNumber",
            				title:"Number",
            				width:"5%"
            			},
            			{
            				name:"IssueTitle",
            				title:"Issue Title",
            				width:"*"
            			},
            			{
            				name:"Category",
            				title:"Category",
            				width:"9%",
            				valueField:"CategoryID",
            				displayField:"CategoryName"
            			},
            			{
            				name:"IssueType",
            				title:"Issue Type",
            				width:"7%",
            				valueField:"IssueTypeID",
            				displayField:"IssueTypeName"
            			},
            			{
            				name:"Impact",
            				title:"Impact",
            				width:"8%",
            				valueField:"ImpactID",
            				displayField:"ImpactName"
            			},
            			{
            				name:"Owner",
            				title:"Owner",
            				width:"10%",
            				valueField:"OwnerID",
            				displayField:"OwnerName"
            			},
            			{
            				name:"Private",
            				title:"Private",
            				width:"5%",
            				type:"boolean"
            			},
            			{
            				name:"IssueStatus",
            				title:"Status",
            				width:"7%"
            			},
            			{
            				name:"ClosedDate",
            				title:"Closed",
            				width:"7%"
            			},
            			{
            				name:"IssueDueDate",
            				title:"Due",
            				width:"7%"
            			}
            		],
            		recordDoubleClick:"	if ( this.anySelected() ) {\n\n		var rec = this.getSelectedRecord();\n\n		Application.currentIssueID = rec.IssueID;\n		Application.currentIssueNumber = rec.IssueNumber;\n		Application.currentIssueTitle = rec.IssueTitle;\n		Application.currentIssueStatus = rec.IssueStatus;\n		Application.currentIssueOwnerID = rec.OwnerID;\n		Application.currentIssueID = rec.IssueID;\n		Application.currentIssueOwnerID = rec.OwnerID;\n		Application.currentIssueOwnerName = rec.IssueOwner;\n		Application.currentIssuePrivate = rec.Private;\n		Application.currentIssueProjectID = rec.ProjectID;\n    	Application.currentProjectID = rec.ProjectID;\n\n		//alert(\"ProjectID=\" + Application.currentProjectID );\n\n		if (!window.IssueForm) {\n			var message = \"Component ID \\\"IssueForm\\\", target of action \\\"Edit Record\\\" does not exist\";\n			isc.Log.logWarn(message);\n			if (isc.designTime) {\n				isc.say(message);\n			}\n		}\n		IssueForm.editRecord(rec);\n\n		IssueWindow.show();\n		IssueWindow.setTitle(\"Issue# \" + rec.IssueNumber + \": \" + rec.IssueTitle);\n\n	} else { this.setDisabled(true) ; }"
            
            	});	// END issueGrid create
            
            	var issueCriteria = { };
            	if (!(typeof tRec.IssueTypeID === "undefined")) {
            		issueCriteria.IssueTypeID = String(tRec.IssueTypeID);
            	}
            	if (!(typeof tRec.CategoryID === "undefined")) {
            		issueCriteria.CategoryID = String(tRec.CategoryID) ;
            	}
            	if (!(typeof tRec.ImpactID === "undefined")) {
            		issueCriteria.ImpactID = String(tRec.ImpactID) ;
            	}
            	Log.logDebug("************ fetching project issues with: " + this.echo(issueCriteria));
            
            	var issueResults = [];
            	issueResults = ProjectIssue.applyFilter(ProjectIssue.cacheData, issueCriteria);
            
            	var totalIssues = issueResults.length;
            	if (totalIssues > 0) {
            		Log.logDebug("************ issueResults[zero]: " + this.echo(issueResults[0]));
            		var currentIssueIndex = 0;
            		while (totalIssues > 0 && currentIssueIndex < totalIssues ) {
            			var rec = {};
            			rec = issueResults[currentIssueIndex];
            			Log.logDebug("************ currentIssueIndex = " + currentIssueIndex + " of " + totalIssues);
            			Log.logDebug("************ rec = issueResults[" + currentIssueIndex + "]: " + this.echo(rec));
            			if (duplicateIssue(rec.IssueNumber)) {
            				Log.logDebug("************ Duplicate IssueNumber: " + rec.IssueNumber + " at " + currentIssueIndex + " of " + totalIssues);
            				issueResults.splice(currentIssueIndex, 1);
            			} else {
            				currentIssueIndex++;
            			}
            			totalIssues = issueResults.length;
            		}
            		if (issueResults.length > 0) {
            			Log.logDebug("************ issueResults for setData: " + issueResults.length );
            			issueGrid.setData(issueResults);
            			Log.logDebug("************ issueResults for setData: " + issueResults.length );
            		} else {
            			Log.logDebug("************ issueResults.length = zero from duplicate check");
            			issueGrid = null;
            		} 	// end if length is zero from duplicate check
            	} else {
            		Log.logDebug("************ totalIssues = 0");
            		issueGrid = null;
            	} // end if (totalIssues > 0)
            Log.logDebug("************ returning expansion component: " + this.echo(issueGrid));
            return issueGrid;
            }	// END getIssueGrid function
            
            Application.currentProjectIssueCount = ProjectIssue.cacheData.getLength();
            if (Application.currentProjectIssueCount > 0) {
            	Log.logDebug("************ ProjectIssue.getClientOnlyDataSource call with recordcount " +  Application.currentProjectIssueCount);
            } else {
            	Log.logDebug("************ No project issue records fetched for ProjectID: " + Application.currentProjectID);
            	isc.say("No project issue records fetched for ProjectID: " + Application.currentProjectID);
            }   // end if (ProjectIssue.cacheData.getLenth() > 0)
            
            var topicGrid = isc.ListGrid.create({
            	ID:"OnlineAgendaGrid",
            	autoDraw:false,
            	dataSource:"MeetingTopic",
            	overflow:"visible",
            	showDetailFields:false,
            	canEdit:false,
            	selectionType:"single",
            	autoFetchData:false,
            	canRemoveRecords:false,
            	height:"100%",
            	canExpandRecords:true,
            	canExpandMultipleRecords:false,
            	getExpansionComponent: getIssueGrid,
            	fields:[
            		{
            			align:"center",
            			name:"TopicNumber",
            			title:"Order",
            			width:"5%"
            		},
            		{
            			name:"TopicTitle",
            			title:"Title",
            			width:"*"
            		},
            		{
            			name:"TopicLeaderID",
            			title:"Leader",
            			width:"10%",
            			valueField:"TopicLeaderID",
            			displayField:"TopicLeaderName"
            		},
            		{
            			name:"Session Type",
            			title:"Session Type",
            			width:"10%"
            		},
            		{
            			name:"Session Time",
            			title:"SessionTime",
            			width:"10%"
            		},
            		{
            			name:"ExpectedResults",
            			title:"Expected Results",
            			width:"*"
            		},
            		{
            			name:"SearchEnabled",
            			title:"SearchEnabled",
            			width:1,
            			showIf:"true"
            		},
            		{
            			name:"IssueTypeID",
            			title:"IssueTypeID",
            			width:1,
            			showIf:"true",
            			detail:true
            		},
            		{
            			name:"CategoryID",
            			title:"CategoryID",
            			width:1,
            			showIf:"true",
            			detail:true
            		},
            		{
            			name:"ImpactID",
            			title:"ImpactID",
            			width:1,
            			showIf:"true",
            			detail:true
            		}
            	],
            	rowDoubleClick:"Log.setPriority(\"Log\", 5);\nLog.logDebug(\"********************** OnlineAgendaGrid.recordDoubleClick\");\n\n    var rec = this.getSelectedRecord();\n    Application.currentMeetingTopicID = rec.MeetingTopicID;\n    Application.currentTopicNumber = rec.TopicNumber;\n    Application.currentTopicTitle = rec.TopicTitle;\n\n    Application.currentMeetingTypeID = rec.MeetingTypeID;\n    Application.currentMeetingName = rec.MeetingName;\n\n    Application.currentProjectID = rec.ProjectID;\n    Application.currentProjectNumber = rec.ProjectNumber;\n    Application.currentProjectTitle = rec.ProjectTitle;\n\n    //alert(\"MeetingTopicID=\" + Application.currentMeetingTopicID );\n\n    if (!window.MeetingTopicForm) {\n        var message = \"Component ID \\\"MeetingTopicForm\\\", target of action \\\"Edit Record\\\" does not exist\";\n        isc.Log.logWarn(message);\n        if (isc.designTime) {\n            isc.say(message);\n        }\n    }\n    MeetingTopicForm.editRecord(rec);\n\n    if (!window.MeetingTopicWindow) {\n        var message = \"Component ID \\\"MeetingTopicWindow\\\", target of action \\\"Show\\\" does not exist\";\n        isc.Log.logWarn(message);\n        if (isc.designTime) {\n            isc.say(message);\n        }\n    }\n    MeetingTopicWindow.setTitle(rec.MeetingName + \" Topic \" + rec.TopicNumber + \": \" + rec.TopicTitle);\n    MeetingTopicWindow.show();\n\n\nLog.logDebug(\"***END***END***END*** OnlineAgendaGrid.recordDoubleClick\")"
            });	// END topicGrid create
            
            topicGrid.fetchData( { "MeetingTypeID" : Application.currentMeetingTypeID },
            	function (dsResponse, data, dsRequest) {
            		Log.logDebug("************ meeting topic records fetched: " + this.echo(dsResponse));
            		if (dsResponse.status >= 0) {
            			if (dsResponse.totalRows > 0) {
            				var totalTopics = topicGrid.getTotalRows();
            				for (var currentTopicIndex = 0; currentTopicIndex < totalTopics; currentTopicIndex++) {
            					topicRecord = topicGrid.getRecord(currentTopicIndex);
            					if (topicRecord.SearchEnabled) {
            						Log.logDebug("************ expanding topic record: " + this.echo(topicRecord));
            						topicGrid.expandRecord(topicRecord);
            						Log.logDebug("************ topic record expanded: " + this.echo(topicRecord));
            					} else {
            						Log.logDebug("************ searchEnabled is false");		//currentTopicRecord.canExpand(false);
            					}	// end if SearchEnabled
            				}	// end topic for loop
            				Log.logDebug("************ done with topics");
            				topicGrid.draw(); //topicGrid.markForRedraw("topics populated)");
            				OnlineMeetingWindow.setTitle("Project:" + Application.currentProjectNumber + " " + Application.currentMeetingName);
            				OnlineMeetingWindow.markForRedraw("grids populated");
            				OnlineMeetingWindow.show();
            			} else {
            				isc.say("No meeting topic records fetched for MeetingTypeID: " + Application.currentMeetingTypeID);
            			}	// end if (dsResponse.totalRows > 0)
            		} else {
            			Log.logError("************ Error fetching meeting topic records for MeetingTypeID: " + Application.currentMeetingTypeID);
            			isc.say("Error fetching meeting topic records for MeetingTypeID: " + Application.currentMeetingTypeID);
            		}
            	},	// end of topicGrid.fetchData function
            	{ showPrompt: false } // requestProperties
            );	// end topicGrid.fetchData call
            
            Log.logDebug("****END***END***END*** OnlineMeetingButton.Click");
            Thanks very much.

            Rick

            Comment


              #7
              I don't know if this is important. I see DataSource._handleClientOnlyReply in the stack dump. The only ClientOnly dataSource in the vicinity is ProjectIssue. But, the records that are used to setData are passed through a separate Array issueResults. That is where duplicates are deleted. It would not be clear to me how my returned issueGrid became polluted with ProjectIssue cooties.

              Rick

              Comment


                #8
                OK. Not knowing where the problem was, I decided to establish a ground condition. I commented out the expandRecord call.

                I failed. You can see in the console log below that ends with "TypeError: _1 is null". The log also lights up highlighting search for OnlineAgendaGrid. It finds things like this:
                TMR8:WARN:ListGrid:OnlineAgendaGrid:Attempt to access destroyed widget in the DOM - destroy() called at invalid time (eg: mid-draw) or invalid method called on destroy()d widget."
                Which leads me to believe that the OnlineAgendaGrid.destroy() call was incomplete and left a bunch of named DOM fragments laying around. That defeats my ploy to destroy the existing OnlineAgendaGrid and all its "related" cooties.

                Code:
                10:13:54.419:MUP0:DEBUG:Log:***getExpansionComponent override version******** OnlineMeetingButton.Click
                10:13:54.420:MUP0:DEBUG:Log:************ ProjectIssue.getClientOnlyDataSource call with recordcount 9
                10:13:54.426:MUP0:DEBUG:Log:************ OnlineAgendaGrid destroyed.
                10:13:54.484:MUP0:DEBUG:layout:isc_globalPrompt_messageStack:centering wrt visible breadth: 68
                10:13:54.485:MUP0:INFO:layout:isc_globalPrompt_messageStack:layoutChildren (reason: initial draw):
                layout specified size: 360w x 83h
                drawn size: 380w x 83h
                available size: 360w (length) x 83h
                   [Label ID:isc_globalPrompt_messageLabel]
                      360 drawn length (policyLength: 360) (no length policy)
                      68 drawn breadth (breadth policy: fill)
                
                10:13:54.488:MUP0:DEBUG:layout:isc_globalPrompt_body:centering wrt visible breadth: 380
                10:13:54.491:MUP0:INFO:layout:isc_globalPrompt_body:layoutChildren (reason: initial draw):
                layout specified size: 390w x 83h
                drawn size: 410w x 103h
                available size: 390w x 83h (length)
                   [HStack ID:isc_globalPrompt_messageStack]
                      83 drawn length (policyLength: 83) (no length policy)
                      360 drawn breadth (breadth policy: fill)
                
                10:13:54.493:MUP0:INFO:layout:isc_globalPrompt:edgeWidth is: 10, setting window width to: 420
                10:13:54.495:MUP0:DEBUG:layout:isc_globalPrompt:centering wrt visible breadth: 410
                10:13:54.496:MUP0:INFO:layout:isc_globalPrompt:layoutChildren (reason: initial draw):
                layout specified size: 420w x 90h
                drawn size: 420w x 110h
                available size: 410w x 83h (length)
                   [Layout ID:isc_globalPrompt_body]
                      103 drawn length (policyLength: 103) (no length policy)
                      410 drawn breadth (explicit size)
                
                10:13:54.511:MUP0:DEBUG:Log:****END***END***END*** OnlineMeetingButton.Click
                10:13:55.244:TMR8:DEBUG:Log:************ meeting topic records fetched: {status: 0,
                startRow: 0,
                endRow: 4,
                totalRows: 5,
                data: Array[5],
                httpResponseCode: undef,
                transactionNum: 31,
                clientContext: Obj,
                httpHeaders: undef,
                context: Obj}
                10:13:55.245:TMR8:DEBUG:Log:************ expanding topic record: {TopicLeaderName: "Vicki Spencer",
                MeetingTypeID: 101,
                CommunityID: 101,
                TopicNumber: 1,
                MeetingTopicID: 101,
                ImpactName: "5-Catastrophic",
                SearchEnabled: true,
                TopicTitle: "All High Impact Issues",
                ImpactID: 101,
                Created: Date(02/03/2013),
                Modified: Date(02/03/2013),
                MeetingName: "Weekly Status Meeting",
                TopicLeaderID: 102,
                ProjectID: 101}
                10:13:55.245:TMR8:DEBUG:Log:************ topic record expanded: {TopicLeaderName: "Vicki Spencer",
                MeetingTypeID: 101,
                CommunityID: 101,
                TopicNumber: 1,
                MeetingTopicID: 101,
                ImpactName: "5-Catastrophic",
                SearchEnabled: true,
                TopicTitle: "All High Impact Issues",
                ImpactID: 101,
                Created: Date(02/03/2013),
                Modified: Date(02/03/2013),
                MeetingName: "Weekly Status Meeting",
                TopicLeaderID: 102,
                ProjectID: 101}
                10:13:55.245:TMR8:DEBUG:Log:************ expanding topic record: {TopicLeaderName: "Richard Bollinger",
                MeetingTypeID: 101,
                CategoryName: "Cost",
                CommunityID: 101,
                TopicNumber: 2,
                MeetingTopicID: 102,
                SearchEnabled: true,
                TopicTitle: "All Cost Issues",
                Created: Date(02/03/2013),
                Modified: Date(02/03/2013),
                CategoryID: 101,
                MeetingName: "Weekly Status Meeting",
                TopicLeaderID: 101,
                ProjectID: 101}
                10:13:55.247:TMR8:DEBUG:Log:************ topic record expanded: {TopicLeaderName: "Richard Bollinger",
                MeetingTypeID: 101,
                CategoryName: "Cost",
                CommunityID: 101,
                TopicNumber: 2,
                MeetingTopicID: 102,
                SearchEnabled: true,
                TopicTitle: "All Cost Issues",
                Created: Date(02/03/2013),
                Modified: Date(02/03/2013),
                CategoryID: 101,
                MeetingName: "Weekly Status Meeting",
                TopicLeaderID: 101,
                ProjectID: 101}
                10:13:55.247:TMR8:DEBUG:Log:************ expanding topic record: {TopicLeaderName: "Richard Bollinger",
                MeetingTypeID: 101,
                CommunityID: 101,
                TopicNumber: 3,
                MeetingTopicID: 103,
                IssueTypeName: "Problem",
                SearchEnabled: true,
                TopicTitle: "Lower Impact Problems",
                Created: Date(02/03/2013),
                Modified: Date(02/03/2013),
                IssueTypeID: 101,
                MeetingName: "Weekly Status Meeting",
                TopicLeaderID: 101,
                ProjectID: 101}
                10:13:55.247:TMR8:DEBUG:Log:************ topic record expanded: {TopicLeaderName: "Richard Bollinger",
                MeetingTypeID: 101,
                CommunityID: 101,
                TopicNumber: 3,
                MeetingTopicID: 103,
                IssueTypeName: "Problem",
                SearchEnabled: true,
                TopicTitle: "Lower Impact Problems",
                Created: Date(02/03/2013),
                Modified: Date(02/03/2013),
                IssueTypeID: 101,
                MeetingName: "Weekly Status Meeting",
                TopicLeaderID: 101,
                ProjectID: 101}
                10:13:55.247:TMR8:DEBUG:Log:************ expanding topic record: {TopicTitle: "All Remaining Issues",
                TopicLeaderName: "Richard Bollinger",
                MeetingTypeID: 101,
                Created: Date(01/30/2013),
                CommunityID: 101,
                Modified: Date(07/23/2012),
                TopicNumber: 5,
                MeetingTopicID: 104,
                MeetingName: "Weekly Status Meeting",
                TopicLeaderID: 101,
                SearchEnabled: true,
                ProjectID: 101}
                10:13:55.248:TMR8:DEBUG:Log:************ topic record expanded: {TopicTitle: "All Remaining Issues",
                TopicLeaderName: "Richard Bollinger",
                MeetingTypeID: 101,
                Created: Date(01/30/2013),
                CommunityID: 101,
                Modified: Date(07/23/2012),
                TopicNumber: 5,
                MeetingTopicID: 104,
                MeetingName: "Weekly Status Meeting",
                TopicLeaderID: 101,
                SearchEnabled: true,
                ProjectID: 101}
                10:13:55.248:TMR8:DEBUG:Log:************ expanding topic record: {TopicTitle: "All Remaining Issues, again",
                TopicLeaderName: "Richard Bollinger",
                MeetingTypeID: 101,
                Created: Date(01/30/2013),
                CommunityID: 101,
                Modified: Date(07/23/2012),
                TopicNumber: 9,
                MeetingTopicID: 105,
                MeetingName: "Weekly Status Meeting",
                TopicLeaderID: 101,
                SearchEnabled: true,
                ProjectID: 101}
                10:13:55.248:TMR8:DEBUG:Log:************ topic record expanded: {TopicTitle: "All Remaining Issues, again",
                TopicLeaderName: "Richard Bollinger",
                MeetingTypeID: 101,
                Created: Date(01/30/2013),
                CommunityID: 101,
                Modified: Date(07/23/2012),
                TopicNumber: 9,
                MeetingTopicID: 105,
                MeetingName: "Weekly Status Meeting",
                TopicLeaderID: 101,
                SearchEnabled: true,
                ProjectID: 101}
                10:13:55.248:TMR8:DEBUG:Log:************ done with topics
                10:13:55.280:TMR8:INFO:layout:OnlineAgendaGrid:adding newMembers: [Toolbar ID:isc_Toolbar_3],[GridBody ID:OnlineAgendaGrid_body] at position: 0
                10:13:55.281:TMR8:DEBUG:layout:OnlineAgendaGrid:resizing [Toolbar ID:isc_Toolbar_3]: 198w 
                10:13:55.283:TMR8:DEBUG:layout:OnlineAgendaGrid:resizing [GridBody ID:OnlineAgendaGrid_body]: 198w 
                10:13:55.288:TMR8:DEBUG:layout:OnlineAgendaGrid:new user width: 182 for member [Toolbar ID:isc_Toolbar_3], oldSize: undefined reason: undefined
                10:13:55.288:TMR8:DEBUG:layout:OnlineAgendaGrid:new user height: 21 for member [Toolbar ID:isc_Toolbar_3], oldSize: null reason: undefined
                10:13:55.357:TMR8:INFO:layout:isc_Toolbar_3:adding newMembers: [ImgButton ID:isc_ImgButton_19],[ImgButton ID:isc_ImgButton_20],[ImgButton ID:isc_ImgButton_21],[ImgButton ID:isc_ImgButton_22],[ImgButton ID:isc_ImgButton_23],[ImgButton ID:isc_ImgButton_24],[ImgButton ID:isc_ImgButton_25],[ImgButton ID:isc_ImgButton_26],[ImgButton ID:isc_ImgButton_27] at position: 0
                10:13:55.358:TMR8:DEBUG:layout:isc_Toolbar_3:resizing [ImgButton ID:isc_ImgButton_19]: 21h 
                10:13:55.359:TMR8:DEBUG:layout:isc_Toolbar_3:resizing [ImgButton ID:isc_ImgButton_20]: 21h 
                10:13:55.360:TMR8:DEBUG:layout:isc_Toolbar_3:resizing [ImgButton ID:isc_ImgButton_21]: 21h 
                10:13:55.361:TMR8:DEBUG:layout:isc_Toolbar_3:resizing [ImgButton ID:isc_ImgButton_22]: 21h 
                10:13:55.362:TMR8:DEBUG:layout:isc_Toolbar_3:resizing [ImgButton ID:isc_ImgButton_23]: 21h 
                10:13:55.364:TMR8:DEBUG:layout:isc_Toolbar_3:resizing [ImgButton ID:isc_ImgButton_24]: 21h 
                10:13:55.366:TMR8:DEBUG:layout:isc_Toolbar_3:resizing [ImgButton ID:isc_ImgButton_25]: 21h 
                10:13:55.367:TMR8:DEBUG:layout:isc_Toolbar_3:resizing [ImgButton ID:isc_ImgButton_26]: 21h 
                10:13:55.368:TMR8:DEBUG:layout:isc_Toolbar_3:resizing [ImgButton ID:isc_ImgButton_27]: 21h 
                10:13:55.383:TMR8:DEBUG:layout:isc_Toolbar_3:resizing [ImgButton ID:isc_ImgButton_19]: 21h 15w
                10:13:55.385:TMR8:DEBUG:layout:isc_Toolbar_3:resizing [ImgButton ID:isc_ImgButton_20]: 21h 115w
                10:13:55.387:TMR8:DEBUG:layout:isc_Toolbar_3:resizing [ImgButton ID:isc_ImgButton_21]: 21h 17w
                10:13:55.388:TMR8:DEBUG:layout:isc_Toolbar_3:resizing [ImgButton ID:isc_ImgButton_22]: 21h 17w
                10:13:55.388:TMR8:DEBUG:layout:isc_Toolbar_3:resizing [ImgButton ID:isc_ImgButton_23]: 21h 17w
                10:13:55.486:TMR8:DEBUG:layout:isc_Toolbar_3:centering wrt visible breadth: 21
                10:13:55.489:TMR8:INFO:layout:isc_Toolbar_3:layoutChildren (reason: initial draw):
                layout specified size: 182w x 21h
                drawn size: 182w x 21h
                available size: 182w (length) x 21h
                   [ImgButton ID:isc_ImgButton_19]
                      15 drawn length (resizeLength: 15) (policyLength: 5%) (explicit size)
                      21 drawn breadth (breadth policy: fill)
                   [ImgButton ID:isc_ImgButton_20]
                      115 drawn length (resizeLength: 115) (policyLength: *) (explicit size)
                      21 drawn breadth (breadth policy: fill)
                   [ImgButton ID:isc_ImgButton_21]
                      17 drawn length (resizeLength: 17) (policyLength: 10%) (explicit size)
                      21 drawn breadth (breadth policy: fill)
                   [ImgButton ID:isc_ImgButton_22]
                      17 drawn length (resizeLength: 17) (policyLength: 10%) (explicit size)
                      21 drawn breadth (breadth policy: fill)
                   [ImgButton ID:isc_ImgButton_23]
                      17 drawn length (resizeLength: 17) (policyLength: 10%) (explicit size)
                      21 drawn breadth (breadth policy: fill)
                   [ImgButton ID:isc_ImgButton_24]
                      1 drawn length (resizeLength: 1) (policyLength: 1) (explicit size)
                      21 drawn breadth (breadth policy: fill)
                   [ImgButton ID:isc_ImgButton_25]
                      1 drawn length (resizeLength: 1) (policyLength: 1) (explicit size)
                      21 drawn breadth (breadth policy: fill)
                   [ImgButton ID:isc_ImgButton_26]
                      1 drawn length (resizeLength: 1) (policyLength: 1) (explicit size)
                      21 drawn breadth (breadth policy: fill)
                   [ImgButton ID:isc_ImgButton_27]
                      1 drawn length (resizeLength: 1) (policyLength: 1) (explicit size)
                      21 drawn breadth (breadth policy: fill)
                
                10:13:55.496:TMR8:DEBUG:layout:OnlineAgendaGrid:new field widths: 15,115,17,17,17,1,1,1,1
                10:13:55.497:TMR8:DEBUG:layout:OnlineAgendaGrid:resizing [GridBody ID:OnlineAgendaGrid_body]: 198w 727h
                10:13:55.543:TMR8:DEBUG:layout:OnlineAgendaGrid:centering wrt visible breadth: 198
                10:13:55.545:TMR8:INFO:layout:OnlineAgendaGrid:layoutChildren (reason: initial draw):
                layout specified size: 200w x 750h
                drawn size: 200w x 750h
                available size: 198w x 748h (length)
                   [Toolbar ID:isc_Toolbar_3]
                      21 drawn length (resizeLength: 21) (policyLength: 21) (explicit size)
                      182 drawn breadth (explicit size)
                   [GridBody ID:OnlineAgendaGrid_body]
                      727 drawn length (resizeLength: 727) (policyLength: 100%) (explicit size)
                      198 drawn breadth (breadth policy: fill)
                
                10:13:55.575:TMR8:INFO:layout:OnlineMeetingWindow:adding newMembers: [HLayout ID:OnlineMeetingWindow_header]
                10:13:55.575:TMR8:DEBUG:layout:OnlineMeetingWindow:resizing [HLayout ID:OnlineMeetingWindow_header]: 1133w 
                10:13:55.579:TMR8:INFO:layout:OnlineMeetingWindow_header:adding newMembers: [Img ID:OnlineMeetingWindow_headerIcon]
                10:13:55.585:TMR8:INFO:layout:OnlineMeetingWindow_header:adding newMembers: [Canvas ID:isc_Canvas_4]
                10:13:55.586:TMR8:DEBUG:layout:OnlineMeetingWindow_header:resizing [Canvas ID:isc_Canvas_4]: 20h 
                10:13:55.590:TMR8:INFO:layout:OnlineMeetingWindow_header:adding newMembers: [ImgButton ID:OnlineMeetingWindow_maximizeButton]
                10:13:55.594:TMR8:INFO:layout:OnlineMeetingWindow_header:adding newMembers: [ImgButton ID:OnlineMeetingWindow_closeButton]
                10:13:55.599:TMR8:INFO:layout:OnlineMeetingWindow:adding newMembers: [Layout ID:OnlineMeetingWindow_body]
                10:13:55.599:TMR8:DEBUG:layout:OnlineMeetingWindow:resizing [Layout ID:OnlineMeetingWindow_body]: 1133w 
                10:13:55.608:TMR8:DEBUG:layout:OnlineMeetingWindow:resizing [Layout ID:OnlineMeetingWindow_body]: 1133w 723h
                10:13:55.618:TMR8:DEBUG:layout:OnlineMeetingWindow_header:resizing [Canvas ID:isc_Canvas_4]: 20h 1077w
                10:13:55.636:TMR8:DEBUG:layout:OnlineMeetingWindow_header:centering wrt visible breadth: 20
                10:13:55.637:TMR8:INFO:layout:OnlineMeetingWindow_header:layoutChildren (reason: initial draw):
                layout specified size: 1133w x 20h
                drawn size: 1133w x 20h
                available size: 1133w (length) x 20h
                   [Img ID:OnlineMeetingWindow_headerIcon]
                      14 drawn length (policyLength: 14) (inherent size)
                      14 drawn breadth (explicit size)
                   [Canvas ID:isc_Canvas_4]
                      1077 drawn length (resizeLength: 1077) (policyLength: *) (no length specified)
                      20 drawn breadth (breadth policy: fill)
                   [ImgButton ID:OnlineMeetingWindow_maximizeButton]
                      18 drawn length (resizeLength: 18) (policyLength: 18) (explicit size)
                      18 drawn breadth (explicit size)
                   [ImgButton ID:OnlineMeetingWindow_closeButton]
                      18 drawn length (resizeLength: 18) (policyLength: 18) (explicit size)
                      18 drawn breadth (explicit size)
                
                10:13:55.642:TMR8:DEBUG:layout:OnlineMeetingWindow_body:resizing [TabSet ID:OnlineMeetingTabs]: 1133w 
                10:13:55.645:TMR8:DEBUG:layout:OnlineMeetingWindow_body:resizing [DynamicForm ID:OnlineMeetingForm]: 1133w 72h
                10:13:55.702:TMR8:INFO:layout:OnlineMeetingWindow_body:member: [DynamicForm ID:OnlineMeetingForm] overflowed.  set length: 72 got length: 75
                10:13:55.687:TMR8:DEBUG:layout:OnlineMeetingWindow_body:resizing [TabSet ID:OnlineMeetingTabs]: 1133w 648h
                10:13:55.720:TMR8:INFO:layout:OnlineMeetingTabs_tabBar:adding newMembers: [ImgTab ID:AgendaTab],[ImgTab ID:IssueXTab],[ImgTab ID:IncompleteTaskXtab],[ImgTab ID:AttendeeTab] at position: 0
                10:13:55.721:TMR8:DEBUG:layout:OnlineMeetingTabs_tabBar:resizing [ImgTab ID:AgendaTab]: 20h 
                10:13:55.723:TMR8:DEBUG:layout:OnlineMeetingTabs_tabBar:resizing [ImgTab ID:IssueXTab]: 20h 
                10:13:55.724:TMR8:DEBUG:layout:OnlineMeetingTabs_tabBar:resizing [ImgTab ID:IncompleteTaskXtab]: 20h 
                10:13:55.725:TMR8:DEBUG:layout:OnlineMeetingTabs_tabBar:resizing [ImgTab ID:AttendeeTab]: 20h 
                10:13:55.728:TMR8:INFO:layout:OnlineMeetingTabs_paneContainer:adding newMembers:[ListGrid ID:OnlineAgendaGrid]
                10:13:55.728:TMR8:DEBUG:layout:OnlineMeetingTabs_paneContainer:resizing[ListGrid ID:OnlineAgendaGrid]: 1121w 
                10:13:55.778:TMR8:DEBUG:layout:OnlineMeetingTabs_tabBar:centering wrt visible breadth: 20
                10:13:55.780:TMR8:INFO:layout:OnlineMeetingTabs_tabBar:layoutChildren (reason: initial draw):
                layout specified size: 1133w x 20h
                drawn size: 1133w x 20h
                available size: 1133w (length) x 20h
                   [ImgTab ID:AgendaTab]
                      80 drawn length (policyLength: 80) (inherent size)
                      20 drawn breadth (breadth policy: fill)
                   [ImgTab ID:IssueXTab]
                      80 drawn length (policyLength: 80) (inherent size)
                      20 drawn breadth (breadth policy: fill)
                   [ImgTab ID:IncompleteTaskXtab]
                      80 drawn length (policyLength: 80) (inherent size)
                      20 drawn breadth (breadth policy: fill)
                   [ImgTab ID:AttendeeTab]
                      80 drawn length (policyLength: 80) (inherent size)
                      20 drawn breadth (breadth policy: fill)
                
                10:13:55.789:TMR8:DEBUG:layout:OnlineMeetingTabs_paneContainer:resizing[ListGrid ID:issueGrid]: 1121w 
                10:13:55.790:TMR8:DEBUG:layout:OnlineMeetingTabs_paneContainer:resizing[ListGrid ID:taskGrid]: 1121w 
                10:13:55.791:TMR8:DEBUG:layout:OnlineMeetingTabs_paneContainer:resizing[ListGrid ID:OnlineAgendaGrid]: 1121w 617h
                10:13:55.810:TMR8:WARN:Log:ClassFactory.addGlobalID: ID:'OnlineAgendaGrid_sorter' for object '[ImgButton ID:OnlineAgendaGrid_sorter]' collides with ID of existing object '[ImgButton ID:OnlineAgendaGrid_sorter]'. The pre-existing widget will be destroyed.
                10:13:55.835:TMR8:WARN:Log:ClassFactory.addGlobalID: ID:'OnlineAgendaGrid_body' for object '[GridBody ID:OnlineAgendaGrid_body]' collides with ID of existing object '[GridBody ID:OnlineAgendaGrid_body]'. The pre-existing widget will be destroyed.
                10:13:55.850:TMR8:INFO:layout:OnlineAgendaGrid:adding newMembers: [Toolbar ID:isc_Toolbar_4],[GridBody ID:OnlineAgendaGrid_body] at position: 0
                10:13:55.850:TMR8:DEBUG:layout:OnlineAgendaGrid:resizing [Toolbar ID:isc_Toolbar_4]: 1119w 
                10:13:55.851:TMR8:DEBUG:layout:OnlineAgendaGrid:resizing [GridBody ID:OnlineAgendaGrid_body]: 1119w 
                10:13:55.865:TMR8:DEBUG:layout:OnlineAgendaGrid:new user width: 1103 for member [Toolbar ID:isc_Toolbar_4], oldSize: undefined reason: undefined
                10:13:55.865:TMR8:DEBUG:layout:OnlineAgendaGrid:new user height: 21 for member [Toolbar ID:isc_Toolbar_4], oldSize: null reason: undefined
                10:13:55.936:TMR8:INFO:layout:isc_Toolbar_4:adding newMembers: [ImgButton ID:isc_ImgButton_28],[ImgButton ID:isc_ImgButton_29],[ImgButton ID:isc_ImgButton_30],[ImgButton ID:isc_ImgButton_31],[ImgButton ID:isc_ImgButton_32],[ImgButton ID:isc_ImgButton_33],[ImgButton ID:isc_ImgButton_34],[ImgButton ID:isc_ImgButton_35],[ImgButton ID:isc_ImgButton_36],[ImgButton ID:isc_ImgButton_37] at position: 0
                10:13:55.937:TMR8:DEBUG:layout:isc_Toolbar_4:resizing [ImgButton ID:isc_ImgButton_28]: 21h 
                10:13:55.939:TMR8:DEBUG:layout:isc_Toolbar_4:resizing [ImgButton ID:isc_ImgButton_29]: 21h 
                10:13:55.940:TMR8:DEBUG:layout:isc_Toolbar_4:resizing [ImgButton ID:isc_ImgButton_30]: 21h 
                10:13:55.941:TMR8:DEBUG:layout:isc_Toolbar_4:resizing [ImgButton ID:isc_ImgButton_31]: 21h 
                10:13:55.942:TMR8:DEBUG:layout:isc_Toolbar_4:resizing [ImgButton ID:isc_ImgButton_32]: 21h 
                10:13:55.943:TMR8:DEBUG:layout:isc_Toolbar_4:resizing [ImgButton ID:isc_ImgButton_33]: 21h 
                10:13:55.944:TMR8:DEBUG:layout:isc_Toolbar_4:resizing [ImgButton ID:isc_ImgButton_34]: 21h 
                10:13:55.948:TMR8:DEBUG:layout:isc_Toolbar_4:resizing [ImgButton ID:isc_ImgButton_35]: 21h 
                10:13:55.949:TMR8:DEBUG:layout:isc_Toolbar_4:resizing [ImgButton ID:isc_ImgButton_36]: 21h 
                10:13:55.951:TMR8:DEBUG:layout:isc_Toolbar_4:resizing [ImgButton ID:isc_ImgButton_37]: 21h 
                10:13:55.964:TMR8:WARN:ListGrid:OnlineAgendaGrid:Attempt to access destroyed widget in the DOM - destroy() called at invalid time (eg: mid-draw) or invalid method called on destroy()d widget. Stack Trace:
                    Class.getStackTrace(_1=>undef,  _2=>undef,  _3=>undef,  _4=>undef)
                    Canvas.getHandle()
                    Canvas.$p8(_1=>true)
                    Canvas.draw(_1=>undef, undef, undef, undef, undef, undef, undef, undef)
                    Class.invokeSuper(_1=>[Class Toolbar],  _2=>"draw",  _3=>undef,  _4=>undef,  _5=>undef,  _6=>undef,  _7=>undef,  _8=>undef,  _9=>undef,  _10=>undef)
                    Toolbar.draw(_1=>undef,  _2=>undef,  _3=>undef,  _4=>undef)
                    ** recursed on Class.invokeSuper
                
                10:13:55.971:TMR8:DEBUG:layout:isc_Toolbar_4:resizing [ImgButton ID:isc_ImgButton_28]: 21h 54w
                10:13:55.972:TMR8:DEBUG:layout:isc_Toolbar_4:resizing [ImgButton ID:isc_ImgButton_29]: 21h 357w
                10:13:55.973:TMR8:DEBUG:layout:isc_Toolbar_4:resizing [ImgButton ID:isc_ImgButton_30]: 21h 109w
                10:13:55.974:TMR8:DEBUG:layout:isc_Toolbar_4:resizing [ImgButton ID:isc_ImgButton_31]: 21h 109w
                10:13:55.975:TMR8:DEBUG:layout:isc_Toolbar_4:resizing [ImgButton ID:isc_ImgButton_32]: 21h 109w
                10:13:55.975:TMR8:DEBUG:layout:isc_Toolbar_4:resizing [ImgButton ID:isc_ImgButton_33]: 21h 361w
                10:13:56.078:TMR8:DEBUG:layout:isc_Toolbar_4:centering wrt visible breadth: 21
                10:13:56.081:TMR8:INFO:layout:isc_Toolbar_4:layoutChildren (reason: initial draw):
                layout specified size: 1103w x 21h
                drawn size: 1103w x 21h
                available size: 1103w (length) x 21h
                   [ImgButton ID:isc_ImgButton_28]
                      54 drawn length (resizeLength: 54) (policyLength: 5%) (explicit size)
                      21 drawn breadth (breadth policy: fill)
                   [ImgButton ID:isc_ImgButton_29]
                      357 drawn length (resizeLength: 357) (policyLength: *) (explicit size)
                      21 drawn breadth (breadth policy: fill)
                   [ImgButton ID:isc_ImgButton_30]
                      109 drawn length (resizeLength: 109) (policyLength: 10%) (explicit size)
                      21 drawn breadth (breadth policy: fill)
                   [ImgButton ID:isc_ImgButton_31]
                      109 drawn length (resizeLength: 109) (policyLength: 10%) (explicit size)
                      21 drawn breadth (breadth policy: fill)
                   [ImgButton ID:isc_ImgButton_32]
                      109 drawn length (resizeLength: 109) (policyLength: 10%) (explicit size)
                      21 drawn breadth (breadth policy: fill)
                   [ImgButton ID:isc_ImgButton_33]
                      361 drawn length (resizeLength: 361) (policyLength: *) (explicit size)
                      21 drawn breadth (breadth policy: fill)
                   [ImgButton ID:isc_ImgButton_34]
                      1 drawn length (resizeLength: 1) (policyLength: 1) (explicit size)
                      21 drawn breadth (breadth policy: fill)
                   [ImgButton ID:isc_ImgButton_35]
                      1 drawn length (resizeLength: 1) (policyLength: 1) (explicit size)
                      21 drawn breadth (breadth policy: fill)
                   [ImgButton ID:isc_ImgButton_36]
                      1 drawn length (resizeLength: 1) (policyLength: 1) (explicit size)
                      21 drawn breadth (breadth policy: fill)
                   [ImgButton ID:isc_ImgButton_37]
                      1 drawn length (resizeLength: 1) (policyLength: 1) (explicit size)
                      21 drawn breadth (breadth policy: fill)
                
                10:13:56.086:TMR8:DEBUG:layout:OnlineAgendaGrid:new field widths: 54,357,109,109,109,361,1,1,1,1
                10:13:56.095:TMR8:WARN:ListGrid:OnlineAgendaGrid:Attempt to access destroyed widget in the DOM - destroy() called at invalid time (eg: mid-draw) or invalid method called on destroy()d widget. Stack Trace:
                    Class.getStackTrace(_1=>undef,  _2=>undef,  _3=>undef,  _4=>undef)
                    Canvas.getHandle()
                    Canvas.$p8(_1=>true)
                    Canvas.draw(_1=>undef, undef, undef)
                    StatefulCanvas.draw(_1=>undef,  _2=>undef,  _3=>undef)
                    Canvas.predrawPeers()
                    ** recursed on Canvas.draw
                
                10:13:56.101:TMR8:WARN:ListGrid:OnlineAgendaGrid:Attempt to access destroyed widget in the DOM - destroy() called at invalid time (eg: mid-draw) or invalid method called on destroy()d widget. Stack Trace:
                    Class.getStackTrace(_1=>undef,  _2=>undef,  _3=>undef,  _4=>undef)
                    Canvas.getHandle()
                    Canvas.$p8(_1=>true)
                    Canvas.draw(_1=>undef, undef, undef)
                    StatefulCanvas.draw(_1=>undef,  _2=>undef,  _3=>undef)
                    Layout.$2x()
                    Layout.drawChildren()
                    ** recursed on Canvas.draw
                
                10:13:56.113:TMR8:WARN:ListGrid:OnlineAgendaGrid:Attempt to access destroyed widget in the DOM - destroy() called at invalid time (eg: mid-draw) or invalid method called on destroy()d widget. Stack Trace:
                    Class.getStackTrace(_1=>undef,  _2=>undef,  _3=>undef,  _4=>undef)
                    Canvas.getHandle()
                    Canvas.$qy()
                    Canvas.$qx(_1=>Array[4])
                    Canvas.$qa()
                    Canvas.draw(_1=>undef, undef, undef, undef, undef, undef, undef, undef)
                    Class.invokeSuper(_1=>[Class ListGrid],  _2=>"draw",  _3=>undef,  _4=>undef,  _5=>undef,  _6=>undef,  _7=>undef,  _8=>undef,  _9=>undef,  _10=>undef)
                    ListGrid.draw(_1=>undef,  _2=>undef,  _3=>undef,  _4=>undef)
                    Layout.layoutChildren(_1=>"initial draw",  _2=>undef,  _3=>undef)
                    Layout.drawChildren()
                    ** recursed on Canvas.draw
                
                10:13:56.118:TMR8:WARN:ListGrid:OnlineAgendaGrid:Attempt to access destroyed widget in the DOM - destroy() called at invalid time (eg: mid-draw) or invalid method called on destroy()d widget. Stack Trace:
                    Class.getStackTrace(_1=>undef,  _2=>undef,  _3=>undef,  _4=>undef)
                    Canvas.getHandle()
                    Canvas.$qy()
                    Canvas.adjustOverflow(_1=>"parentDrawn",  _2=>undef,  _3=>undef)
                    Canvas.$qx(_1=>Array[3])
                    Layout.layoutChildren(_1=>"initial draw",  _2=>undef,  _3=>undef)
                    Layout.drawChildren()
                    Canvas.draw(_1=>undef)
                    Canvas.drawChildren()
                    ** recursed on Canvas.draw
                
                10:13:56.123:TMR8:WARN:ListGrid:OnlineAgendaGrid:Attempt to access destroyed widget in the DOM - destroy() called at invalid time (eg: mid-draw) or invalid method called on destroy()d widget. Stack Trace:
                    Class.getStackTrace(_1=>undef,  _2=>undef,  _3=>undef,  _4=>undef)
                    Canvas.getHandle()
                    Canvas.$ux(_1=>"parentDrawn")
                    Canvas.$ut(_1=>"parentDrawn")
                    Canvas.adjustOverflow(_1=>"parentDrawn",  _2=>undef,  _3=>undef)
                    Canvas.$qx(_1=>Array[3])
                    Layout.layoutChildren(_1=>"initial draw",  _2=>undef,  _3=>undef)
                    Layout.drawChildren()
                    Canvas.draw(_1=>undef)
                    Canvas.drawChildren()
                    ** recursed on Canvas.draw
                
                10:13:56.125:TMR8:DEBUG:layout:OnlineMeetingTabs_paneContainer:centering wrt visible breadth: 1121
                10:13:56.127:TMR8:INFO:layout:OnlineMeetingTabs_paneContainer:layoutChildren (reason: initial draw):
                layout specified size: 1133w x 629h
                drawn size: 1133w x 629h
                available size: 1131w x 627h (length)[ListGrid ID:issueGrid]
                      undefined drawn length (policyLength: 0) (hidden)
                      undefined drawn breadth (undefined)[ListGrid ID:taskGrid]
                      undefined drawn length (policyLength: 0) (hidden)
                      undefined drawn breadth (undefined)[ListGrid ID:OnlineAgendaGrid]
                      617 drawn length (resizeLength: 617) (policyLength: 100%) (explicit size)
                      1121 drawn breadth (breadth policy: fill)
                
                10:13:56.133:TMR8:DEBUG:layout:OnlineMeetingWindow_body:centering wrt visible breadth: 1133
                10:13:56.137:TMR8:INFO:layout:OnlineMeetingWindow_body:layoutChildren (reason: initial draw):
                layout specified size: 1133w x 723h
                drawn size: 1133w x 723h
                available size: 1133w x 723h (length)
                   [DynamicForm ID:OnlineMeetingForm]
                      75 drawn length (resizeLength: 72) (policyLength: 75) (explicit size)
                      1133 drawn breadth (breadth policy: fill)
                   [TabSet ID:OnlineMeetingTabs]
                      648 drawn length (resizeLength: 648) (policyLength: 90%) (explicit size)
                      1133 drawn breadth (breadth policy: fill)
                
                10:13:56.142:TMR8:DEBUG:layout:OnlineMeetingWindow:centering wrt visible breadth: 1133
                10:13:56.148:TMR8:INFO:layout:OnlineMeetingWindow:layoutChildren (reason: initial draw):
                layout specified size: 1143w x 750h
                drawn size: 1143w x 750h
                available size: 1133w x 743h (length)
                   [HLayout ID:OnlineMeetingWindow_header]
                      20 drawn length (resizeLength: 20) (policyLength: 20) (explicit size)
                      1133 drawn breadth (breadth policy: fill)
                   [Layout ID:OnlineMeetingWindow_body]
                      723 drawn length (resizeLength: 723) (policyLength: *) (no length specified)
                      1133 drawn breadth (breadth policy: fill)
                
                10:13:56.164:TMR8[E]:DEBUG:layout:OnlineAgendaGrid:new field widths: 15,115,17,17,17,1,1,1,1
                10:13:56.169:TMR8[E]:DEBUG:layout:OnlineAgendaGrid:centering wrt visible breadth: 198
                10:13:56.170:TMR8[E]:INFO:layout:OnlineAgendaGrid:layoutChildren (reason: membersRemoved):
                layout specified size: 200w x 750h
                drawn size: 200w x 750h
                available size: 198w x 748h (length)
                   [Toolbar ID:isc_Toolbar_3]
                      21 drawn length (resizeLength: 21) (policyLength: 21) (explicit size)
                      182 drawn breadth (explicit size)
                
                10:13:56.751:TMR0:WARN:Log:TypeError: _1 is null
                    unnamed()
                    Canvas.getTagStart(_1=>true)
                    Canvas._insertHTML(true)
                    Canvas.draw(_1=>undef, undefined=>undef, undefined=>undef)
                    StatefulCanvas.draw()
                    ListGrid.updateSorter()
                    [c]Class.fireCallback(_1=>{Obj},  _2=>undef,  _3=>[object Array],  _4=>{Obj},  _5=>true)
                    Timer._fireTimeout("$ir560")
                    unnamed()
                    unnamed() @
                I still have a trick up my sleeve. I will see if it works. But, my expectations are low. Here is the button code for the above log.

                Code:
                Log.setPriority("Log", 5);
                Log.logDebug("***getExpansionComponent override version******** OnlineMeetingButton.Click");
                
                OnlineMeetingWindow.autoDraw = false;
                //topicGrid.autoDraw = false;
                
                if (!window.OnlineMeetingForm) {
                	var message = "Component ID \"OnlineMeetingForm\", target of action \"Edit rec\" does not exist";
                	isc.Log.logWarn(message);
                	if (isc.designTime) {
                		isc.say(message);
                	}
                }
                
                OnlineMeetingForm.setValue("MeetingName", Application.currentMeetingName);
                OnlineMeetingForm.setValue("TeleconferenceInfo", Application.currentTeleconferenceInfo);
                
                var IssueDuplicateList = new Array;
                
                function duplicateIssue (issueNumber) {
                	var dup;
                	if (IssueDuplicateList.indexOf(issueNumber) < 0 ) {
                		IssueDuplicateList.push(issueNumber);
                		dup = false;
                	} else {
                		dup = true;
                	}
                	return dup;
                }
                
                function getIssueGrid (tRec) {
                	Log.logDebug("************ creating expansion component for: " + this.echo(tRec));
                	var issueGrid = isc.ListGrid.create({
                		autoDraw:false,
                	//	dataSource:"Issue",
                	//	detailDS:"IncompleteTask",
                		canEdit:false,
                	//	canExpandRecords:true,
                	//	canExpandMultipleRecords:false,
                	//	expansionMode:"related",
                		showDetailFields:false,
                		autoFetchData:false,
                		canRemoveRecords:false,
                		fields:[
                			{
                				name:"IssueNumber",
                				title:"Number",
                				width:"5%"
                			},
                			{
                				name:"IssueTitle",
                				title:"Issue Title",
                				width:"*"
                			},
                			{
                				name:"Category",
                				title:"Category",
                				width:"9%",
                				valueField:"CategoryID",
                				displayField:"CategoryName"
                			},
                			{
                				name:"IssueType",
                				title:"Issue Type",
                				width:"7%",
                				valueField:"IssueTypeID",
                				displayField:"IssueTypeName"
                			},
                			{
                				name:"Impact",
                				title:"Impact",
                				width:"8%",
                				valueField:"ImpactID",
                				displayField:"ImpactName"
                			},
                			{
                				name:"Owner",
                				title:"Owner",
                				width:"10%",
                				valueField:"OwnerID",
                				displayField:"OwnerName"
                			},
                			{
                				name:"Private",
                				title:"Private",
                				width:"5%",
                				type:"boolean"
                			},
                			{
                				name:"IssueStatus",
                				title:"Status",
                				width:"7%"
                			},
                			{
                				name:"ClosedDate",
                				title:"Closed",
                				width:"7%"
                			},
                			{
                				name:"IssueDueDate",
                				title:"Due",
                				width:"7%"
                			}
                		],
                		recordDoubleClick:"	if ( this.anySelected() ) {\n\n		var rec = this.getSelectedRecord();\n\n		Application.currentIssueID = rec.IssueID;\n		Application.currentIssueNumber = rec.IssueNumber;\n		Application.currentIssueTitle = rec.IssueTitle;\n		Application.currentIssueStatus = rec.IssueStatus;\n		Application.currentIssueOwnerID = rec.OwnerID;\n		Application.currentIssueID = rec.IssueID;\n		Application.currentIssueOwnerID = rec.OwnerID;\n		Application.currentIssueOwnerName = rec.IssueOwner;\n		Application.currentIssuePrivate = rec.Private;\n		Application.currentIssueProjectID = rec.ProjectID;\n    	Application.currentProjectID = rec.ProjectID;\n\n		//alert(\"ProjectID=\" + Application.currentProjectID );\n\n		if (!window.IssueForm) {\n			var message = \"Component ID \\\"IssueForm\\\", target of action \\\"Edit Record\\\" does not exist\";\n			isc.Log.logWarn(message);\n			if (isc.designTime) {\n				isc.say(message);\n			}\n		}\n		IssueForm.editRecord(rec);\n\n		IssueWindow.show();\n		IssueWindow.setTitle(\"Issue# \" + rec.IssueNumber + \": \" + rec.IssueTitle);\n\n	} else { this.setDisabled(true) ; }"
                /*		expansionRelatedProperties: INSERT HERE AND ADD COMMA TO ABOVE PROPERTY */
                	});	// END issueGrid create
                
                	var issueCriteria = { };
                	if (!(typeof tRec.IssueTypeID === "undefined")) {
                		issueCriteria.IssueTypeID = String(tRec.IssueTypeID);
                	}
                	if (!(typeof tRec.CategoryID === "undefined")) {
                		issueCriteria.CategoryID = String(tRec.CategoryID) ;
                	}
                	if (!(typeof tRec.ImpactID === "undefined")) {
                		issueCriteria.ImpactID = String(tRec.ImpactID) ;
                	}
                	Log.logDebug("************ fetching project issues with: " + this.echo(issueCriteria));
                
                	var issueResults = [];
                	issueResults = ProjectIssue.applyFilter(ProjectIssue.cacheData, issueCriteria);
                
                	var totalIssues = issueResults.length;
                	if (totalIssues > 0) {
                		Log.logDebug("************ issueResults[zero]: " + this.echo(issueResults[0]));
                		var currentIssueIndex = 0;
                		while (totalIssues > 0 && currentIssueIndex < totalIssues ) {
                			var rec = {};
                			rec = issueResults[currentIssueIndex];
                			Log.logDebug("************ currentIssueIndex = " + currentIssueIndex + " of " + totalIssues);
                			Log.logDebug("************ rec = issueResults[" + currentIssueIndex + "]: " + this.echo(rec));
                			if (duplicateIssue(rec.IssueNumber)) {
                				Log.logDebug("************ Duplicate IssueNumber: " + rec.IssueNumber + " at " + currentIssueIndex + " of " + totalIssues);
                				issueResults.splice(currentIssueIndex, 1);
                			} else {
                				currentIssueIndex++;
                			}
                			totalIssues = issueResults.length;
                		}
                		if (issueResults.length > 0) {
                			Log.logDebug("************ issueResults for setData: " + issueResults.length );
                			issueGrid.setData(issueResults);
                			Log.logDebug("************ issueResults for setData: " + issueResults.length );
                		} else {
                			Log.logDebug("************ issueResults.length = zero from duplicate check");
                			issueGrid = null;
                		} 	// end if length is zero from duplicate check
                	} else {
                		Log.logDebug("************ totalIssues = 0");
                		issueGrid = null;
                	} // end if (totalIssues > 0)
                Log.logDebug("************ returning expansion component: " + this.echo(issueGrid));
                return issueGrid;
                }	// END getIssueGrid function
                
                Application.currentProjectIssueCount = ProjectIssue.cacheData.getLength();
                if (Application.currentProjectIssueCount > 0) {
                	Log.logDebug("************ ProjectIssue.getClientOnlyDataSource call with recordcount " +  Application.currentProjectIssueCount);
                } else {
                	Log.logDebug("************ No project issue records fetched for ProjectID: " + Application.currentProjectID);
                	isc.say("No project issue records fetched for ProjectID: " + Application.currentProjectID);
                }   // end if (ProjectIssue.cacheData.getLenth() > 0)
                
                if (!OnlineAgendaGrid) {
                	var msg = "OnlineAgendaGrid does not exist."
                	Log.logError("************ " + msg);
                	isc.say(msg);
                } else {
                	OnlineAgendaGrid.destroy();
                }
                
                if (OnlineAgendaGrid) {
                	var msg = "OnlineAgendaGrid NOT DESTROYED."
                	Log.logError("************ " + msg);
                	isc.say(msg);
                } else {
                	var msg = "OnlineAgendaGrid destroyed."
                	Log.logDebug("************ " + msg);
                	//isc.say(msg);
                }
                
                var topicGrid = isc.ListGrid.create({
                	ID:"OnlineAgendaGrid",
                	autoDraw:false,
                	dataSource:"MeetingTopic",
                	overflow:"visible",
                //	showDetailFields:false,
                	canEdit:false,
                	selectionType:"single",
                	autoFetchData:false,
                	canRemoveRecords:false,
                	height:"100%",
                //	canExpandRecords:true,
                //	canExpandMultipleRecords:false,
                	getExpansionComponent: getIssueGrid,
                	fields:[
                		{
                			align:"center",
                			name:"TopicNumber",
                			title:"Order",
                			width:"5%"
                		},
                		{
                			name:"TopicTitle",
                			title:"Title",
                			width:"*"
                		},
                		{
                			name:"TopicLeaderID",
                			title:"Leader",
                			width:"10%",
                			valueField:"TopicLeaderID",
                			displayField:"TopicLeaderName"
                		},
                		{
                			name:"Session Type",
                			title:"Session Type",
                			width:"10%"
                		},
                		{
                			name:"Session Time",
                			title:"SessionTime",
                			width:"10%"
                		},
                		{
                			name:"ExpectedResults",
                			title:"Expected Results",
                			width:"*"
                		},
                		{
                			name:"SearchEnabled",
                			title:"SearchEnabled",
                			width:1,
                			showIf:"true"
                		},
                		{
                			name:"IssueTypeID",
                			title:"IssueTypeID",
                			width:1,
                			showIf:"true",
                			detail:true
                		},
                		{
                			name:"CategoryID",
                			title:"CategoryID",
                			width:1,
                			showIf:"true",
                			detail:true
                		},
                		{
                			name:"ImpactID",
                			title:"ImpactID",
                			width:1,
                			showIf:"true",
                			detail:true
                		}
                	],
                	rowDoubleClick:"Log.setPriority(\"Log\", 5);\nLog.logDebug(\"********************** OnlineAgendaGrid.recordDoubleClick\");\n\n    var rec = this.getSelectedRecord();\n    Application.currentMeetingTopicID = rec.MeetingTopicID;\n    Application.currentTopicNumber = rec.TopicNumber;\n    Application.currentTopicTitle = rec.TopicTitle;\n\n    Application.currentMeetingTypeID = rec.MeetingTypeID;\n    Application.currentMeetingName = rec.MeetingName;\n\n    Application.currentProjectID = rec.ProjectID;\n    Application.currentProjectNumber = rec.ProjectNumber;\n    Application.currentProjectTitle = rec.ProjectTitle;\n\n    //alert(\"MeetingTopicID=\" + Application.currentMeetingTopicID );\n\n    if (!window.MeetingTopicForm) {\n        var message = \"Component ID \\\"MeetingTopicForm\\\", target of action \\\"Edit Record\\\" does not exist\";\n        isc.Log.logWarn(message);\n        if (isc.designTime) {\n            isc.say(message);\n        }\n    }\n    MeetingTopicForm.editRecord(rec);\n\n    if (!window.MeetingTopicWindow) {\n        var message = \"Component ID \\\"MeetingTopicWindow\\\", target of action \\\"Show\\\" does not exist\";\n        isc.Log.logWarn(message);\n        if (isc.designTime) {\n            isc.say(message);\n        }\n    }\n    MeetingTopicWindow.setTitle(rec.MeetingName + \" Topic \" + rec.TopicNumber + \": \" + rec.TopicTitle);\n    MeetingTopicWindow.show();\n\n\nLog.logDebug(\"***END***END***END*** OnlineAgendaGrid.recordDoubleClick\")"
                });	// END topicGrid create
                
                topicGrid.fetchData( { "MeetingTypeID" : Application.currentMeetingTypeID },
                	function (dsResponse, data, dsRequest) {
                		Log.logDebug("************ meeting topic records fetched: " + this.echo(dsResponse));
                		if (dsResponse.status >= 0) {
                			if (dsResponse.totalRows > 0) {
                				var totalTopics = topicGrid.getTotalRows();
                				for (var currentTopicIndex = 0; currentTopicIndex < totalTopics; currentTopicIndex++) {
                					topicRecord = topicGrid.getRecord(currentTopicIndex);
                					if (topicRecord.SearchEnabled) {
                						Log.logDebug("************ expanding topic record: " + this.echo(topicRecord));
                ////////////////////////topicGrid.expandRecord(topicRecord);
                						Log.logDebug("************ topic record expanded: " + this.echo(topicRecord));
                					} else {
                						Log.logDebug("************ searchEnabled is false");		//currentTopicRecord.canExpand(false);
                					}	// end if SearchEnabled
                				}	// end topic for loop
                				Log.logDebug("************ done with topics");
                				topicGrid.draw(); //topicGrid.markForRedraw("topics populated)");
                				OnlineMeetingWindow.setTitle("Project:" + Application.currentProjectNumber + " " + Application.currentMeetingName);
                				OnlineMeetingWindow.markForRedraw("grids populated");
                				OnlineMeetingWindow.show();
                			} else {
                				isc.say("No meeting topic records fetched for MeetingTypeID: " + Application.currentMeetingTypeID);
                			}	// end if (dsResponse.totalRows > 0)
                		} else {
                			Log.logError("************ Error fetching meeting topic records for MeetingTypeID: " + Application.currentMeetingTypeID);
                			isc.say("Error fetching meeting topic records for MeetingTypeID: " + Application.currentMeetingTypeID);
                		}
                	},	// end of topicGrid.fetchData function
                	{ showPrompt: false } // requestProperties
                );	// end topicGrid.fetchData call
                
                Log.logDebug("****END***END***END*** OnlineMeetingButton.Click");
                I am forever in your debt.

                Rick

                Comment


                  #9
                  Hi Rick
                  From these logs and this code it's not obvious what the second issue is (the "_1" is undefined bug, with associated warnings about attempting to access destroyed widgets), but the first problem - the "_6" is undefined with a stack trace indicating it comes from "addEmbeddedComponent" looks to be a framework issue whereby calling "expandRecord()" before a ListGrid is drawn fails.

                  We will investigate this on our end, but in the meantime, can you try drawing the grid when the fetch completes, before calling 'expandRecord' on the various records you want to expand.

                  As an aside - here's a little chunk of test code doing essentially the same thing that appears to work for us:
                  Code:
                  isc.ListGrid.create({
                      ID: "categoryList",
                      width:500, height:300, 
                      alternateRecordStyles:true,
                      dataSource: supplyCategory,
                      
                      canExpandRecords: true,
                      autoDraw:false, autoFetchData:false,    
                      getExpansionComponent:function () {
                         return isc.Canvas.create({backgroundColor:"pink"})
                      }
                  });
                  
                  categoryList.fetchData({}, function () {
                      isc.logWarn("FETCH COMPLETE");
                      categoryList.draw();
                      categoryList.expandRecord(categoryList.data.get(0));
                  });
                  You can drop that into the feature explorer under:
                  http://<host>:<port>/isomorphic/system/reference/SmartClient_Explorer.html#expansionRelatedRecordsFS to try it out.

                  This seems like it should give you a working approach, and we're looking at fixing the framework issue whereby expandRecord() before draw() fails.

                  Regards
                  Isomorphic Software

                  Comment


                    #10
                    I appreciate your suggestion in depth. A newer approach I am taking is to build the whole OnlineMeetingWindow from scratch in the button code. That gives me much better control on what is drawn when.

                    I actually have that working to some extent. I suspect that there is no SC framework bug. You might want to wait to let me find out if my new approach works. There is no _6 undefined error.

                    I just need to verify that my data gets into the second level grids. Her is the new code on the button.
                    Code:
                    Log.setPriority("Log", 5);
                    Log.logDebug("***getExpansionComponent override window create******** OnlineMeetingButton.Click");
                    
                    var IssueDuplicateList = new Array( 0 );
                    
                    function duplicateIssue (issueNumber) {
                    	var dup;
                    	if (IssueDuplicateList.indexOf(issueNumber) < 0 ) {
                    		//IssueDuplicateList.push(issueNumber);
                    		dup = false;
                    	} else {
                    		dup = false;
                    	}
                    	return dup;
                    }
                    
                    function getIssueGrid (tRec) {
                    	Log.logDebug("************ creating expansion component for: " + this.echo(tRec));
                    	var issueGrid = isc.ListGrid.create({
                    		autoDraw:false,
                    	//	dataSource:"Issue",
                    	//	detailDS:"IncompleteTask",
                    		canEdit:false,
                    	//	canExpandRecords:true,
                    	//	canExpandMultipleRecords:false,
                    	//	expansionMode:"related",
                    		showDetailFields:false,
                    		autoFetchData:false,
                    		canRemoveRecords:false,
                    		fields:[
                    			{
                    				name:"IssueNumber",
                    				title:"Number",
                    				width:"5%"
                    			},
                    			{
                    				name:"IssueTitle",
                    				title:"Issue Title",
                    				width:"*"
                    			},
                    			{
                    				name:"Category",
                    				title:"Category",
                    				width:"9%",
                    				valueField:"CategoryID",
                    				displayField:"CategoryName"
                    			},
                    			{
                    				name:"IssueType",
                    				title:"Issue Type",
                    				width:"7%",
                    				valueField:"IssueTypeID",
                    				displayField:"IssueTypeName"
                    			},
                    			{
                    				name:"Impact",
                    				title:"Impact",
                    				width:"8%",
                    				valueField:"ImpactID",
                    				displayField:"ImpactName"
                    			},
                    			{
                    				name:"Owner",
                    				title:"Owner",
                    				width:"10%",
                    				valueField:"OwnerID",
                    				displayField:"OwnerName"
                    			},
                    			{
                    				name:"Private",
                    				title:"Private",
                    				width:"5%",
                    				type:"boolean"
                    			},
                    			{
                    				name:"IssueStatus",
                    				title:"Status",
                    				width:"7%"
                    			},
                    			{
                    				name:"ClosedDate",
                    				title:"Closed",
                    				width:"7%"
                    			},
                    			{
                    				name:"IssueDueDate",
                    				title:"Due",
                    				width:"7%"
                    			}
                    		],
                    		recordDoubleClick:"	if ( this.anySelected() ) {\n\n		var rec = this.getSelectedRecord();\n\n		Application.currentIssueID = rec.IssueID;\n		Application.currentIssueNumber = rec.IssueNumber;\n		Application.currentIssueTitle = rec.IssueTitle;\n		Application.currentIssueStatus = rec.IssueStatus;\n		Application.currentIssueOwnerID = rec.OwnerID;\n		Application.currentIssueID = rec.IssueID;\n		Application.currentIssueOwnerID = rec.OwnerID;\n		Application.currentIssueOwnerName = rec.IssueOwner;\n		Application.currentIssuePrivate = rec.Private;\n		Application.currentIssueProjectID = rec.ProjectID;\n    	Application.currentProjectID = rec.ProjectID;\n\n		//alert(\"ProjectID=\" + Application.currentProjectID );\n\n		if (!window.IssueForm) {\n			var message = \"Component ID \\\"IssueForm\\\", target of action \\\"Edit Record\\\" does not exist\";\n			isc.Log.logWarn(message);\n			if (isc.designTime) {\n				isc.say(message);\n			}\n		}\n		IssueForm.editRecord(rec);\n\n		IssueWindow.show();\n		IssueWindow.setTitle(\"Issue# \" + rec.IssueNumber + \": \" + rec.IssueTitle);\n\n	} else { this.setDisabled(true) ; }"
                    /*		expansionRelatedProperties: INSERT HERE AND ADD COMMA TO ABOVE PROPERTY */
                    	});	// END issueGrid create
                    
                    	var issueCriteria = { };
                    	if (!(typeof tRec.IssueTypeID === "undefined")) {
                    		issueCriteria.IssueTypeID = String(tRec.IssueTypeID);
                    	}
                    	if (!(typeof tRec.CategoryID === "undefined")) {
                    		issueCriteria.CategoryID = String(tRec.CategoryID) ;
                    	}
                    	if (!(typeof tRec.ImpactID === "undefined")) {
                    		issueCriteria.ImpactID = String(tRec.ImpactID) ;
                    	}
                    	Log.logDebug("************ fetching project issues with: " + this.echo(issueCriteria));
                    
                    	var issueResults = [];
                    	issueResults = ProjectIssue.applyFilter(ProjectIssue.cacheData, issueCriteria);
                    
                    	var totalIssues = issueResults.length;
                    	if (totalIssues > 0) {
                    		Log.logDebug("************ issueResults[zero]: " + this.echo(issueResults[0]));
                    		var currentIssueIndex = 0;
                    		while (totalIssues > 0 && currentIssueIndex < totalIssues ) {
                    			var rec = {};
                    			rec = issueResults[currentIssueIndex];
                    			Log.logDebug("************ currentIssueIndex = " + currentIssueIndex + " of " + totalIssues);
                    			Log.logDebug("************ rec = issueResults[" + currentIssueIndex + "]: " + this.echo(rec));
                    			if (duplicateIssue(rec.IssueNumber)) {
                    				Log.logDebug("************ Duplicate IssueNumber: " + rec.IssueNumber + " at " + currentIssueIndex + " of " + totalIssues);
                    				issueResults.splice(currentIssueIndex, 1);
                    			} else {
                    				currentIssueIndex++;
                    			}
                    			totalIssues = issueResults.length;
                    		}
                    		if (issueResults.length > 0) {
                    			Log.logDebug("************ issueResults for setData: " + issueResults.length );
                    			issueGrid.setData(issueResults);
                    			Log.logDebug("************ issueResults for setData: " + issueResults.length );
                    			issueGrid.draw();
                    		} else {
                    			Log.logDebug("************ issueResults.length = zero from duplicate check");
                    			issueGrid = null;
                    		} 	// end if length is zero from duplicate check
                    	} else {
                    		Log.logDebug("************ totalIssues = 0");
                    		issueGrid = null;
                    	} // end if (totalIssues > 0)
                    Log.logDebug("************ returning expansion component: " + this.echo(issueGrid));
                    return issueGrid;
                    }	// END getIssueGrid function
                    
                    Application.currentProjectIssueCount = ProjectIssue.cacheData.getLength();
                    if (Application.currentProjectIssueCount > 0) {
                    	Log.logDebug("************ ProjectIssue.getClientOnlyDataSource call with recordcount " +  Application.currentProjectIssueCount);
                    } else {
                    	Log.logDebug("************ No project issue records fetched for ProjectID: " + Application.currentProjectID);
                    	isc.say("No project issue records fetched for ProjectID: " + Application.currentProjectID);
                    }   // end if (ProjectIssue.cacheData.getLenth() > 0)
                    
                    var topicGrid = isc.ListGrid.create({
                    	ID:"OnlineAgendaGrid",
                    	autoDraw:false,
                    	ref:"OnlineAgendaGrid",
                    	dataSource:"MeetingTopic",
                    	overflow:"visible",
                    	showDetailFields:false,
                    	canEdit:false,
                    	selectionType:"single",
                    	autoFetchData:false,
                    	canRemoveRecords:false,
                    	height:"100%",
                    	canExpandRecords:true,
                    	canExpandMultipleRecords:false,
                    	getExpansionComponent: getIssueGrid,
                    	fields:[
                    		{
                    			align:"center",
                    			name:"TopicNumber",
                    			title:"Order",
                    			width:"5%"
                    		},
                    		{
                    			name:"TopicTitle",
                    			title:"Title",
                    			width:"*"
                    		},
                    		{
                    			name:"TopicLeaderID",
                    			title:"Leader",
                    			width:"10%",
                    			valueField:"TopicLeaderID",
                    			displayField:"TopicLeaderName"
                    		},
                    		{
                    			name:"Session Type",
                    			title:"Session Type",
                    			width:"10%"
                    		},
                    		{
                    			name:"Session Time",
                    			title:"SessionTime",
                    			width:"10%"
                    		},
                    		{
                    			name:"ExpectedResults",
                    			title:"Expected Results",
                    			width:"*"
                    		},
                    		{
                    			name:"SearchEnabled",
                    			title:"SearchEnabled",
                    			width:1,
                    			showIf:"true"
                    		},
                    		{
                    			name:"IssueTypeID",
                    			title:"IssueTypeID",
                    			width:1,
                    			showIf:"true",
                    			detail:true
                    		},
                    		{
                    			name:"CategoryID",
                    			title:"CategoryID",
                    			width:1,
                    			showIf:"true",
                    			detail:true
                    		},
                    		{
                    			name:"ImpactID",
                    			title:"ImpactID",
                    			width:1,
                    			showIf:"true",
                    			detail:true
                    		}
                    	],
                    	rowDoubleClick:"Log.setPriority(\"Log\", 5);\nLog.logDebug(\"********************** OnlineAgendaGrid.recordDoubleClick\");\n\n    var rec = this.getSelectedRecord();\n    Application.currentMeetingTopicID = rec.MeetingTopicID;\n    Application.currentTopicNumber = rec.TopicNumber;\n    Application.currentTopicTitle = rec.TopicTitle;\n\n    Application.currentMeetingTypeID = rec.MeetingTypeID;\n    Application.currentMeetingName = rec.MeetingName;\n\n    Application.currentProjectID = rec.ProjectID;\n    Application.currentProjectNumber = rec.ProjectNumber;\n    Application.currentProjectTitle = rec.ProjectTitle;\n\n    //alert(\"MeetingTopicID=\" + Application.currentMeetingTopicID );\n\n    if (!window.MeetingTopicForm) {\n        var message = \"Component ID \\\"MeetingTopicForm\\\", target of action \\\"Edit Record\\\" does not exist\";\n        isc.Log.logWarn(message);\n        if (isc.designTime) {\n            isc.say(message);\n        }\n    }\n    MeetingTopicForm.editRecord(rec);\n\n    if (!window.MeetingTopicWindow) {\n        var message = \"Component ID \\\"MeetingTopicWindow\\\", target of action \\\"Show\\\" does not exist\";\n        isc.Log.logWarn(message);\n        if (isc.designTime) {\n            isc.say(message);\n        }\n    }\n    MeetingTopicWindow.setTitle(rec.MeetingName + \" Topic \" + rec.TopicNumber + \": \" + rec.TopicTitle);\n    MeetingTopicWindow.show();\n\n\nLog.logDebug(\"***END***END***END*** OnlineAgendaGrid.recordDoubleClick\")"
                    });	// END topicGrid create
                    topicGrid.draw();
                    topicGrid.fetchData( { "MeetingTypeID" : Application.currentMeetingTypeID },
                    	function (dsResponse, data, dsRequest) {
                    		Log.logDebug("************ meeting topic records fetched: " + this.echo(dsResponse));
                    		if (dsResponse.status >= 0) {
                    			if (dsResponse.totalRows > 0) {
                    				var totalTopics = topicGrid.getTotalRows();
                    				for (var currentTopicIndex = 0; currentTopicIndex < totalTopics; currentTopicIndex++) {
                    					topicRecord = topicGrid.getRecord(currentTopicIndex);
                    					if (topicRecord.SearchEnabled) {
                    						Log.logDebug("************ expanding topic record: " + this.echo(topicRecord));
                    						topicGrid.expandRecord(topicRecord);
                    						Log.logDebug("************ topic record expanded: " + this.echo(topicRecord));
                    					} else {
                    						Log.logDebug("************ searchEnabled is false");		//currentTopicRecord.canExpand(false);
                    					}	// end if SearchEnabled
                    				}	// end topic for loop
                    				Log.logDebug("************ done with topics. redrawing topicGrid");
                    				topicGrid.markForRedraw("topics populated)");
                    
                    				Log.logDebug("************ isc.TabSet.create OnlineMeetingTabs");
                    				isc.TabSet.create({
                    					ID:"OnlineMeetingTabs",
                    					autoDraw:false,
                    					ref:"OnlineMeetingTabs",
                    					tabs:[
                    						{
                    							title:"Agenda",
                    							pane:OnlineAgendaGrid,
                    							ID:"AgendaTab"
                    						},
                    						{
                    							title:"Attendees",
                    							ID:"AttendeeTab"
                    						}
                    					],
                    					destroyPanes:false,
                    					height:"90%"
                    				});
                    				Log.logDebug("************ isc.DynamicForm.create OnlineMeetingForm");
                    				isc.DynamicForm.create({
                    					ID:"OnlineMeetingForm",
                    					autoDraw:false,
                    					dataSource:"MeetingType",
                    					numCols:8,
                    					fields:[
                    						{
                    							name:"RowSpacerItem0",
                    							height:5,
                    							_constructor:"RowSpacerItem"
                    						},
                    						{
                    							name:"Project",
                    							title:"Project: <number and title>",
                    							_constructor:"StaticTextItem"
                    						},
                    						{
                    							name:"MeetingName",
                    							title:"Meeting Name",
                    							width:"*",
                    							_constructor:"TextItem"
                    						},
                    						{
                    							name:"TeleconferenceInfo",
                    							title:"Teleconference Information",
                    							width:"*",
                    							height:"*",
                    							colSpan:5,
                    							rowSpan:2,
                    							startRow:true,
                    							_constructor:"TextAreaItem"
                    						},
                    						{
                    							name:"NewIssueButton",
                    							title:"NEW ISSUE",
                    							startRow:false,
                    							endRow:false,
                    							_constructor:"ButtonItem"
                    						},
                    						{
                    							name:"CreateMinutesButton",
                    							title:"CREATE MINUTES",
                    							startRow:false,
                    							_constructor:"ButtonItem"
                    						},
                    						{
                    							ID:"isc_RowSpacerItem_1",
                    							name:"RowSpacerItem1",
                    							height:10,
                    							_constructor:"RowSpacerItem"
                    						}
                    					],
                    					wrapItemTitles:true,
                    					validateOnChange:true,
                    					width:"100%",
                    					height:"10%",
                    					autoFetchData:true,
                    					autoFetchTextMatchStyle:"exact"
                    				});
                    
                    				OnlineMeetingForm.setValue("MeetingName", Application.currentMeetingName);
                    				OnlineMeetingForm.setValue("TeleconferenceInfo", Application.currentTeleconferenceInfo);
                    
                    				Log.logDebug("************ isc.Window.create OnlineMeetingWindow");
                    				isc.Window.create({
                    					ID:"OnlineMeetingWindow",
                    					autoDraw:false,
                    					isModal:true,
                    					visibility:"hidden",
                    					title:"Project:" + Application.currentProjectNumber + " " + Application.currentMeetingName,
                    					showMinimizeButton:false,
                    					maximized:true,
                    					showMaximizeButton:true,
                    					showStatusBar:false,
                    					showResizer:false,
                    					items:[
                    						OnlineMeetingForm,
                    						OnlineMeetingTabs
                    					],
                    					width:"100%",
                    					height:"100%",
                    					canDragReposition:false,
                    					canDragResize:false,
                    					showShadow:false
                    				});
                    
                    				//OnlineMeetingWindow.draw();
                    				OnlineMeetingWindow.show();
                    			} else {
                    				isc.say("No meeting topic records fetched for MeetingTypeID: " + Application.currentMeetingTypeID);
                    			}	// end if (dsResponse.totalRows > 0)
                    		} else {
                    			Log.logError("************ Error fetching meeting topic records for MeetingTypeID: " + Application.currentMeetingTypeID);
                    			isc.say("Error fetching meeting topic records for MeetingTypeID: " + Application.currentMeetingTypeID);
                    		}
                    	},	// end of topicGrid.fetchData function
                    	{ showPrompt: false } // requestProperties
                    );	// end topicGrid.fetchData call
                    
                    Log.logDebug("****END***END***END*** OnlineMeetingButton.Click");
                    I need to take a break for an hour.

                    Thanks,

                    Rick

                    Comment


                      #11
                      I got my approach to work, sort of. I get a two level array with the last row expanded. When I doubleClick one of the issues, the IssueWindow opens up with it.

                      The change that did it was moving the topicGrid.draw() just before the fetchData. I suspect now it had the structure for each expandRecord.

                      The problem is that each time I click on a row + icon and expand a topic record, that the expandRecord function I supplied is called again. I need to turn this off somehow without destroying what was returned originally. It would be helpful to know how to do that. I will try returning null. But, .....

                      Thanks,

                      Rick

                      Comment


                        #12
                        Well, I am much closer. I will get after it again in the AM.

                        It would help to know a few things:

                        When does my issueGrid get its ID? And, can I get its value via issueGrid.ID ?

                        Is there an easy way to return an 'empty' grid that shows something like "There are no items"?

                        I won't need any answers until after I have consumed at least two cups of coffee.

                        Just a suggestion. In the case expandRecord returns null, turn off expansion and lose the '+' icon.

                        Thanks,

                        Rick

                        Comment


                          #13
                          A widget's ID is auto generated as soon as class.create(...) is called. Of course you can also pass in an ID as part of a configuration block - but you wouldn't want to do that with expansion components as the ID needs to be unique and this would be a likely way to end up trying to create two components with the same ID (which auto-destroys the earlier created one).
                          You can access the ID via either widget.ID or widget.getID()


                          The emptyMessage property allows you to specify some text to display in a grid with no data.

                          We can't easily disable expansion of a record if expandRecord() returns null (or if getExpansionComponent() returns null). That method is lazily called when the record is expanded at which time the expansion icon is already showing.

                          You can set canExpand to false on your record to suppress expansion altogether, but that may not be convenient for your use case.

                          Comment


                            #14
                            I am going to declare a cautious victory. Attached is the result. I was able to save the expansion component ID's and get them back via Canvas.getById(). This is evidenced by the emptyMessage:
                            No issues found to show for this topic.
                            This would not be the case in normal use of the software. But, it is here to force that test case.

                            I am cautious because I don't know how long the expansion components I create will stick around. I have a global array with their ID's, so I could destroy them when the window is closed.

                            Thanks for all the insightful, thoughtful and timely support, and putting up with lots of crazy. I had the design for this dialog two summers ago. It means a lot to me to see it working.

                            Rick
                            Attached Files

                            Comment


                              #15
                              Glad you have things working. Just a quick follow up to note that we did indeed find a framework error that was causing 'expandRecord()' to fail if called before a grid had first been drawn, which is now resolved.

                              Comment

                              Working...
                              X