Flynet Studio Code Generation Properties

ListClass - Custom Code

ListClass - Custom Code

Previous topic Next topic  

ListClass - Custom Code

Previous topic Next topic  

Contains the complete user list class module for the multirow FieldMap (FieldmapName.cs).  The user class is used for any overrides in the base class (MappedList).

 

 Note: when this property is non-blank, the ListUserRegion property is ignored...

 

The Custom Code properties are special code-oriented string properties with a dedicated editor and the capability for import/export functionality between the Tester GUI generations and the full application generation.

 

Since many multirow lists on screens can be non-standard in the way the data is presented, the user list classes are generated so that a developer can make any degree of modifications necessary to support any non-standard behavior.

 

Once the ListClass property is non-empty, it will always be used to generated the user list module, so do not make any further changes to the actual modules, unless it is to test updates prior to copying the contents of the update module file back to this property.

 

Example of a user list class for one of the sample Insure screens--this is what would be copied in full into this property to propagate changes across all generations in involving this multirow fieldmap:

 

// Generated List Class Copyright Flynet LTD, Inventu Corporation 2005

// All rights reserved.  Provided for use under Flynet Viewer License.

using System;

using System.Collections;

using InsureUI2;

using InsureUI2.Tasks;

 

namespace InsureUI2.Lists

{

 /// <summary>

 /// AcctTrans_rowDataList is inherited from the MappedList class to implement a custom list

 /// based on a multi-row definition for the active screen definition during a generation

 /// </summary>

 public class AcctTrans_rowDataList : MappedList

 {

         ScreenID activeListScreenID;

         /// <summary>

         /// Constructor of a new AcctTrans_rowDataList object

         /// </summary>

         /// <param name="ts">Containing TaskSession object</param>

         /// <param name="searchArgs">Optional searchArgs, for user extensions and future enhancements</param>

         /// <param name="listFormat">List format, for user extensions, default is "subfile"</param>

         /// <param name="maxScreens">Maximum screens to page forward when all rows or UI block is requested</param>

         /// <param name="cacheType">Caching, for cases where the contents of a list may be cached for multiple accesses</param>

         public AcctTrans_rowDataList(TaskSession ts, string searchArgs, string listFormat, int maxScreens, ListCaching cacheType) :

                 base(ts,searchArgs,listFormat,maxScreens,cacheType)

         {

                 activeListScreenID=ts.activeScreen;

                 listMapID=MapID.AcctTrans_rowData;

                 this.rowHeight=1;

         }

 

         /// <summary>

         /// GenHeadingsScript will create the Table header for the mapped list

         /// </summary>

         /// <param name="gs">A string builder object for current Javascript stream</param>

         /// <param name="actionTarget">The name of the target for any posted values</param>

         /// <param name="cached">Has the header and other list information been cached?</param>

         public override void GenHeadingsScript(System.Text.StringBuilder gs, string actionTarget, bool cached)

         {

                 ColBuilder cb;

                 gs.Append("SetDefaultActions('');\n");

                 gs.Append("listFormat='"+listFormat+"';\n");

                 gs.Append("actionTarget='"+actionTarget+"';\n");

                 if (popupActions)

                         gs.Append("fnSubmitFilter=FVListPopup;\n");

                         

                 if (cached)

                         gs.Append("RestoreCachedList('" + listMapID.ToString() + "');\n");

                 if (!cached)

                 {

                         cb=new ColBuilder(listMapID,false);

                         cb.AddColumn("Date","Date (click to sort column)",FieldID.Date,KeyType.none,false,null);

                         cb.AddColumn("Action","Action (click to sort column)",FieldID.Action_AcctTrans_rowData,KeyType.none,false,null);

                         cb.AddColumn("EffDue","EffDue (click to sort column)",FieldID.EffDue,KeyType.none,false,null);

                         cb.AddColumn("Amount","Amount (click to sort column)",FieldID.Amount,KeyType.none,true,null);

                         cb.AddColumn("MinDue","MinDue (click to sort column)",FieldID.MinDue,KeyType.none,true,null);

                         cb.AddColumn("Description","Description (click to sort column)",FieldID.Description,KeyType.none,false,null);

                         cb.AddColumn("Lob","Lob (click to sort column)",FieldID.Lob,KeyType.none,false,null);

                         cb.GenHeadings(gs);

                 }        

                 FinishHeadingsScript(gs);

         }

 

         /// <summary>

         /// GenBodyScript is used to generate the next set of row blocks into the provided

         /// stringbuilder object.  The returned text is all javascript...

         /// </summary>

         /// <param name="gs">Script string builder to write to</param>

         /// <param name="cached">Passed by the host, if the header and actions are already cached</param>

         public override void GenBodyScript(System.Text.StringBuilder gs, bool cached)

         {

                 InsureUI2.AcctTrans_rowDataMap mp;

                 while (!EOF)

                 {

                         mp=(InsureUI2.AcctTrans_rowDataMap) GetNextListRow();

                         GenRow(gs,seq++,false, mp.Date, mp.Action_AcctTrans_rowData, mp.EffDue, mp.Amount, mp.MinDue, mp.Description, mp.Lob);

                 }

                 FinishBodyScript(gs, cached);

         }

 

         /// <summary>

         /// ActiveRow returns the current InsureUI2.AcctTrans_rowDataMap row read by either GetNextListRow() or

         /// NextRow() methods

         /// </summary>

         public InsureUI2.AcctTrans_rowDataMap ActiveRow

         {

                 get{

                         return (InsureUI2.AcctTrans_rowDataMapthis.nextListRow;

                 }

         }

 

         /// <summary>

         /// GetRows is used to gather the next set of row blocks and return them

         /// as an array of InsureUI2.AcctTrans_rowDataMap structures

         /// </summary>

         public InsureUI2.AcctTrans_rowDataMap[] GetRows()

         {

                 ArrayList rows=new ArrayList();

                 while (!EOF)

                         rows.Add(GetNextListRow());

                 return (InsureUI2.AcctTrans_rowDataMap[]) rows.ToArray(typeof(InsureUI2.AcctTrans_rowDataMap));        

         }

 

         /// <summary>

         /// Returns a InsureUI2.AcctTrans_rowDataMap row object for this list--use the atRow integer

         /// for the index into the active map in ts.oMaps.

         /// 

         /// If the key value in the row indicates a blank

         /// row, will set lineWasBlank=true;

         /// </summary>

         /// <returns>A InsureUI2.AcctTrans_rowDataMap object from a screen read for this row</returns>

         protected override object ReadListRow()

         {

                 InsureUI2.AcctTrans_rowDataMap mp=ts.maps.readAcctTrans_rowData(this.atRow);

                 if (LineIsBlank(mp))

                         lineWasBlank=true;

                 return mp;

         }

         

         /// <summary>

         /// Initialize the details for this list that are different than may be for the

         /// base class defaults

         /// </summary>

         protected override void SetListDetails()

         {

                 maxRows=14;

         }

 

         #region Custom Methods (Preserve)

         // All user-written code in this region is preserved during code generation, simplifying

         // any ongoing merge requirements

         /// <summary>

         /// Check to see if the row being read is blank / empty

         /// </summary>

         /// <param name="mp">Active PolicyList_RowMap</param>

         /// <returns>true if the key column or other indicator indicates this is not valid data</returns>

         bool LineIsBlank(InsureUI2.AcctTrans_rowDataMap mp)

         {

                 return (mp.Date.Trim() == "");

         }

 

         /// <summary>

         /// When the end of a screen is reached without a blank row, this method will

         /// provide an indication from the active screen if more rows are available

         /// </summary>

         /// <returns>true of indications on the screen are that more rows exist</returns>

         protected override bool MoreRowsAvailable()

         {

                 //TODO verify that the more rows available logic is accurate

                 return (ts.GetFieldText(MapID.AcctTrans, FieldID.MoreIndicatorX) == "MORE...");

         }

         #endregion Custom Methods

 

         /// <summary>

         /// NavToListScreen ensures that the activeListScreenID is displayed.

         /// The activeListScreenID is set when the ... object is created, in the

         /// constructor, so a Mappedlist class should only be created when the

         /// source screen is displayed.

         /// </summary>

         /// <returns>Results of NavToScreen for target screen</returns>

         public override TaskState NavToListScreen()

         {

                 return ts.activeTask.NavToScreen(activeListScreenID,TaskState.OK);

         }

 

         /// <summary>

         /// Will wait for the target list screen to be displayed.  As with the 

         /// NavToListScreen method, this uses the activeListScreenID property,

         /// set at construction of the object.

         /// </summary>

         /// <returns>ScreenID of the activeListScreenID or throws exception</returns>

         protected override ScreenID WaitForListScreen()

         {

                 ts.WaitForScreen(activeListScreenID);

                 return ts.activeScreen;

         }

 }

}