Using the Scaffolding REST API with ScriptRunner for Confluence
Overview
Examples of using the Scaffolding REST API to manipulate Scaffolding data by using Groovy script with a third-party app ScriptRunner for Confluence.
Step 1: Create a sample page
Use this wiki markup to create a sample page.
||Text Data||{text-data:atlassian-macro-output-type=INLINE|content=wiki|name=Sample Text}{text-data}|
||List Data||{list-data:atlassian-macro-output-type=INLINE|name=Sample List|type=check}
{list-option:value=Option 1}{list-option}
{list-option:value=Option 2}{list-option}
{list-data}|
||Number Data||{number-data:atlassian-macro-output-type=INLINE|name=Sample Number}{number-data}|
||Date Data||{date-data:atlassian-macro-output-type=INLINE|name=Sample Date}{date-data}|
Step 2: Use the ScriptRunner for Confluence app and run the script
Use ScriptRunner for Confluence to run the following Groovy script. Remember to modify the parameters according to your needs.
// Sample script to manipulate Scaffolding data
// Atlassian Imports
import com.atlassian.sal.api.component.ComponentLocator
import com.atlassian.confluence.pages.templates.PageTemplateManager
import com.atlassian.confluence.pages.PageManager
import com.atlassian.confluence.spaces.SpaceManager
import com.atlassian.confluence.setup.settings.SettingsManager
//JSON Manipulations
import org.json.JSONArray
// Misc manipulations
import java.nio.charset.StandardCharsets
import java.text.SimpleDateFormat
// Page and Space managers
def pageTemplateManager = ComponentLocator.getComponent(PageTemplateManager)
def spaceManager = ComponentLocator.getComponent(SpaceManager)
def pageManager = ComponentLocator.getComponent(PageManager)
def settingsManager = ComponentLocator.getComponent(SettingsManager)
// Sample Space details
def sampleSpaceKey = "SAMPLE"
def sampleSpace = spaceManager.getSpace(sampleSpaceKey)
def sampleHomePage = sampleSpace.getHomePage()
// REST API Access, could be implemented different ways
def username = "admin"
def password = "Charlie!"
def authStr = (username+":"+password).bytes.encodeBase64().toString()
log.warn("UPWD: " + authStr)
// Confluence base URL
def baseURL = settingsManager.getGlobalSettings().getBaseUrl()
log.warn(baseURL)
// Scaffolding REST URL
def formURL = "/rest/scaffolding/1.0/api/form/"
def metaURL = "/rest/scaffolding/1.0/api/form/meta"
// Page to manipulate Scaffolding data
def samplePageTitle = "Sample Page"
def samplePage = pageManager.getPage(sampleSpaceKey, samplePageTitle)
// Sample Page ID
def scaffPageID = samplePage.getId()
log.warn(scaffPageID)
// Building REST URL
URL restApiURL = new URL(baseURL + formURL + scaffPageID)
log.warn(restApiURL)
// Creating HTTP Connection
HttpURLConnection httpConnection = (HttpURLConnection) restApiURL.openConnection()
// Building data to send
def fields = new JSONArray()
def value = new LinkedHashMap()
def options = []
// For Text Data
value.clear()
value.put("name", "Sample Text")
value.put("macro", "text-data")
value.put("value", "Some Interesting Text\nEven with the New Lines")
fields.put(value)
// For List Data
value.clear()
value.put("name", "Sample List")
value.put("macro", "list-data")
options.clear()
options.add("Option 1")
value.put("value", options.clone())
fields.put(value)
// For Number Data
value.clear()
value.put("name", "Sample Number")
value.put("macro", "number-data")
value.put("value", "123")
fields.put(value)
// For Date Data
value.clear()
value.put("name", "Sample Date")
value.put("macro", "date-data")
value.put("value", new SimpleDateFormat("yyyy-mm-dd HH:mm:ss").format(new SimpleDateFormat("dd/MM/yyyy").parse("24/02/2019")))
fields.put(value)
log.warn(fields.toString())
// Connecting and sending data
httpConnection.setRequestMethod("PUT")
httpConnection.setRequestProperty("Accept", "application/json")
httpConnection.setRequestProperty("Authorization", "Basic " + authStr)
httpConnection.setDoOutput(true)
httpConnection.setDoInput(true)
httpConnection.connect()
// Output Stream
def outputStream = httpConnection.getOutputStream()
// Writing
outputStream.write(fields.toString().getBytes(StandardCharsets.UTF_8))
log.warn(httpConnection.getResponseCode())
log.warn(httpConnection.getResponseMessage())
// Close and Finish
outputStream.flush()
outputStream.close()
httpConnection.disconnect()
// Script credit: Areg Vrtanesyan