MarcomCentral (PTI) and FusionPro User Communities

MarcomCentral (PTI) and FusionPro User Communities (http://forums.pti.com/index.php)
-   Issues, Questions, Etc. (http://forums.pti.com/forumdisplay.php?f=40)
-   -   I'm Having Trouble Storing User-Defined Functions (http://forums.pti.com/showthread.php?t=10667)

Dmiller35 June 29th, 2022 06:11 AM

Storing User-Defined Functions
 
I've read in the user guide that I can supposedly add a .js file to the Plugins folder so that I can have my most common functions easily available.
However, I've never been able to get it to work. I write the file just as the guide says, but it seems to have an issue with Line 1. Here is what I'm trying to use. Whenever I pull up the building blocks, it tells me "line 1: SyntaxError: illegal character:"


Code:

Presets = new Object;
Presets.LBLNUM =  function (str)
{
        return Int(Field(\“LBLNMBR\”));
}
Presets.LBLNUM.description = “Remove Leading Zeroes from Label Number”
Presets.LBLNUM.syntax = "LBLNUM(<string>)";

I've found in other places that sometimes the user guides have typos or are missing something in order to get the code to work correctly. Is that the case here or does this function just not work?

Dan Korn June 30th, 2022 03:07 PM

Re: Storing User-Defined Functions
 
This functionality does work, but you have to use valid JavaScript syntax. In this case, you do indeed have an illegal character.

When I copy that code into a .js file and put it in my plug-ins folder, it says the error is on line 4. The illegal characters are the curly double quotes. They're also on lines 6 and 7. These were probably put in by whatever application you were using to type in the code. (You probably want to use an actual code editing app like Xcode or Sublime Text instead of something that wants to format curly quotes like TextEdit.) You also don't want those the backslash escapes for the double-quotes.

Changing those to straight double-quotes and removing the backslashes, and removing the unnecessary string parameter from your function, this works for me:
Code:

Presets = new Object;
Presets.LBLNUM = function()
{
    return Int(Field("LBLNMBR"));
}
Presets.LBLNUM.description = "Remove Leading Zeroes from Label Number";
Presets.LBLNUM.syntax = "Presets.LBLNUM()";

I also changed the syntax to include the object name, which is needed to call it.

Dmiller35 July 13th, 2022 05:38 AM

Re: Storing User-Defined Functions
 
I realized the issue with the quotes and fixed that but the other things you mentioned might have still been causing it not to work.

After fixing those, it now does not give me an error, but it also doesn't give me the returned function.
It will only display "Presets.LBLMUM ()" and tells me that it does not return a value.
Am I just not using this functionality correctly?
I just want an easy way to repeat code that I use a lot.

Dan Korn July 13th, 2022 02:26 PM

Re: Storing User-Defined Functions
 
Quote:

Originally Posted by Dmiller35 (Post 28149)
Am I just not using this functionality correctly?

Well, I don't know. How are you using it? You haven't posted the rule that's calling it.

My guess is that your .js file is fine, but that you're not calling the function correctly in your rule, or at least not capturing its return value and using it in your rule correctly.

I assume your rule would do something like this:
Code:

return Presets.LBLNUM();
which would capture the return value of the function, i.e. the "LBLNMBR" field value, and return it from your rule.

Or, more realistically, something like this:
Code:

var lablnum = Presets.LBLNUM();
// Some code to do a calculation with lablnum and return something.
//etc.

If you're just doing this in your rule and nothing else:
Code:

Presets.LBLNUM();
Then you're calling the Presets.LBLNUM function, but throwing away its return value, and your rule isn't returning anything.

It would be the same if your rule just did this:
Code:

Int(Field("LBLNMBR"))
instead of this:
Code:

return Int(Field("LBLNMBR"))
The upshot here is that you're defining a custom function in your .js file, but you still need to call it and use the return value in a rule, which also has to return something.

(Though that might not always be true, if your .js file just does something like setting a property such as FusionPro.Composition.repeatRecordCount, or something else that might be called in a context like OnRecordStart. But generally, your custom function is going to be returning a value to do something with.)


All times are GMT -7. The time now is 04:23 AM.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
(c) 2011, PTI Marketing Technologies™, Inc.