Use cWebBusinessProcess.pkg Use DataDict.pkg Use cWebReport.pkg Use Customer.DD Object oCustomer is a cWebBusinessProcess Set pbClearAfterSave to False Set psDescription to "Customer: Entry, Report and Maintenance" Object Customer_DD is a Customer_DataDictionary Send DefineAllExtendedFields Send DefineAllExtendedFields End_Object // Customer_DD Set Main_DD to Customer_DD Object oReport is a cWebReport Procedure OnPageTop Send WriteHtmlTableBegin 'border="0" width="99%" Class="ReportTable"' Send WriteHtmlRowBegin Send WriteHtmlCellHeader 'Number' 'Class="Header" Align="right"' Send WriteHtmlCellHeader 'Customer Name' 'Class="Header" Align="left"' Send WriteHtmlCellHeader 'Phone' 'Class="Header" Align="left"' Send WriteHtmlCellHeader 'Balance' 'Class="Header" Align="right"' Send WriteHtmlRowEnd End_Procedure // OnPageTop Procedure OnBody String sText sName sPhone Number nID nBalance Send WriteHtmlRowBegin Get ddValueEncode "Customer.Customer_Number" To nID Get ddValueEncode "Customer.Name" To sName Get ddValueEncode "Customer.Phone_Number" To sPhone Get ddValueEncode "Customer.Balance" To nBalance Get AddRowIdLink (FormatNumber(nId,0)) To sText Send WriteHtmlCell sText 'Class="Data" Align="right"' Get AddRowIdLink sName To sText Send WriteHtmlCell sText 'Class="Data" Align="left"' Send WriteHtmlCell sPhone 'Class="Data" Align="left"' Send WriteHtmlCell (FormatNumber(nBalance,2)) 'Class="Data" Align="right"' Send WriteHtmlRowEnd End_Procedure // OnBody // This also works, using expressions instead of Get. Shorter but harder to read // Procedure OnBody // String sText // // Send WriteHtmlRowBegin // Get AddRowIdLink (FormatNumber(ddValue(self,"Customer.Customer_Number"),0)) to sText // Send WriteHtmlCell sText 'Class="Data" Align="right"' // Send WriteHtmlCell (ddValue(self,"Customer.Name")) 'Class="Data" Align="left"' // Send WriteHtmlCell (ddValue(self,"Customer.Phone_Number")) 'Class="Data" Align="left"' // Send WriteHtmlCell (FormatNumber(ddValue(self,"Customer.Balance"),2)) 'Class="Data" Align="right"' // Send WriteHtmlRowEnd // End_Procedure // OnBody Procedure OnPageBottom // Output table end tag Send WriteHtmlTableEnd End_Procedure // OnPageBottom Function RunCustomerReport Integer iIndex RowId riStart Integer iMax Returns RowId RowId riEnd Integer iStat Set piOrdering To iIndex Set piMaxCount To iMax Set piMaxCountBreakLevel To 0 Set priStartRowId To riStart Get DoRunReport To iStat Get priLastRowId To riEnd Function_Return riEnd End_Function // RunCustomerReport End_Object // oReport { Published = True } { Description = "" } Procedure SetHRefName String sName Set psHRefname Of oReport To sName End_Procedure // SetHRefName { Published = True } { Description = "" } Function RunCustomerReport Integer iIndex string sStart Integer iMax Returns string RowId riStart riEnd Move (DeserializeRowId(sStart)) to riStart Get RunCustomerReport Of oReport iIndex riStart iMax To riEnd Function_Return (SerializeRowId(riEnd)) End_Function // RunCustomerReport // Register WBO interfaces Send RegisterStandardInterface // Send RegisterDebugInterface // Send RegisterFullErrorInterface // Send RegisterAutoEntryInterface End_Object // oCustomer