2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2018 Huawei Technologies Co., Ltd. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.so.bpmn.infrastructure.scripts
23 import org.onap.so.logger.MsoLogger
25 import static org.apache.commons.lang3.StringUtils.*;
27 import org.apache.commons.lang3.*
28 import org.camunda.bpm.engine.delegate.BpmnError
29 import org.camunda.bpm.engine.delegate.DelegateExecution
30 import org.onap.so.bpmn.common.recipe.ResourceInput;
31 import org.onap.so.bpmn.common.resource.ResourceRequestBuilder
32 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
33 import org.onap.so.bpmn.common.scripts.ExceptionUtil
34 import org.onap.so.bpmn.common.scripts.MsoUtils
35 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
36 import org.onap.so.bpmn.core.json.JsonUtils
37 import org.onap.so.bpmn.common.scripts.MsoUtils
38 import org.onap.so.logger.MsoLogger
43 * This groovy class supports the <class>DeleteSDNCCNetworkResource.bpmn</class> process.
44 * flow for SDNC Network Resource
46 public class DeleteSDNCNetworkResource extends AbstractServiceTaskProcessor {
47 private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, DeleteSDNCNetworkResource.class);
49 String Prefix="DELSDNCRES_"
51 ExceptionUtil exceptionUtil = new ExceptionUtil()
53 JsonUtils jsonUtil = new JsonUtils()
55 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
57 MsoUtils msoUtils = new MsoUtils()
59 public void preProcessRequest(DelegateExecution execution){
60 def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
61 msoLogger.info(" ***** Started preProcessRequest *****")
64 //get bpmn inputs from resource request.
65 String requestId = execution.getVariable("mso-request-id")
66 String requestAction = execution.getVariable("requestAction")
67 msoLogger.info("The requestAction is: " + requestAction)
68 String recipeParamsFromRequest = execution.getVariable("recipeParams")
69 msoLogger.info("The recipeParams is: " + recipeParamsFromRequest)
70 String resourceInput = execution.getVariable("resourceInput")
71 msoLogger.info("The resourceInput is: " + resourceInput)
72 //Get ResourceInput Object
73 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)
74 execution.setVariable(Prefix + "resourceInput", resourceInputObj)
76 //Deal with recipeParams
77 String recipeParamsFromWf = execution.getVariable("recipeParamXsd")
78 String resourceModelName = resourceInputObj.getResourceModelInfo().getModelName()
79 //For sdnc requestAction default is "NetworkInstance"
80 String operationType = "Network"
81 if(!StringUtils.isBlank(recipeParamsFromRequest) && "null" != recipeParamsFromRequest){
82 //the operationType from worflow(first node) is second priority.
83 operationType = jsonUtil.getJsonValue(recipeParamsFromRequest, "operationType")
85 if(!StringUtils.isBlank(recipeParamsFromWf)){
86 //the operationType from worflow(first node) is highest priority.
87 operationType = jsonUtil.getJsonValue(recipeParamsFromWf, "operationType")
91 //For sdnc, generate svc_action and request_action
92 String sdnc_svcAction = "delete"
93 switch (resourceInputObj.getResourceModelInfo().getModelName()) {
95 case ~/[\w\s\W]*overlay[\w\s\W]*/ :
96 ///This will be resolved in R3.
97 sdnc_svcAction ="deactivate"
98 operationType = "NCINetwork"
101 case ~/[\w\s\W]*underlay[\w\s\W]*/ :
102 //This will be resolved in R3.
103 operationType ="Network"
106 case ~/[\w\s\W]*SOTNConnectivity[\w\s\W]*/ :
107 operationType = "SOTNConnectivity"
108 execution.setVariable("isActivateRequired", "true")
111 case ~/[\w\s\W]*sotnvpnattachment[\w\s\W]*/ :
112 operationType = "SOTNAttachment"
113 execution.setVariable("isActivateRequired", "true")
116 case ~/[\w\s\W]*SiteVF[\w\s\W]*/ :
117 operationType = "Site"
118 execution.setVariable("isActivateRequired", "true")
121 case ~/[\w\s\W]*deviceVF[\w\s\W]*/ :
122 operationType = "SDWANDevice"
123 execution.setVariable("isActivateRequired", "true")
126 case ~/[\w\s\W]*SDWANConnectivity[\w\s\W]*/ :
127 operationType = "SDWANConnectivity"
128 execution.setVariable("isActivateRequired", "true")
131 case ~/[\w\s\W]*sdwanvpnattachment[\w\s\W]*/ :
132 operationType = "SDWANAttachment"
133 execution.setVariable("isActivateRequired", "true")
136 case ~/[\w\s\W]*SiteWANVF[\w\s\W]*/ :
137 operationType = "SDWANPort"
138 execution.setVariable("isActivateRequired", "true")
144 String sdnc_requestAction = StringUtils.capitalize(sdnc_svcAction) + operationType +"Instance"
145 execution.setVariable(Prefix + "svcAction", sdnc_svcAction)
146 execution.setVariable(Prefix + "requestAction", sdnc_requestAction)
147 execution.setVariable(Prefix + "serviceInstanceId", resourceInputObj.getServiceInstanceId())
148 execution.setVariable("mso-request-id", requestId)
149 execution.setVariable("mso-service-instance-id", resourceInputObj.getServiceInstanceId())
150 //TODO Here build networkrequest
152 } catch (BpmnError e) {
154 } catch (Exception ex){
155 msg = "Exception in preProcessRequest " + ex.getMessage()
156 msoLogger.debug( msg)
157 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
162 * Pre Process the BPMN Flow Request
164 * generate the nsOperationKey
165 * generate the nsParameters
167 public void prepareSDNCRequest (DelegateExecution execution) {
168 def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
169 msoLogger.info(" ***** Started prepareSDNCRequest *****")
173 String sdnc_svcAction = execution.getVariable(Prefix + "svcAction")
174 String sdnc_requestAction = execution.getVariable(Prefix + "requestAction")
175 String sdncCallback = execution.getVariable("URN_mso_workflow_sdncadapter_callback")
176 String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
178 String hdrRequestId = execution.getVariable("mso-request-id")
179 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
180 String source = execution.getVariable("source")
181 String sdnc_service_id = execution.getVariable(Prefix + "sdncServiceId")
182 ResourceInput resourceInputObj = execution.getVariable(Prefix + "resourceInput")
183 String serviceType = resourceInputObj.getServiceType()
184 String serviceModelInvariantUuid = resourceInputObj.getServiceModelInfo().getModelInvariantUuid()
185 String serviceModelUuid = resourceInputObj.getServiceModelInfo().getModelUuid()
186 String serviceModelVersion = resourceInputObj.getServiceModelInfo().getModelVersion()
187 String serviceModelName = resourceInputObj.getServiceModelInfo().getModelName()
188 String globalCustomerId = resourceInputObj.getGlobalSubscriberId()
189 String modelInvariantUuid = resourceInputObj.getResourceModelInfo().getModelInvariantUuid();
190 String modelCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
191 String modelUuid = resourceInputObj.getResourceModelInfo().getModelUuid()
192 String modelName = resourceInputObj.getResourceModelInfo().getModelName()
193 String modelVersion = resourceInputObj.getResourceModelInfo().getModelVersion()
194 String resourceInstnaceId = resourceInputObj.getResourceInstancenUuid()
195 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
196 String sdncTopologyDeleteRequest = ""
199 case ~/[\w\s\W]*deviceVF[\w\s\W]*/ :
200 case ~/[\w\s\W]*SiteWANVF[\w\s\W]*/ :
201 case ~/[\w\s\W]*SiteVF[\w\s\W]*/:
202 sdncTopologyDeleteRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
203 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
204 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
205 <sdncadapter:RequestHeader>
206 <sdncadapter:RequestId>${msoUtils.xmlEncode(hdrRequestId)}</sdncadapter:RequestId>
207 <sdncadapter:SvcInstanceId>${msoUtils.xmlEncode(serviceInstanceId)}</sdncadapter:SvcInstanceId>
208 <sdncadapter:SvcAction>${msoUtils.xmlEncode(sdnc_svcAction)}</sdncadapter:SvcAction>
209 <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation>
210 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
211 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
212 </sdncadapter:RequestHeader>
213 <sdncadapterworkflow:SDNCRequestData>
214 <request-information>
215 <request-id>${msoUtils.xmlEncode(hdrRequestId)}</request-id>
216 <request-action>${msoUtils.xmlEncode(sdnc_requestAction)}</request-action>
217 <source>${msoUtils.xmlEncode(source)}</source>
218 <notification-url></notification-url>
219 <order-number></order-number>
220 <order-version></order-version>
221 </request-information>
222 <service-information>
223 <service-id>${msoUtils.xmlEncode(serviceInstanceId)}</service-id>
224 <subscription-service-type>${msoUtils.xmlEncode(serviceType)}</subscription-service-type>
225 <onap-model-information>
226 <model-invariant-uuid>${msoUtils.xmlEncode(serviceModelInvariantUuid)}</model-invariant-uuid>
227 <model-uuid>${msoUtils.xmlEncode(serviceModelUuid)}</model-uuid>
228 <model-version>${msoUtils.xmlEncode(serviceModelVersion)}</model-version>
229 <model-name>${msoUtils.xmlEncode(serviceModelName)}</model-name>
230 </onap-model-information>
231 <service-instance-id>${msoUtils.xmlEncode(serviceInstanceId)}</service-instance-id>
232 <global-customer-id>${msoUtils.xmlEncode(globalCustomerId)}</global-customer-id>
233 <subscriber-name>${msoUtils.xmlEncode(globalCustomerId)}</subscriber-name>
234 </service-information>
236 <vnf-id>$resourceInstnaceId</vnf-id>
237 <vnf-type></vnf-type>
238 <onap-model-information>
239 <model-invariant-uuid>${msoUtils.xmlEncode(modelInvariantUuid)}</model-invariant-uuid>
240 <model-customization-uuid>${msoUtils.xmlEncode(modelCustomizationUuid)}</model-customization-uuid>
241 <model-uuid>${msoUtils.xmlEncode(modelUuid)}</model-uuid>
242 <model-version>${msoUtils.xmlEncode(modelVersion)}</model-version>
243 <model-name>${msoUtils.xmlEncode(modelName)}</model-name>
244 </onap-model-information>
247 <vnf-input-parameters>
248 </vnf-input-parameters>
249 <request-version></request-version>
250 <vnf-name></vnf-name>
254 </sdncadapterworkflow:SDNCRequestData>
255 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
258 case ~/[\w\s\W]*sdwanvpnattachment[\w\s\W]*/ :
259 case ~/[\w\s\W]*sotnvpnattachment[\w\s\W]*/ :
260 sdncTopologyDeleteRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
261 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
262 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
263 <sdncadapter:RequestHeader>
264 <sdncadapter:RequestId>${msoUtils.xmlEncode(hdrRequestId)}</sdncadapter:RequestId>
265 <sdncadapter:SvcInstanceId>${msoUtils.xmlEncode(serviceInstanceId)}</sdncadapter:SvcInstanceId>
266 <sdncadapter:SvcAction>${msoUtils.xmlEncode(sdnc_svcAction)}</sdncadapter:SvcAction>
267 <sdncadapter:SvcOperation>connection-attachment-topology-operation</sdncadapter:SvcOperation>
268 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
269 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
270 </sdncadapter:RequestHeader>
271 <sdncadapterworkflow:SDNCRequestData>
272 <request-information>
273 <request-id>${msoUtils.xmlEncode(hdrRequestId)}</request-id>
274 <request-action>${msoUtils.xmlEncode(sdnc_requestAction)}</request-action>
275 <source>${msoUtils.xmlEncode(source)}</source>
276 <notification-url></notification-url>
277 <order-number></order-number>
278 <order-version></order-version>
279 </request-information>
280 <service-information>
281 <service-id>${msoUtils.xmlEncode(serviceInstanceId)}</service-id>
282 <subscription-service-type>${msoUtils.xmlEncode(serviceType)}</subscription-service-type>
283 <onap-model-information>
284 <model-invariant-uuid>${msoUtils.xmlEncode(serviceModelInvariantUuid)}</model-invariant-uuid>
285 <model-uuid>${msoUtils.xmlEncode(serviceModelUuid)}</model-uuid>
286 <model-version>${msoUtils.xmlEncode(serviceModelVersion)}</model-version>
287 <model-name>${msoUtils.xmlEncode(serviceModelName)}</model-name>
288 </onap-model-information>
289 <service-instance-id>${msoUtils.xmlEncode(serviceInstanceId)}</service-instance-id>
290 <global-customer-id>${msoUtils.xmlEncode(globalCustomerId)}</global-customer-id>
291 <subscriber-name></subscriber-name>
292 </service-information>
293 <allotted-resource-information>
294 <allotted-resource-id>$resourceInstnaceId</allotted-resource-id>
295 <allotted-resource-type></allotted-resource-type>
296 <parent-service-instance-id></parent-service-instance-id>
297 <onap-model-information>
298 <model-invariant-uuid>${msoUtils.xmlEncode(modelInvariantUuid)}</model-invariant-uuid>
299 <model-customization-uuid>${msoUtils.xmlEncode(modelCustomizationUuid)}</model-customization-uuid>
300 <model-uuid>${msoUtils.xmlEncode(modelUuid)}</model-uuid>
301 <model-version>${msoUtils.xmlEncode(modelVersion)}</model-version>
302 <model-name>${msoUtils.xmlEncode(modelName)}</model-name>
303 </onap-model-information>
304 </allotted-resource-information>
305 <connection-attachment-request-input>
306 </connection-attachment-request-input>
307 </sdncadapterworkflow:SDNCRequestData>
308 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
312 sdncTopologyDeleteRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
313 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
314 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
315 <sdncadapter:RequestHeader>
316 <sdncadapter:RequestId>${msoUtils.xmlEncode(hdrRequestId)}</sdncadapter:RequestId>
317 <sdncadapter:SvcInstanceId>${msoUtils.xmlEncode(serviceInstanceId)}</sdncadapter:SvcInstanceId>
318 <sdncadapter:SvcAction>${msoUtils.xmlEncode(sdnc_svcAction)}</sdncadapter:SvcAction>
319 <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
320 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
321 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
322 </sdncadapter:RequestHeader>
323 <sdncadapterworkflow:SDNCRequestData>
324 <request-information>
325 <request-id>${msoUtils.xmlEncode(hdrRequestId)}</request-id>
326 <request-action>${msoUtils.xmlEncode(sdnc_requestAction)}</request-action>
327 <source>${msoUtils.xmlEncode(source)}</source>
328 <notification-url></notification-url>
329 <order-number></order-number>
330 <order-version></order-version>
331 </request-information>
332 <service-information>
333 <service-id>${msoUtils.xmlEncode(serviceInstanceId)}</service-id>
334 <subscription-service-type>${msoUtils.xmlEncode(serviceType)}</subscription-service-type>
335 <onap-model-information>
336 <model-invariant-uuid>${msoUtils.xmlEncode(serviceModelInvariantUuid)}</model-invariant-uuid>
337 <model-uuid>${msoUtils.xmlEncode(serviceModelUuid)}</model-uuid>
338 <model-version>${msoUtils.xmlEncode(serviceModelVersion)}</model-version>
339 <model-name>${msoUtils.xmlEncode(serviceModelName)}</model-name>
340 </onap-model-information>
341 <service-instance-id>${msoUtils.xmlEncode(serviceInstanceId)}</service-instance-id>
342 <global-customer-id>${msoUtils.xmlEncode(globalCustomerId)}</global-customer-id>
343 </service-information>
344 <network-information>
345 <network-id>$resourceInstnaceId</network-id>
346 <onap-model-information>
347 <model-invariant-uuid>${msoUtils.xmlEncode(modelInvariantUuid)}</model-invariant-uuid>
348 <model-customization-uuid>${msoUtils.xmlEncode(modelCustomizationUuid)}</model-customization-uuid>
349 <model-uuid>${msoUtils.xmlEncode(modelUuid)}</model-uuid>
350 <model-version>${msoUtils.xmlEncode(modelVersion)}</model-version>
351 <model-name>${msoUtils.xmlEncode(modelName)}</model-name>
352 </onap-model-information>
353 </network-information>
354 <network-request-input>
355 <network-input-parameters></network-input-parameters>
356 </network-request-input>
357 </sdncadapterworkflow:SDNCRequestData>
358 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
361 String sdncTopologyDeleteRequesAsString = utils.formatXml(sdncTopologyDeleteRequest)
362 utils.logAudit(sdncTopologyDeleteRequesAsString)
363 execution.setVariable("sdncAdapterWorkflowRequest", sdncTopologyDeleteRequesAsString)
364 msoLogger.info("sdncAdapterWorkflowRequest - " + "\n" + sdncTopologyDeleteRequesAsString)
366 } catch (Exception ex) {
367 String exceptionMessage = " Bpmn error encountered in DeleteSDNCCNetworkResource flow. prepareSDNCRequest() - " + ex.getMessage()
368 msoLogger.debug( exceptionMessage)
369 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
372 msoLogger.info(" ***** Exit prepareSDNCRequest *****")
375 private void setProgressUpdateVariables(DelegateExecution execution, String body) {
376 def dbAdapterEndpoint = execution.getVariable("URN_mso_adapters_openecomp_db_endpoint")
377 execution.setVariable("CVFMI_dbAdapterEndpoint", dbAdapterEndpoint)
378 execution.setVariable("CVFMI_updateResOperStatusRequest", body)
381 public void prepareUpdateBeforeDeleteSDNCResource(DelegateExecution execution) {
382 ResourceInput resourceInputObj = execution.getVariable(Prefix + "resourceInput")
383 String operType = resourceInputObj.getOperationType()
384 String resourceCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
385 String serviceInstanceId = resourceInputObj.getServiceInstanceId()
386 String operationId = resourceInputObj.getOperationId()
387 String progress = "20"
388 String status = "processing"
389 String statusDescription = "SDCN resource delete invoked"
391 //String operationId = execution.getVariable("operationId")
394 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
395 xmlns:ns="http://org.openecomp.mso/requestsdb">
398 <ns:updateResourceOperationStatus>
399 <operType>${msoUtils.xmlEncode(operType)}</operType>
400 <operationId>${msoUtils.xmlEncode(operationId)}</operationId>
401 <progress>${msoUtils.xmlEncode(progress)}</progress>
402 <resourceTemplateUUID>${msoUtils.xmlEncode(resourceCustomizationUuid)}</resourceTemplateUUID>
403 <serviceId>${msoUtils.xmlEncode(serviceInstanceId)}</serviceId>
404 <status>${msoUtils.xmlEncode(status)}</status>
405 <statusDescription>${msoUtils.xmlEncode(statusDescription)}</statusDescription>
406 </ns:updateResourceOperationStatus>
408 </soapenv:Envelope>""";
410 setProgressUpdateVariables(execution, body)
414 public void prepareUpdateAfterDeleteSDNCResource(DelegateExecution execution) {
415 ResourceInput resourceInputObj = execution.getVariable(Prefix + "resourceInput")
416 String operType = resourceInputObj.getOperationType()
417 String resourceCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
418 String serviceInstanceId = resourceInputObj.getServiceInstanceId()
419 String operationId = resourceInputObj.getOperationId()
420 String progress = "100"
421 String status = "finished"
422 String statusDescription = "SDCN resource delete and deactivation completed"
424 //String operationId = execution.getVariable("operationId")
427 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
428 xmlns:ns="http://org.openecomp.mso/requestsdb">
431 <ns:updateResourceOperationStatus>
432 <operType>${msoUtils.xmlEncode(operType)}</operType>
433 <operationId>${msoUtils.xmlEncode(operationId)}</operationId>
434 <progress>${msoUtils.xmlEncode(progress)}</progress>
435 <resourceTemplateUUID>${msoUtils.xmlEncode(resourceCustomizationUuid)}</resourceTemplateUUID>
436 <serviceId>${msoUtils.xmlEncode(serviceInstanceId)}</serviceId>
437 <status>${msoUtils.xmlEncode(status)}</status>
438 <statusDescription>${msoUtils.xmlEncode(statusDescription)}</statusDescription>
439 </ns:updateResourceOperationStatus>
441 </soapenv:Envelope>""";
443 setProgressUpdateVariables(execution, body)
446 public void postDeleteSDNCCall(DelegateExecution execution){
447 def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
448 msoLogger.info(" ***** Started prepareSDNCRequest *****")
449 String responseCode = execution.getVariable(Prefix + "sdncDeleteReturnCode")
450 String responseObj = execution.getVariable(Prefix + "SuccessIndicator")
452 msoLogger.info("response from sdnc, response code :" + responseCode + " response object :" + responseObj)
453 msoLogger.info(" ***** Exit prepareSDNCRequest *****")
456 public void sendSyncResponse (DelegateExecution execution) {
457 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
458 msoLogger.debug( " *** sendSyncResponse *** ")
461 String operationStatus = "finished"
462 // RESTResponse for main flow
463 String resourceOperationResp = """{"operationStatus":"${operationStatus}"}""".trim()
464 msoLogger.debug( " sendSyncResponse to APIH:" + "\n" + resourceOperationResp)
465 sendWorkflowResponse(execution, 202, resourceOperationResp)
466 execution.setVariable("sentSyncResponse", true)
468 } catch (Exception ex) {
469 String msg = "Exceptuion in sendSyncResponse:" + ex.getMessage()
470 msoLogger.debug( msg)
471 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
473 msoLogger.debug(" ***** Exit sendSyncResopnse *****")