You can create your own custom fields within Finale's application settings. The products custom field options are on the products tab. The purchase order and supplier custom field options are on the purchasing tab. The sales order and supplier custom field options are on the selling tab. Next to each custom field name there is Data type and a template variable. We store all values as string in the userfieldDataList. The data types option is used internally for determining how to parse and store the attribute value. The template variable value is what we should use as the attrName when adding a custom field to the entities userFieldDataList.

For example, in the above screenshot, you can see there are 3 custom fields. If you wanted to add all 3 custom fields to a product, you should first get a copy of the product by making a request to the product API. After you parse the response, you should modify it to have the custom field.

If none of the existing objects in the userFieldDataList have an attrName equal to the custom fields template variable, that means that the entity currently doesn't have the custom field. You will need to add an object to the userFieldDataList array with it's attrName equal to the template variable, and the attrValue being a string representation for the value you want it to be. If the datatype is a pick list, the value needs to be one of the values that are in the pick list. You can edit/view those values by clicking edit next to the data type. If the datatype is text, you should make attrValue be the text you want the custom field to be. If the datatype is Date, you should use a string in , like "2018-05-15T19:00:00.000Z".

If an object already exists in the userFieldDataList that has an attrName that is the same as the custom field's template variable, you need to change that objects attrValue to the new value you want the custom field to be.

If there are any other values in it that have an attrName that isn't the same as one of the template variables for custom fields you want to update, you should leave them in the userFieldDataList because we use those values internally. Deleting our internal values could cause issues with how our integrations interact with them.

Below is an example of a userFieldDataList that may have been returned when you made a request for a product. You can see that the Color custom field is currently Green and that there is an internal value that should be left alone.

"userFieldDataList":[  
  {"attrName":"user_10000","attrValue":"Green"},  
  {"attrName":"integration_shipstation","attrValue":"HASH_1234 153 23515315"}  
]

If you wanted to change the Color field to Blue, set Expiration date to 5/18/2018, and Features to "Fast and durable", you would change the above userFieldDataList to equal the below userFieldDataList in your request to update the entity.

"userFieldDataList":[  
  {"attrName":"user_10000","attrValue":"Blue"},  
  {"attrName":"integration_shipstation","attrValue":"HASH_1234 153 23515315"},  
  {"attrName":"user_10001","attrValue":"2018-05-18T00:00:00.000Z"},  
  {"attrName":"user_10002","attrValue":"Fast and durable"}  
]

If one of your fields is a pick list and the value you set is showing as undefined in the user interface, that's because the value you set is not in the Pick list. To get the field to show correctly, go to the custom field settings in your application settings and add your new value to the pick list for that field.
Also, on orders note the following:
An array of values for user defined fields on the Order. Each value in the array is an object with the keys attrName and attrValue. The attrName is the internal name of a user defined field as listed in the customization service. Other systems integrating with Finale can store information in the userFieldDataList. Other systems should prefix their attrName with the string "integration_" to avoid conflicting with keys created by Finale. The attrValue is the string representation of the value for this Order for the user defined field. attrName is limited to 60 Unicode characters, while attrValue is limited to 255 Unicode characters.

An additional key is available to enable tracking entities by the timestamp our server received the request, called attrValueLastUpdatedDate. When attrValue is not set and attrValueLastUpdatedDate is set to true, the attrValue will be set to the lastUpdatedDate on the order. For example, the following request will set the attrValue to the lastUpdatedTimestamp for the order.

{... "userFieldDataList":[{"attrName":"integration_mysite","attrValueLastUpdatedDate":true}]}

This is useful to make tracking and syncing changes to other systems. This allows easy searching for entities that have been updated since the last time they were synced to an external system.

Example:

userFieldDataList:[ {attrName:'user_10000', attrValue:'7/2/2010'}, {attrName:'integration_10004', attrValue:'3/12/2011'} ]