B4J Tutorial [Pen&Paper]: ABMaterial Stats

As part of my ABMaterial explorer tendencies, I delved on working on a dashboard that will give stats about the previous and latest version of ABMaterial. This is based on 3.5 and 3.75 libraries.

To perform this task, both the XML files for both versions were compared using the Xml2Map library and the details stored in a SQLite database for later analysis. I had wanted to do this to have a complete picture of the beauty and size of this framework. It is huge indeed!!!

dashboard.png


The above dashboard has been done using the CircularProgress bar that has just been added as part of B4X XUI. Now let me explain what this dashboard says.

The dashboard is broken up into rows of progress elements and headers being 'Classes', 'Properties', 'Fields', 'Methods' and 'Events'. As an example, all progress related to 'Properties' is blue in color.

Row 1:
The total number of classes (incl theme related classes) that are public is 163. These make 155 properties, 2,269 fields (these are like constants and other properties), 1,509 methods (e.g. Initialize, SetFixed... etc) and 110 events.

Row 2 & 3:
Version 3.5 boasts 2 new classes. There are 67 new 'Properties', 88 new 'Fields', 52 new 'Methods' and 6 new 'Events'. Of these properties, fields, methods and events, 64, 82, 40 and 2 affect already existing classes respectively. The Methods and Events in Row 3 include any updates to the structure of the event definition that might have been made.

Row 4:
There are also things that were perhaps removed/renamed with version 3.75, being 4 'Fields' and 3 'Methods'

NB: This dashboard does not in anyway acts as a replacement for the ReadMe files provided by the Author of this library.
 
Last edited:

Mashiane

Expert
Licensed User
Longtime User
Here is the source of generating the content from the db that results in the dashboard. NB: I am using wait for just for experiment purposes to try and understand it, you can remove it.

Pass the paths of both xml files...

B4X:
Sub WhatNew(pl As String, cl As String)
    If pl.Length = 0 Or cl.Length = 0 Then
        jMash.msgboxwarn(MainForm,"Error","The Previous and or Current Libraries have not been specified!!")
        Return
    End If
    'process the old library
    If pl.EndsWith(".xml") Then
        wait for (ABMaterialDocument(pl,"p")) complete(Result As Boolean)
    End If
    If cl.EndsWith(".xml") Then
        wait for (ABMaterialDocument(cl,"c")) complete(Result As Boolean)
    End If
    jMash.MsgBoxInform(MainForm,"What's New","Library comparison is complete!")
End Sub

And this is the engine...

B4X:
Sub ABMaterialDocument(sPath As String,pc As String) As ResumableSub
    'open the database to work with
    Dim helpdb As SQL
    helpdb.InitializeSQLite(File.dirapp,"abmaterialhelp.db",True)
    'classes
    DBUtils.InitializeNewTable("Classes","id","id")
    DBUtils.AddFieldOfText("ClassName",True,True)
    DBUtils.addfieldoftext("OnPrevious",True,False)
    DBUtils.addfieldoftext("OnCurrent",True,False)
    DBUtils.addfieldoftext("PVersion",True,False)
    DBUtils.addfieldoftext("CVersion",True,False)
    DBUtils.AddFieldOfText("Author",True,False)
    DBUtils.AddFieldOfText("Comment",True,False)
    DBUtils.AddFieldOfText("IsNewClass",True,False)
    DBUtils.AddFieldOfText("IsTheme",True,False)
    DBUtils.AddFieldOfText("Owner",True,False)
    DBUtils.AddFieldOfText("IsLibrary",True,False)
    DBUtils.CreateTableFromDefinition(helpdb)
    'properties
    DBUtils.InitializeNewTable("Properties","id","id")
    DBUtils.AddFieldOfText("PropertyKey",True,True)
    DBUtils.AddFieldOfText("ClassName",True,False)
    DBUtils.AddFieldOfText("PropertyName",True,False)
    DBUtils.AddFieldOfText("ReturnType",True,False)
    DBUtils.AddFieldOfText("Comment",True,False)
    DBUtils.addfieldoftext("OnPrevious",True,False)
    DBUtils.addfieldoftext("OnCurrent",True,False)
    DBUtils.addfieldoftext("PVersion",True,False)
    DBUtils.addfieldoftext("CVersion",True,False)
    DBUtils.AddFieldOfText("IsNewClass",True,False)
    DBUtils.AddFieldOfText("IsTheme",True,False)
    DBUtils.AddFieldOfText("IsLibrary",True,False)
    DBUtils.CreateTableFromDefinition(helpdb)
    'fields
    DBUtils.InitializeNewTable("Fields","id","id")
    DBUtils.AddFieldOfText("FieldKey",True,True)
    DBUtils.AddFieldOfText("ClassName",True,False)
    DBUtils.AddFieldOfText("FieldName",True,False)
    DBUtils.AddFieldOfText("ReturnType",True,False)
    DBUtils.AddFieldOfText("Comment",True,False)
    DBUtils.addfieldoftext("OnPrevious",True,False)
    DBUtils.addfieldoftext("OnCurrent",True,False)
    DBUtils.addfieldoftext("PVersion",True,False)
    DBUtils.addfieldoftext("CVersion",True,False)
    DBUtils.addfieldoftext("OnProperties",True,False)
    DBUtils.AddFieldOfText("IsNewClass",True,False)
    DBUtils.AddFieldOfText("IsTheme",True,False)
    DBUtils.AddFieldOfText("IsLibrary",True,False)
    DBUtils.CreateTableFromDefinition(helpdb)
    'methods
    DBUtils.InitializeNewTable("Methods","id","id")
    DBUtils.AddFieldOfText("MethodKey",True,True)
    DBUtils.AddFieldOfText("ClassName",True,False)
    DBUtils.AddFieldOfText("MethodName",True,False)
    DBUtils.AddFieldOfText("ReturnType",True,False)
    DBUtils.AddFieldOfText("Comment",True,False)
    DBUtils.addfieldoftext("OnPrevious",True,False)
    DBUtils.addfieldoftext("OnCurrent",True,False)
    DBUtils.addfieldoftext("PVersion",True,False)
    DBUtils.addfieldoftext("CVersion",True,False)
    DBUtils.addfieldoftext("PParameters",True,False)
    DBUtils.addfieldoftext("CParameters",True,False)
    DBUtils.addfieldoftext("ParametersMatch",True,False)
    DBUtils.AddFieldOfText("IsNewClass",True,False)
    DBUtils.AddFieldOfText("IsTheme",True,False)
    DBUtils.AddFieldOfText("IsLibrary",True,False)
    DBUtils.CreateTableFromDefinition(helpdb)
    'events
    'fields
    DBUtils.InitializeNewTable("Events","id","id")
    DBUtils.AddFieldOfText("EventKey",True,True)
    DBUtils.AddFieldOfText("ClassName",True,False)
    DBUtils.AddFieldOfText("EventName",True,False)
    DBUtils.AddFieldOfText("Comment",True,False)
    DBUtils.addfieldoftext("OnPrevious",True,False)
    DBUtils.addfieldoftext("OnCurrent",True,False)
    DBUtils.addfieldoftext("PVersion",True,False)
    DBUtils.addfieldoftext("CVersion",True,False)
    DBUtils.addfieldoftext("PParameters",True,False)
    DBUtils.addfieldoftext("CParameters",True,False)
    DBUtils.addfieldoftext("ParametersMatch",True,False)
    DBUtils.AddFieldOfText("IsNewClass",True,False)
    DBUtils.AddFieldOfText("IsTheme",True,False)
    DBUtils.AddFieldOfText("IsLibrary",True,False)
    DBUtils.CreateTableFromDefinition(helpdb)
    'clear the tables if we on previous version
    If pc = "p" Then
        'clear the tables
        DBUtils.TableClear(helpdb,"Classes")
        DBUtils.TableClear(helpdb,"Fields")
        DBUtils.TableClear(helpdb,"Methods")
        DBUtils.TableClear(helpdb,"Properties")
        DBUtils.TableClear(helpdb,"Events")
    End If
    Dim classList1 As List
    classList1.initialize
    Dim classList2 As List
    classList2.initialize
    Dim propList1 As List
    propList1.initialize
    Dim propList2 As List
    propList2.initialize
    Dim fldList1 As List
    fldList1.initialize
    Dim fldList2 As List
    fldList2.initialize
    Dim mthList1 As List
    mthList1.initialize
    Dim mthList2 As List
    mthList2.initialize
    Dim eventList1 As List
    eventList1.initialize
    Dim eventList2 As List
    eventList2.initialize
    'start processing
    Dim xm As Xml2Map
    xm.Initialize
    Dim ParsedData As Map = xm.Parse(File.ReadString("", sPath))
    'get all the class names
    Dim root As Map = ParsedData.Get("root")
    Dim class As List = root.Get("class")
    Dim version As String = root.Get("version")
    Dim author As String = root.Get("author")
    For Each colclass As Map In class
        'get the name of the clas
        Dim classname As String = colclass.Get("name")
        Dim comment As String = colclass.Getdefault("comment","")
        Dim owner As String = colclass.Getdefault("owner","")
        'the short name might be blan
        classname = jMash.MvLast(".",classname)
        'add class to databse
        Dim newclass As Map
        newclass.initialize
        newclass.put("ClassName",classname)
        newclass.put("Author",author)
        newclass.put("owner",owner)
        If comment.length > 0 Then newclass.put("Comment",comment)
        If pc = "p" Then
            newclass.Put("OnPrevious","Y")
            newclass.put("OnCurrent","N")
            newclass.put("PVersion",version)
            newclass.put("CVersion","")           
            classList1.add(newclass)
        else if pc = "c" Then
            newclass.put("OnCurrent","Y")
            newclass.put("CVersion",version)
            classList2.add(newclass)
        End If
        'get all the properties for the class
        Dim property As List = jMash.GetElements(colclass,"property")
        For Each colproperty As Map In property
            Dim propname As String = colproperty.Getdefault("name","")
            Dim returntype As String = colproperty.Getdefault("returntype","")
            If returntype.length > 0 Then returntype = jMash.MvLast(".",returntype)
            Dim comment As String = colproperty.Getdefault("comment","")
            'Log(shortname & "." & propname & "-" & returntype)
            Dim newprop As Map
            newprop.initialize
            newprop.put("PropertyKey",$"${classname}.${propname}"$)
            newprop.put("ClassName",classname)
            newprop.put("PropertyName",propname)
            newprop.put("ReturnType",returntype)
            If comment.length > 0 Then newprop.put("Comment",comment)
            If pc = "p" Then
                newprop.put("OnPrevious","Y")
                newprop.put("PVersion",version)           
                newprop.put("OnCurrent","N")
                newprop.put("CVersion","")
                propList1.add(newprop)
            Else If pc = "c" Then
                newprop.put("OnCurrent","Y")
                newprop.put("CVersion",version)
                propList2.add(newprop)
            End If
        Next
        'Log("*****fields*****")
        'get all the fields for the class
        Dim field As List = jMash.GetElements(colclass,"field")
        For Each colfield As Map In field
            Dim fldname As String = colfield.Getdefault("name","")
            Dim returntype As String = colfield.Getdefault("returntype","")
            If returntype.length > 0 Then returntype = jMash.MvLast(".",returntype)
            Dim comment As String = colfield.Getdefault("comment","")
            'Log(shortname & "." & fldname & "-" & returntype)
            Dim newfld As Map
            newfld.initialize
            newfld.put("FieldKey",$"${classname}.${fldname}"$)
            newfld.put("ClassName",classname)
            newfld.put("FieldName",fldname)
            newfld.put("ReturnType",returntype)
            newfld.put("OnProperties","N")
            If comment.length > 0 Then newfld.put("Comment",comment)
            If pc = "p" Then
                newfld.put("OnPrevious","Y")
                newfld.put("PVersion",version)
                newfld.put("OnCurrent","N")
                newfld.put("CVersion","")
                fldList1.add(newfld)
            Else If pc = "c" Then
                newfld.put("OnCurrent","Y")
                newfld.put("CVersion",version)
                fldList2.add(newfld)
            End If
        Next
        'get all methods
        Dim method As List = jMash.GetElements(colclass,"method")
        For Each colmethod As Map In method
            Dim methodname As String = colmethod.Getdefault("name","")
            Dim returntype As String = colmethod.Getdefault("returntype","")
            If returntype.length > 0 Then returntype = jMash.MvLast(".",returntype)
            Dim comment As String = colmethod.Getdefault("comment","")
            'Log(shortname & "." & name & "-" & returntype)
            'get the parameters
            Dim parameter As List = jMash.GetElements(colmethod,"parameter")
            Dim parDefStr As String
            Dim parDef As List
            parDef.Initialize           
            For Each colparameter As Map In parameter
                Dim parname As String = colparameter.Getdefault("name","")
                Dim partype As String = colparameter.Getdefault("type","")
                If partype.length > 0 Then partype = jMash.MvLast(".",partype)
                If parname.length > 0 And partype.length > 0 Then
                    Dim sLine As String = $"${parname} As ${partype}"$
                    parDef.Add(sLine)
                End If
                'Log(shortname & "." & name & "." & parname)
            Next
            parDefStr = jMash.Join(",",parDef)
            Dim mtdmap As Map
            mtdmap.initialize
            mtdmap.put("MethodKey",$"${classname}.${methodname}"$)
            mtdmap.put("ClassName",classname)
            mtdmap.put("MethodName",methodname)
            mtdmap.put("ReturnType",returntype)
            If comment.length > 0 Then mtdmap.put("Comment",comment)
            If pc = "p" Then
                mtdmap.put("OnPrevious","Y")
                mtdmap.put("PVersion",version)
                mtdmap.put("OnCurrent","N")
                mtdmap.put("CVersion","")
                mtdmap.put("PParameters", parDefStr)
                mtdmap.put("CParameters", "")
                mtdmap.put("ParametersMatch","Y")
                mthList1.add(mtdmap)
            Else If pc = "c" Then
                mtdmap.put("OnCurrent","Y")
                mtdmap.put("CVersion",version)
                mtdmap.put("CParameters", parDefStr)
                mthList2.add(mtdmap)
            End If           
        Next
        'get all events
        'Log("*****events*****")
        Dim event As List = jMash.GetElements(colclass,"event")
        For Each colevent As String In event
            'find the first open bracket
            Dim openb As Int = jMash.instr(colevent,"(")
            Dim eventName As String = jMash.Left(colevent,openb)
            Dim paramdef As String = jMash.Mid(colevent,openb+2)
            paramdef = jMash.RemDelim(paramdef,")")
            'Log(shortname & "." & colevent)
            Dim eventmap As Map
            eventmap.initialize
            eventmap.put("EventKey",$"${classname}.${eventName}"$)
            eventmap.put("ClassName",classname)
            eventmap.put("EventName",eventName)
            eventmap.put("Comment","")
            If pc = "p" Then
                eventmap.put("OnPrevious","Y")
                eventmap.put("PVersion",version)
                eventmap.put("OnCurrent","N")
                eventmap.put("CVersion","")
                eventmap.put("PParameters",paramdef)
                eventmap.Put("CParameters","")
                eventmap.put("ParametersMatch","Y")
                eventList1.add(eventmap)
            Else If pc = "c" Then
                eventmap.put("OnCurrent","Y")
                eventmap.put("CVersion",version)
                eventmap.put("CParameters", paramdef)
                eventList2.add(eventmap)
            End If
        Next
    Next
    'add all the classes
    If pc = "p" Then
        DBUtils.InsertMaps(helpdb,"Classes",classList1)
        DBUtils.InsertMaps(helpdb,"Properties",propList1)
        DBUtils.InsertMaps(helpdb,"Fields",fldList1)
        DBUtils.InsertMaps(helpdb,"Methods",mthList1)
        DBUtils.InsertMaps(helpdb,"Events",eventList1)
    else if pc = "c" Then
        DBUtils.InsertMaps(helpdb,"Classes",classList2)
        DBUtils.InsertMaps(helpdb,"Properties",propList2)
        DBUtils.InsertMaps(helpdb,"Fields",fldList2)
        DBUtils.InsertMaps(helpdb,"Methods",mthList2)
        DBUtils.InsertMaps(helpdb,"Events",eventList2)
        helpdb.BeginTransaction
         For Each classMap As Map In classList2
            Dim classname As String = classMap.get("ClassName")
            DBUtils.UpdateRecord4(helpdb,"Classes",CreateMap("OnCurrent":"Y","CVersion":version),CreateMap("ClassName":classname))
        Next
        For Each propMap As Map In propList2
            Dim PropertyKey As String = propMap.get("PropertyKey")
            DBUtils.UpdateRecord4(helpdb,"Properties",CreateMap("OnCurrent":"Y","CVersion":version),CreateMap("PropertyKey":PropertyKey))
        Next
        For Each fldMap As Map In fldList2
            Dim FieldKey As String = fldMap.get("FieldKey")
            DBUtils.UpdateRecord4(helpdb,"Fields",CreateMap("OnCurrent":"Y","CVersion":version),CreateMap("FieldKey":FieldKey))
        Next
        For Each methodMap As Map In mthList2
            Dim MethodKey As String = methodMap.get("MethodKey")
            Dim CParameters As String = methodMap.get("CParameters")
            DBUtils.UpdateRecord4(helpdb,"Methods",CreateMap("OnCurrent":"Y","CVersion":version,"CParameters":CParameters),CreateMap("MethodKey":MethodKey))
        Next
        For Each eventmap As Map In eventList2
            Dim EventKey As String = eventmap.get("EventKey")
            Dim CParameters As String = eventmap.get("CParameters")
            DBUtils.UpdateRecord4(helpdb,"Events",CreateMap("OnCurrent":"Y","CVersion":version,"CParameters":CParameters),CreateMap("EventKey":EventKey))
        Next
        helpdb.TransactionSuccessful
        'DBUtils.ExecuteBatch(helpdb)
    End If
    'delete fields with 'Type' and 'EventHandler'
    DBUtils.DeleteRecordWhere(helpdb,"Fields",CreateMap("FieldName":"Type"))
    DBUtils.DeleteRecordWhere(helpdb,"Fields",CreateMap("FieldName":"EventHandler"))
    'set the defaults
    helpdb.BeginTransaction
    DBUtils.SetDefault1(helpdb,"Classes",CreateMap("OnPrevious":"'N'","OnCurrent":"'N'","IsTheme":"'N'","IsNewClass":"'N'","IsLibrary":"'N'"))
    DBUtils.SetDefault1(helpdb,"Properties",CreateMap("OnPrevious":"'N'","OnCurrent":"'N'","IsTheme":"'N'","IsNewClass":"'N'","IsLibrary":"'N'"))
    DBUtils.SetDefault1(helpdb,"Fields",CreateMap("OnPrevious":"'N'","OnCurrent":"'N'","IsTheme":"'N'","IsNewClass":"'N'","IsLibrary":"'N'"))
    DBUtils.SetDefault1(helpdb,"Methods",CreateMap("OnPrevious":"'N'","OnCurrent":"'N'","IsTheme":"'N'","IsNewClass":"'N'", _
    "PParameters":"''","CParameters":"''","ParametersMatch":"'N'","IsLibrary":"'N'"))
    DBUtils.SetDefault1(helpdb,"Events",CreateMap("OnPrevious":"'N'","OnCurrent":"'N'","IsTheme":"'N'","IsNewClass":"'N'", _
    "PParameters":"''","CParameters":"''","ParametersMatch":"'N'", "IsLibrary":"'N'"))
    helpdb.TransactionSuccessful
    'get the names of the new classes, we will update each field if the class is new
    'we do this to know which classes where updated
    Dim newClasses As List
    newClasses = DBUtils.SQLSelectRecordWhereMaps(helpdb,"select classname from Classes",CreateMap("OnCurrent =":"Y","OnPrevious =":"N"))
    newClasses = jMash.ListOfMapsExtractKey(newClasses,"classname")
    'check if stuff on fields is on properties
    helpdb.BeginTransaction
    For Each strClass As String In newClasses
        DBUtils.UpdateRecord4(helpdb,"Classes",CreateMap("IsNewClass":"Y"),CreateMap("ClassName":strClass))
        DBUtils.UpdateRecord4(helpdb,"Properties",CreateMap("IsNewClass":"Y"),CreateMap("ClassName":strClass))
        DBUtils.UpdateRecord4(helpdb,"Fields",CreateMap("IsNewClass":"Y"),CreateMap("ClassName":strClass))
        DBUtils.UpdateRecord4(helpdb,"Methods",CreateMap("IsNewClass":"Y"),CreateMap("ClassName":strClass))
        DBUtils.UpdateRecord4(helpdb,"Events",CreateMap("IsNewClass":"Y"),CreateMap("ClassName":strClass))
    Next
    helpdb.TransactionSuccessful
    'DBUtils.ExecuteBatch(helpdb)
    'update theme related content
    Dim newClasses As List
    newClasses = DBUtils.SQLSelectRecordWhereMaps(helpdb,"select classname from Classes",CreateMap("ClassName Like":"Theme%"))
    newClasses = jMash.ListOfMapsExtractKey(newClasses,"classname")
    'check if stuff on fields is on properties
    helpdb.BeginTransaction
    For Each strClass As String In newClasses
        DBUtils.UpdateRecord4(helpdb,"Classes",CreateMap("IsTheme":"Y"),CreateMap("ClassName":strClass))
        DBUtils.UpdateRecord4(helpdb,"Properties",CreateMap("IsTheme":"Y"),CreateMap("ClassName":strClass))
        DBUtils.UpdateRecord4(helpdb,"Fields",CreateMap("IsTheme":"Y"),CreateMap("ClassName":strClass))
        DBUtils.UpdateRecord4(helpdb,"Methods",CreateMap("IsTheme":"Y"),CreateMap("ClassName":strClass))
        DBUtils.UpdateRecord4(helpdb,"Events",CreateMap("IsTheme":"Y"),CreateMap("ClassName":strClass))
    Next
    helpdb.TransactionSuccessful
    'DBUtils.ExecuteBatch(helpdb)
    'update theme related content
    Dim newClasses As List
    newClasses = DBUtils.SQLSelectRecordWhereMaps(helpdb,"select classname from Classes",CreateMap("ClassName Like":"%Theme"))
    newClasses = jMash.ListOfMapsExtractKey(newClasses,"classname")
    'check if stuff on fields is on properties
    helpdb.BeginTransaction
    For Each strClass As String In newClasses
        DBUtils.UpdateRecord4(helpdb,"Classes",CreateMap("IsTheme":"Y"),CreateMap("ClassName":strClass))
        DBUtils.UpdateRecord4(helpdb,"Properties",CreateMap("IsTheme":"Y"),CreateMap("ClassName":strClass))
        DBUtils.UpdateRecord4(helpdb,"Fields",CreateMap("IsTheme":"Y"),CreateMap("ClassName":strClass))
        DBUtils.UpdateRecord4(helpdb,"Methods",CreateMap("IsTheme":"Y"),CreateMap("ClassName":strClass))
        DBUtils.UpdateRecord4(helpdb,"Events",CreateMap("IsTheme":"Y"),CreateMap("ClassName":strClass))
    Next
    'DBUtils.ExecuteBatch(helpdb)
    'update matching parameters for methods that match
    'DBUtils.UpdateRecord4(helpdb,"Methods",CreateMap("ParametersMatch":"Y"),CreateMap("OnPrevious":"Y","OnCurrent":"Y","lower([PParameters])":"lower([CParameters])"))
    'DBUtils.ExecuteBatch(helpdb)
    'mark abmaterial as Library
    DBUtils.UpdateRecord4(helpdb,"Classes",CreateMap("IsLibrary":"Y"),CreateMap("ClassName":"ABMaterial"))
    DBUtils.UpdateRecord4(helpdb,"Properties",CreateMap("IsLibrary":"Y"),CreateMap("ClassName":"ABMaterial"))
    DBUtils.UpdateRecord4(helpdb,"Fields",CreateMap("IsLibrary":"Y"),CreateMap("ClassName":"ABMaterial"))
    DBUtils.UpdateRecord4(helpdb,"Methods",CreateMap("IsLibrary":"Y"),CreateMap("ClassName":"ABMaterial"))
    DBUtils.UpdateRecord4(helpdb,"Events",CreateMap("IsLibrary":"Y"),CreateMap("ClassName":"ABMaterial"))
    helpdb.TransactionSuccessful
    'update methods
    Dim methods As List = DBUtils.SQLSelectRecordWhereMaps(helpdb,"Methods",CreateMap("OnPrevious=":"Y","OnCurrent=":"Y"))
    helpdb.BeginTransaction
    For Each methodm As Map In methods
        Dim MethodKey As String = methodm.get("methodkey")
        Dim PParameters As String = methodm.getdefault("pparameters","")
        Dim CParameters As String = methodm.GetDefault("cparameters","")
        If PParameters.EqualsIgnoreCase(CParameters) Then
            DBUtils.UpdateRecord4(helpdb,"Methods",CreateMap("ParametersMatch":"Y"),CreateMap("MethodKey":MethodKey))
        End If
    Next
    helpdb.TransactionSuccessful
    'update events
    Dim events As List = DBUtils.SQLSelectRecordWhereMaps(helpdb,"Events",CreateMap("OnPrevious=":"Y","OnCurrent=":"Y"))
    helpdb.BeginTransaction
    For Each eventm As Map In events
        Dim EventKey As String = eventm.get("eventkey")
        Dim PParameters As String = eventm.getdefault("pparameters","")
        Dim CParameters As String = eventm.GetDefault("cparameters","")
        If PParameters.EqualsIgnoreCase(CParameters) Then
            DBUtils.UpdateRecord4(helpdb,"Events",CreateMap("ParametersMatch":"Y"),CreateMap("EventKey":EventKey))
        End If
    Next
    helpdb.TransactionSuccessful
    'DBUtils.ExecuteBatch(helpdb)
    'helpdb.Close
    Return True
    'Dim jg As JSONGenerator
    'jg.Initialize(ParsedData)
    'Dim sout As String = jg.ToPrettyString(4)
    'File.WriteString(File.dirapp,"xml.json",sout)
    'Return sout
End Sub

Enjoy... Ta!
 

Mashiane

Expert
Licensed User
Longtime User
As the database created here for the stats already had the content, I opted for a 'Pocket Reference' that I can quickly look into perhaps on a tablet or as part of the skills transfer that I will eventually do. The car accident I got involved in, whilst I came out without any bones broken, made me think deeply about the wealth of stuff that was on my laptop that would go now-where if I transitioned to the next world.

Starting with the Demo WebApp to learn ABMaterial cannot be over-emphasized and strides are being made to avail documentation about this framework as much as possible. Attached herein is my present to the community also - ABMaterial Pocket Reference.

This has been made possible by Automatic Help File creation using HelpNDoc

As usual, there is nothing fancy about the pocket reference, the nice part is that you can always have a pdf version of what the classes are about, the methods and events etc etc. I just took what I have discussed here, exploded it a little and wala!

NB: You need to be familiar with the framework.

Some TOC..

ABMaterial Pocket Reference.png
 
Top