Jump to content

Storing User-Defined Functions

Recommended Posts

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:"



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?

Edited by Dmiller35
Link to comment
Share on other sites

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:

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.

Link to comment
Share on other sites

  • 2 weeks later...

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.

Edited by Dmiller35
Link to comment
Share on other sites

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:

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:

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


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


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:


instead of this:

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.)

Edited by Dan Korn
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Create New...