Another difference between those two ways of accessing a parameter's value has to do with document reference. When using the blue, unquoted parameter names within an internal iLogic rule, you can know with great confidence that those are being directly referenced from the document in which the internal iLogic rule they are being used within, is itself saved within. (If the rule is saved within a document, then those blue, unquoted parameters are linked to the document that the rule is saved within.)
On the other hand, when using:
Parameter("MyParamName")
How confident are you about which document that is 'pointing to' or 'pulling the value from' or 'focused on'? Since this line of code can be used in either an internal or external rule, will it 'always' be pointing to the same document, in both cases? What are the rules or design intent that dictate which document this line of code will be focused on in all the different scenarios you can come up with, such as when the rule gets ran remotely by an event or RunRule type of code? All good points to consider, and something that I have been asking for 'official', publicly available documentation for the past several years.
Sure it does give us an extended variation:
IParamDynamic.Value Property (Object, String)
Where it allows us to specify the 'name' of either an assembly component, or a document, with the optional first argument called "componentOrDocName", but then it does not really explain what this means in good enough detail either. When working with an assembly component, that is simple enough, because it just uses ComponentOccurrence.Name property value. But what about when you have a component with the same exact name in two completely different sub assemblies, or one is in the top level, while one is in a sub assembly...which one will it point to, and which one will get ignored? When you want to work with a referenced document, it does not tell us this, but that document must be within the 'Document.AllReferencedDocuments' collection of the document that this line of code would have normally targeted (the 'local' or 'active' document). It also tells us to use the Document's 'Name' property, which we both know does not seem to exist (unless it is 'hidden' & private). What we do have is DisplayName, FullDocumentName, FullFileName, & InternalName. So which is it? Well, we have learned on our own that DisplayName 'sometimes' works. But that is a Read/Write property, sometimes including file extension, sometimes not, with no good explanation when/why. That's a lot of unknown, undocumented details in my opinion, so I use Parameter() snippets fairly sparingly, when I know that document reference is not going to be an issue, even if they get ran remotely.
I do still use both of then quite a bit, but am just more careful with them than I used to be, due to all the stuff I have seen in the forums over the years, and due to a few of my own odd situations I had to figure out.
Since for years now I have tried to minimize 'local' / internal iLogic rules/forms, in favor of external iLogic rules & global iLogic Forms, one interesting way I still take advantage of the blue, unquoted parameter names for is to simply trigger a super simple internal iLogic rule to run, where that internal iLogic rule only has 2 lines of code, and is only used to run an external iLogic rule to run when that specific parameter's value changes. Within this simple internal iLogic rule is something like the following:
oTrigger = Profile_Height
iLogicVb.Automation.RunExternalRule(ThisDoc.Document, "Manage Profile_Height Changes")
or maybe like this, if I know the 'target' rule is using the RuleArguments tool to look for 'input' data:
oTrigger = Profile_Height
Dim oArgs As NameValueMap = ThisApplication.TransientObjects.CreateNameValueMap
oArgs.Add("Document", ThisDoc.Document)
iLogicVb.Automation.RunExternalRuleWithArguments(ThisDoc.Document, _
"Manage Profile_Height Changes", oArgs)
This way, if the value of that parameter changes, it will trigger this super simplistic internal iLgoic rule to run, which will only run my external iLogic rule to run, and the external rule is using the 'ThisDoc' term, instead of ThisApplication.ActiveDocument, so that it will be working with the same document that the 'RunRule' code meant for it to be working with, and contains all the 'real' code for dealing with this change. And is most likely using either Inventor API route of accessing the Parameter object, or is taking advantage of the StandardObjectFactory Class and its Create Method to get an IStandardObjectProvider Interface that will remain focused on the Document object that I supplied as 'input' into the Create method. Then I can use the iLogic snippets with more security about which Document they will remain focused on.
Wesley Crihfield

(Not an Autodesk Employee)