Implementation
Level: Padawan/Jedi Knight
Keywords: lps, LIDS Publishing Server, Business-Scripts
The result: How to configure business service, to use LIDS Publishing Server from dynamic App
extension of properties, definition of connectors and the service definition is needed, to be able to use LPS from dynamicApp
1. .properties extension ​
# LPS for Dynamic-App, project access adress
lps.as.url=https://lids7.asseco-berit.ch/Asseco/WebFeatureService
# LIDS user who has the rights and license to connect to the project and to LPS and process all settings
lps.as.username=lps
lps.as.password=AnyFunnyPasswordYouCanImagine
# LPS-URL for WebAPI access
lps.url=http://lps-server:8080/PublishingWebService_v2
# default LPS user/pwd
lps.username=admin
lps.password=lids
2. Business-service connectors​
Have to be in \business-service\connectors\ subfolder, bascially nothing has to changed if the variables in properties are used as above.
{
"type": "lps",
"url": "{$lps.url}",
"username": "{$lps.username}",
"password": "{$lps.password}",
"numberOfRetries": 3
}
{
"type": "lidsWfs",
"url": "{$lps.as.url}",
"username": "{$lps.as.username}",
"password": "{$lps.as.password}"
}
3. Business-service service​
Has to be in \business-service\services\lps subfolder. You have to probably adopt the securityMethodeOwner to your project
{
"securityMethodOwner": "APPLICATION:SAMO_LIDS_BROWSER",
"variables": {
"lidsWfsConnectorId": "lidsWfsForLps",
"lpsConnectorId": "lps"
},
"actions": {
"createPlotTask": {
"access": [
"static",
"external"
],
"steps": [
{
"type": "script",
"source": "services/lps/scripts/createPlotTask.js"
}
]
},
"getPlotTaskState": {
"access": [
"static",
"external"
],
"steps": [
{
"type": "script",
"source": "services/lps/scripts/getPlotTaskState.js"
}
]
},
"getPlotFiles": {
"access": [
"static",
"external"
],
"steps": [
{
"type": "script",
"source": "services/lps/scripts/getPlotFiles.js"
}
]
}
}
}
In subfolder services\lps\scripts the 3 scripts to the three services above for creating Plot Task (createPlotTask.js), getting Task State (getPlotTaskState.js) and getting the result (getPlotFiles.js). These files can be used without changes, if you use the same variables in properties and the same connectors
function action(context) {
if (!context.variables.lpsConnectorId)
api.exceptions().prepareException(context).message("Missing 'lpsConnectorId' variable configuration (" + scriptFileName + ")").throwInternalError();
if (!context.variables.lidsWfsConnectorId)
api.exceptions().prepareException(context).message("Missing 'lidsWfsConnectorId' variable configuration (" + scriptFileName + ")").throwInternalError();
var requestBody = api.request().prepareCreateJSONRequestReader(context).create().getRequestBodyAsObject();
var lpsConnectorId = context.variables.lpsConnectorId;
var lidsWfsConnectorId = context.variables.lidsWfsConnectorId;
var lpsName = "LidsBrowser_";
api.logging().prepareLog(context)
.message(scriptFileName)
.addVariable("lpsConnectorId", lpsConnectorId)
.addVariable("lpsName", lpsName)
.addVariable("lidsWfsConnectorId", lidsWfsConnectorId)
.addVariable("requestBody", requestBody)
.addVariable("radioFormat", requestBody.plotParameters.radioFormat)
.addVariable("outputFormat", requestBody.outputFormat)
.logDebug();
var download = {
"id": "map",
"outputFormat": "RASTER-PDF",
"plotParameters": {
"DPI": "300",
"Compression": "None",
"Quality": "100"
}
}
download.outputFormat = requestBody.outputFormat || download.outputFormat;
// if(requestBody.plotParameters!==null && requestBody.plotParameters.radioFormat!==null){
// download.outputFormat=requestBody.plotParameters.radioFormat
// }
var id = download.id;
var settingId = requestBody.settingId;
if(requestBody.outputFormat){
var myOutputFormat = requestBody.outputFormat;
if (myOutputFormat.indexOf('.')>0){
myOutputArray = myOutputFormat.split(".")
download.outputFormat =myOutputArray[0];
api.logging().prepareLog(context)
.message(scriptFileName)
.addVariable("outputFormat", requestBody.outputFormat)
.addVariable("myOutputFormat", myOutputFormat)
.addVariable("download.outputFormat", download.outputFormat)
.logDebug();
}
}
if (!settingId)
api.exceptions().prepareException(context).message("Missing 'settingId' for lps download with id '" + id + "' (" + scriptFileName + ")").throwInternalError();
if (!download.outputFormat)
api.exceptions().prepareException(context).message("Missing 'outputFormat' for lps download with id '" + id + "' (" + scriptFileName + ")").throwInternalError();
var parameters = {};
var taskParameters = {};
if (download.plotParameters) {
for (var key in download.plotParameters) {
parameters[key] = download.plotParameters[key];
}
}
if (requestBody.plotParameters) {
for (var key in requestBody.plotParameters) {
var parameterConfig = requestBody.plotParameters[key];
taskParameters[key] = "" + parameterConfig;
}
}
if (requestBody.plotTaskParameters) {
for (var key in requestBody.plotTaskParameters) {
taskParameters[key] = requestBody.plotTaskParameters[key];
}
}
if (requestBody.leftBottom) {
taskParameters["LeftBottom"] = requestBody.leftBottom;
taskParameters["Angle"] = requestBody.angle || 0;
taskParameters["Scale"] = requestBody.scale;
} else {
taskParameters["SpatialCondition"] = requestBody.spatialCondition;
}
api.logging().prepareLog(context)
.message(scriptFileName)
.addVariable("lpsConnectorId", lpsConnectorId)
.addVariable("lpsName", lpsName)
.addVariable("lidsWfsConnectorId", lidsWfsConnectorId)
.addVariable("settingId", settingId)
.addVariable("download.outputFormat", download.outputFormat)
.addVariable("parameters", parameters)
.addVariable("taskParameters", taskParameters)
.addVariable("download", download)
.logDebug();
var resultApi = api.lps()
.prepareCreateExportablePlotTaskGroup(context)
.lpsConnectorId(lpsConnectorId)
.name(lpsName)
.lidsWfsConnectorId(lidsWfsConnectorId)
.enabled(true)
.outputFormat(download.outputFormat);
for (var key in parameters) {
resultApi = resultApi.addParameter(key, parameters[key]);
}
resultApi = resultApi.prepareAddTaskItem()
.name(lpsName)
.settingId(settingId);
for (var key in taskParameters) {
resultApi = resultApi.addParameter(key, taskParameters[key]);
}
resultApi = resultApi
.add()
.create();
var taskGroupId = resultApi.getTaskGroupId();
var publicationId = resultApi.execute();
var response = api.response().prepareCreateJSONResponse(context)
.responseBody({
taskGroupId: taskGroupId,
publicationId: publicationId
})
.create();
api.logging().prepareLog(context).message(scriptFileName).addVariable("END", response).logDebug();
return api.result().prepareCreateActionResult(context)
.result(response)
.create();
}
function action(context) {
if (!context.variables.lpsConnectorId)
api.exceptions().prepareException(context).message("Missing 'lpsConnectorId' variable configuration (" + scriptFileName + ")").throwInternalError();
if (!context.variables.lps.password)
api.exceptions().prepareException(context).message("Missing 'lps.password' variable configuration (" + scriptFileName + ")").throwInternalError();
if (!context.variables.lps.username)
api.exceptions().prepareException(context).message("Missing 'lps.username' variable configuration (" + scriptFileName + ")").throwInternalError();
var lpsConnectorId = context.variables.lpsConnectorId;
var requestBody = api.request().prepareCreateJSONRequestReader(context).create().getRequestBodyAsObject();
var webServiceSoapResponse = api.http()
.prepareExchangeSOAP(context)
.addHeader("SOAPAction", "http://asseco-ce.com/IPublishingWebService_v2/GetOutputFiles")
.url(context.variables.lps.url)
.prepareAddBasicAuthentication()
.password(context.variables.lps.password)
.username(context.variables.lps.username)
.add()
.envelopeAttributes(
{
"xmlns:soap": "http://schemas.xmlsoap.org/soap/envelope/",
"xmlns:ass": "http://asseco-ce.com/"
}
)
.soapBody(
{
"name": "ass:DownloadRequest",
"children": [
{
"name": "ass:PublicationId",
"value": requestBody.publicationId
}
]
}
)
.prepareSetupDataLog()
.name("soap")
.setup()
.exchange();
var remoteServiceResult = webServiceSoapResponse
.getDocument()
.getNodeByPathThrowing("/Envelope/Body/RemoteFileInfo/FileByteStream")
.getValueAsString();
// api.lps()
// .prepareGetExportByElementTaskGroup(context)
// .lpsConnectorId(lpsConnectorId)
// .taskGroupId(requestBody.taskGroupId)
// .delete();
var response = api.response().prepareCreateJSONResponse(context)
.responseBody({
base64File: remoteServiceResult
})
.create();
return api.result().prepareCreateActionResult(context)
.result(response)
.create();
}
function action(context) {
if (!context.variables.lpsConnectorId)
api.exceptions().prepareException(context).message("Missing 'lpsConnectorId' variable configuration (" + scriptFileName + ")").throwInternalError();
if (!context.variables.lidsWfsConnectorId)
api.exceptions().prepareException(context).message("Missing 'lidsWfsConnectorId' variable configuration (" + scriptFileName + ")").throwInternalError();
var lpsConnectorId = context.variables.lpsConnectorId;
var requestBody = api.request().prepareCreateJSONRequestReader(context).create().getRequestBodyAsObject();
var state = api.lps()
.prepareGetExportByElementTaskGroup(context)
.lpsConnectorId(lpsConnectorId)
.publicationId(requestBody.publicationId)
.getState();
var response = api.response().prepareCreateJSONResponse(context)
.responseBody({
state: state
})
.create();
api.logging().prepareLog(context).message(scriptFileName).addVariable("END", response).logDebug();
return api.result().prepareCreateActionResult(context)
.result(response)
.create();
}