As it has already been said, eval/evaluate functions must be used to get the object from the string that corresponds to project's full name.
This has some specific:
when TestComplete executes line like this:
obj = Aliases.MCFConfigTool.MCTWindow.MainWindow.workspace.MaintainerOnSiteTimer
it is implicitly required that all referenced objects do exist. If any object along the 'Aliases.MCFConfigTool.MCTWindow.MainWindow.workspace.MaintainerOnSiteTimer' objects' path does not exist (say, workspace or MaintainerOnSiteTimer), an error will be posted to the log.
This is correct and expected behaviour as it implicitely verifies that all explicitly mentioned objects exist.
If it is expected that some object may or may not exist, than WaitChild/WaitAliasChild function must be used. These functions do not fail and do not post an error to the test log if the sought for object does not exist but instead return an empty object with the .Exists property set to False.
So, in order to check that all objects along your Aliases path exist, you must evaluate them one by one.
Something like that (pseudocode):
// Check if 'Aliases.MCFConfigTool.MCTWindow.MainWindow.workspace.MaintainerOnSiteTimer' exists:
obj = Aliases.WaitAliasChild(evaluate('MCFConfigTool'))
if (not obj.Exists)
// Object does not exist
obj = obj.WaitAliasChild(evaluate('MCTWindow'))
if (not obj.Exists)
// Object does not exist
obj = obj.WaitAliasChild(evaluate('MainWindow'))
if (not obj.Exists)
// Object does not exist
obj = obj.WaitAliasChild(evaluate('workspace'))
if (not obj.Exists)
// Object does not exist
obj = obj.WaitAliasChild(evaluate('MaintainerOnSiteTimer'))
if (not obj.Exists)
// Object does not exist
// use MaintainerOnSiteTimer object that is referenced by the obj variable