Compute Materials - MapSurface

Hi, I’m trying to create bill of materials by python script. I followed an example given in this link:
https://forum.dynamobim.com/t/add-criteria-for-material-list/83155/8
However, when I use “MapSurface” it is returning “Null”.

In my material criteria there are three surfaces that I named “DATUM”, “LIMPEZA” and “DEMOLIÇÃO”. I am passing the corresponding surfaces into this routine.

# Load the Python Standard and DesignScript Libraries
import sys
import clr

# Add Assemblies for AutoCAD and Civil3D
clr.AddReference('AcMgd')
clr.AddReference('AcCoreMgd')
clr.AddReference('AcDbMgd')
clr.AddReference('AecBaseMgd')
clr.AddReference('AecPropDataMgd')
clr.AddReference('AeccDbMgd')

# Import references from AutoCAD
from Autodesk.AutoCAD.Runtime import *
from Autodesk.AutoCAD.ApplicationServices import *
from Autodesk.AutoCAD.EditorInput import *
from Autodesk.AutoCAD.DatabaseServices import *
from Autodesk.AutoCAD.Geometry import *

# Import references from Civil3D
from Autodesk.Civil.ApplicationServices import *
from Autodesk.Civil.DatabaseServices import *

# The inputs to this node will be stored as a list in the IN variables.
dataEnteringNode = IN

adoc = Application.DocumentManager.MdiActiveDocument
editor = adoc.Editor

QTOC = IN[0]
SLGl = IN[1][0]
SF1 = IN[2]
SF2 = IN[3]
SFD = IN[4]

with adoc.LockDocument():
    with adoc.Database as db:
        with db.TransactionManager.StartTransaction() as t:
            #get input QTOCriteria object id
            QTOCid = QTOC.InternalObjectId
            #QTOCo = t.GetObject(id, OpenMode.ForWrite, True);
            #get sample line group object id
            slgid = SLGl.InternalObjectId
            #open sample line group object
            slgo = t.GetObject(slgid, OpenMode.ForWrite)
            #create criteria name mapping for sample line group from QTOCriteria 
            QTOM = QTOCriteriaNameMapping(QTOCid,slgid)
            SF1id = SF1.InternalObjectId
            SF2id = SF2.InternalObjectId
            SFDid =  SFD.InternalObjectId
            #sampled input surface id
            surfacemapping1 = QTOM.MapSurface("LIMPEZA",SF1id)
            surfacemapping2 = QTOM.MapSurface("DEMOLIÇÃO",SF2id)
            surfacemapping3 = QTOM.MapSurface("DATUM",SFDid)
            """#TRUE if all surface mapped
            completed = QTOM.isMappingCompleted
            #add created mapping to sample line group aka compute materials
            importcriteriatoslg = QTOMaterialListCollection.ImportCriteria(slgid.MaterialLists,QTOM)"""
            t.Commit()

# Assign your output to the OUT variable.
OUT = surfacemapping1,surfacemapping2,surfacemapping3