Appearance
JavaScript API Differences Between Sintel Forms and Sintel Apps
Moving from Sintel Forms
Sintel Apps replaces the legacy Sintel Forms SharePoint Add-in with a modern SharePoint Framework (SPFx) –based architecture. This change aligns the platform with Microsoft’s current development model and improves compatibility with modern SharePoint environments.
As part of this transition, several JavaScript API methods have been updated or enhanced to better reflect the capabilities and patterns of the new SPFx-based implementation. The following sections highlight the key differences developers should be aware of when migrating existing Sintel Forms solutions to Sintel Apps.
Key JavaScript API differences
1. getValue (Person field)
Sintel Forms: getValue (Person field). Returns an array even for single-select Person fields.
Sintel Apps: getValue (Person field). Returns a single object for single-select fields:
js
{ emailAddress: "a@a.com", displayName: "Joe Bloggs" }2. getValue / setValue
Sintel Forms: getValue / setValue. Generic methods used for most field types.
Sintel Apps: getValue and setValue still work, but it is recommended to use field-specific methods:
- getTextFieldValue / setTextFieldValue
- getNumberFieldValue / setNumberFieldValue
- getBooleanFieldValue / setBooleanFieldValue
- setLookupFieldValue
- setUserFieldValue
- getRelatedListFieldValue / setRelatedListFieldValue
3. getUserProperties, getUserProfile → getUserProperties
Sintel Forms: getUserProperties, getUserProfile
Sintel Apps: getUserProperties. The API has been simplified to a single method.
js
const requesterEmail = getValue("Requester")?.emailAddress;
if (requesterEmail) {
getUserProperties(requesterEmail).then(data => {
setValue("Email", data.Mail);
setValue("Manager", data.Manager);
});
}4. getFilteredFirstListItem, getFilteredListItems → getListItems
Sintel Forms: getFilteredFirstListItem, getFilteredListItems
Sintel Apps: getListItems. A single API method replaces the previous filtered list retrieval methods.
js
getListItems({
listInternalName: "Projects",
search: {
value: "Yes",
fieldInternalName: "Program",
operator: "equals"
},
itemsLimit: 0,
returnedFieldInternalNames: ["ID","Title"]
})
.then(result => {
const mappedResult = result.map(item => ({
id: +item.ID,
value: item.Title
}));
});5. addCustomButton → addTopBarButton
Sintel Forms: addCustomButton
Sintel Apps: addTopBarButton
ts
/**
* Adds a custom button to the form's top bar.
* @param label - The label of the button.
* @param icon - The icon of the button (name of the [Font Awesome icon](https://fontawesome.com/icons)). Can be `undefined` for no icon.
* @param action - The action to perform when the button is clicked. Can be:
* - A string representing a URL to navigate to.
* - An object with `url` and optional `target` properties for navigation.
* - A callback function to execute custom logic.
*/
addTopBarButton: (
label: string,
icon: string | undefined,
action: string | { url: string; target?: string } | (() => void),
) => void;6. updateLookupValues → updateLookupOptions
Sintel Forms: updateLookupValues
Sintel Apps: updateLookupOptions
ts
updateLookupOptions: (
fieldInternalName: string,
values: LookupValue[] | undefined,
listInternalNameOrId?: string,
) => void;Important: values require capital ID, e.g. {ID: 1, value: 'Option 1'};
For detailed examples of how to use the Sintel Apps Public JavaScript API within Logic rules, see Using the JavaScript API in Logic.