forked from DLSNNG/EnsembleRestOperations
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathREST Example Production.xml
494 lines (435 loc) · 19.8 KB
/
REST Example Production.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
<?xml version="1.0" encoding="UTF-8"?>
<Export generator="Cache" version="25" zv="Cache for Windows (x86-64) 2016.1.2 (Build 208U)" ts="2017-09-07 14:22:06">
<Class name="DLS.HTTP.OutboundAdapterV2">
<Description>
Modifies EnsLib.HTTP.OutboundAdapter to allow setting of content type used
when making %Net.HTTPRequest</Description>
<Super>EnsLib.HTTP.OutboundAdapter</Super>
<TimeChanged>64533,47007.517461</TimeChanged>
<TimeCreated>64533,44680.492802</TimeCreated>
<Property name="ContentType">
<Description>
Content Type Header to be used with HTTP request.</Description>
<Type>%String</Type>
<InitialExpression>"application/json"</InitialExpression>
<Parameter name="MAXLEN" value="1000"/>
</Property>
<Property name="CredentialsFallback">
<Description>
Fallback credentials to use in case primary credentials rejected</Description>
<Type>%String</Type>
<InitialExpression>"None"</InitialExpression>
</Property>
<Parameter name="SETTINGS">
<Description>
These are the production settings for this object</Description>
<Default><![CDATA[RegistryID:Basic:selector?context={Ens.ServiceRegistry.External.ContextSearch/Services?Protocols_1=REST&Protocols_2=HTTP},HTTPServer:Basic,HTTPPort:Basic,SSLConfig:Connection:sslConfigSelector,SSLCheckServerIdentity:Connection,ProxyServer:Connection,ProxyPort:Connection,ProxyHTTPS:Connection,URL:Basic,Credentials:Basic:credentialsSelector,CredentialsFallback:Basic:credentialsSelector,ContentType:Basic,UseCookies,ConnectTimeout:Connection,ResponseTimeout:Connection]]></Default>
</Parameter>
<Method name="Post">
<FormalSpec>*pHttpResponse:%Net.HttpResponse,pFormVarNames:%String,pData...</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
Set httpRequest = ..GetHttpRequest()
Quit ..SendFormDataArray(.pHttpResponse,"POST",httpRequest,.pFormVarNames,.pData)
]]></Implementation>
</Method>
<Method name="Get">
<FormalSpec>*pHttpResponse:%Net.HttpResponse,pFormVarNames:%String,pData...</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
Set httpRequest = ..GetHttpRequest()
Quit ..SendFormDataArray(.pHttpResponse,"GET",httpRequest,.pFormVarNames,.pData)
]]></Implementation>
</Method>
<Method name="Put">
<FormalSpec>*pHttpResponse:%Net.HttpResponse,pFormVarNames:%String,pData...</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
Set httpRequest = ..GetHttpRequest()
Quit ..SendFormDataArray(.pHttpResponse,"PUT",httpRequest,.pFormVarNames,.pData)
]]></Implementation>
</Method>
<Method name="Delete">
<FormalSpec>*pHttpResponse:%Net.HttpResponse,pFormVarNames:%String,pData...</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
Set httpRequest = ..GetHttpRequest()
Quit ..SendFormDataArray(.pHttpResponse,"DELETE",httpRequest,.pFormVarNames,.pData)
]]></Implementation>
</Method>
<Method name="GetHttpRequest">
<ReturnType>%Net.HttpRequest</ReturnType>
<Implementation><![CDATA[
Set request = ##class(%Net.HttpRequest).%New()
Set request.ContentType = ..ContentType
Quit request
]]></Implementation>
</Method>
</Class>
<Class name="DLS.REST.Example.BPL">
<Description>
Example BPL to demonstrate usage of DLS.REST.Operation</Description>
<Super>Ens.BusinessProcessBPL</Super>
<TimeChanged>64531,54919.584335</TimeChanged>
<TimeCreated>64531,46782.197564</TimeCreated>
<XData name="BPL">
<Description>
BPL Definition</Description>
<XMLNamespace>http://www.intersystems.com/bpl</XMLNamespace>
<Data><![CDATA[
<process language='objectscript' request='Ens.StringRequest' response='Ens.StringResponse' height='2000' width='2000' >
<context>
<property name='GetCommentsResponseString' type='%String' instantiate='0' >
<parameters>
<parameter name='MAXLEN' value='2500' />
</parameters>
</property>
</context>
<sequence xend='200' yend='550' >
<call name='Get Comments by PostId' target='RestExampleOperation' async='0' timeout='60' xpos='200' ypos='250' >
<annotation><![CDATA[Makes a REST request to http://jsonplaceholder.typicode.com/comments?postId=X
Where X is the stringValue of the request]]]]><![CDATA[></annotation>
<request type='DLS.REST.Request' >
<assign property="callrequest.FormVariables" value=""postId="_request.StringValue_", test=testing"" action="set" >
<annotation><![CDATA[Pass in FormVariables to REST Operation based on the StringValue of our Ens.StringRequest]]]]><![CDATA[></annotation>
</assign>
</request>
<response type='DLS.REST.Response' >
<assign property="context.GetCommentsResponseString" value="callresponse.ServerResponse" action="set" >
<annotation><![CDATA[Save server response to our BPL Context]]]]><![CDATA[></annotation>
</assign>
</response>
</call>
<trace name='Trace Comments' value='"Server responded with: "_context.GetCommentsResponseString' xpos='200' ypos='350' />
<code name='Trace Posts' xpos='200' ypos='450' >
<annotation><![CDATA[Use ServerResponse to construct an object and loop through properties.]]]]><![CDATA[></annotation>
<![CDATA[
Set responseString = context.GetCommentsResponseString
Set responseObj = {}.$fromJSON(responseString)
Set iter = responseObj.$getIterator()
While iter.$getNext(.key, .comment) {
$$$TRACE("Comment with ID "_comment.id_" has body of "_comment.body)
}]]]]><![CDATA[>
</code>
</sequence>
</process>
]]></Data>
</XData>
<Storage name="Default">
<Type>%Library.CacheStorage</Type>
</Storage>
</Class>
<Class name="DLS.REST.Example.InboundAdapter">
<Description>
Example Inbound Adapter to demonstrate DLS.REST.Operation usage</Description>
<Super>Ens.InboundAdapter</Super>
<TimeChanged>64531,46724.837964</TimeChanged>
<TimeCreated>64531,46690.932051</TimeCreated>
<Parameter name="SERVICEINPUTCLASS">
<Description>
Set the class that will be returned as Input to our Service</Description>
<Default>Ens.StringRequest</Default>
</Parameter>
<Method name="OnTask">
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
Set status = $$$OK
// This is where the real service would loop through globals or files and put their values into a message
// We're just pretending though, so we'll use a for loop and just pass the value of i into our message
For i=0:1:10 {
// Create new Message to pass to Service
Set tMsgIn = ##class(Ens.StringRequest).%New()
Set tMsgIn.StringValue = i
// Send the message to our Service for processing
Set tSC=..BusinessHost.ProcessInput(tMsgIn)
// Handle errors
If $$$ISERR(tSC) { Set status = tSC Break }
}
// Tell the Business Service to wait for the next call interval
// (Otherwise it will continuously call OnTask() once finished)
Set ..BusinessHost.%WaitForNextCallInterval = 1
Quit status
]]></Implementation>
</Method>
</Class>
<Class name="DLS.REST.Example.Service">
<Description>
Example service to demonstrate DLS.REST.Operation usage</Description>
<Super>Ens.BusinessService</Super>
<TimeChanged>64533,47566.316925</TimeChanged>
<TimeCreated>64531,46307.538456</TimeCreated>
<Parameter name="ADAPTER">
<Default>DLS.REST.Example.InboundAdapter</Default>
</Parameter>
<Property name="TargetConfigNames">
<Description>
Configuration item(s) to which to send messages</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="1000"/>
</Property>
<Parameter name="SETTINGS">
<Default><![CDATA[TargetConfigNames:Basic:selector?multiSelect=1&context={Ens.ContextSearch/ProductionItems?targets=1&productionName=@productionId}]]></Default>
</Parameter>
<Method name="OnProcessInput">
<FormalSpec>pInput:Ens.StringRequest,pOutput:%RegisteredObject</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
$$$TRACE("Calling "_$CLASSNAME())
// Loop through targets and send our input to them.
// Input is just a dummy value at the moment, used to trigger operations at a set interval
For iTarget=1:1:$L(..TargetConfigNames, ",") { Set tOneTarget=$ZStrip($P(..TargetConfigNames,",",iTarget),"<>W") Continue:""=tOneTarget
$$$sysTRACE("Calling business operation '"_tOneTarget_"'")
Set tSC=..SendRequestSync(tOneTarget,pInput)
}
Quit tSC
]]></Implementation>
</Method>
<Method name="OnGetConnections">
<Description>
Return an array of connections for drawing lines on the config diagram</Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>*pArray:%String,pItem:Ens.Config.Item</FormalSpec>
<Implementation><![CDATA[
Do ##super(.pArray,pItem)
If pItem.GetModifiedSetting("TargetConfigNames",.tValue) {
For i=1:1:$L(tValue,",") { Set tOne=$ZStrip($P(tValue,",",i),"<>W") Continue:""=tOne Set pArray(tOne)="" }
}
]]></Implementation>
</Method>
</Class>
<Class name="DLS.REST.OperationV2">
<Description>
Extension of EnsLib.REST.Operation that uses DLS.HTTP.OutboundAdapter to
Allow setting of Content Type as well as some other common features.
It expects to be passed a DLS.REST.Request containing either a FormVariables string or a JSON payload
It returns a DLS.REST.Response containing the ServerResponse string
Developers should aim to handle the request/response through the BPL logic, however a few hooks are
provided for situations where this needs to be done through the operation
(for example utilizing the adapter's credentialsObj).</Description>
<Super>EnsLib.REST.Operation</Super>
<TimeChanged>64533,50461.653589</TimeChanged>
<TimeCreated>64531,48013.725935</TimeCreated>
<Parameter name="ADAPTER">
<Description>
The outbound adapter used to handle our HTTP requests. Use this instead of EnsLib.HTTP.OutboundAdapter
so we can set Content Type of POST requests to 'application/json'</Description>
<Default>DLS.HTTP.OutboundAdapterV2</Default>
</Parameter>
<Parameter name="SETTINGS">
<Default>Action:Basic</Default>
</Parameter>
<Property name="Action">
<Description>
The HTTP verb to be used when sending a REST request</Description>
<Type>%String</Type>
<InitialExpression>"GET"</InitialExpression>
<Parameter name="VALUELIST" value=",GET,POST,PUT,DELETE"/>
</Property>
<Method name="PopulateFormVariables">
<Description>
Developers may override this method in order to pull form variables from the request message.
The output string will be passed to the Adapter's Get(), Post(), Put(), or Delete() request as
the pFormVarNames variable. See EnsLib.HTTP.OutboundAdapter for further documentation.</Description>
<FormalSpec>pRequest:DLS.REST.Request</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
// We simply return the form variables property of our DLS.REST.Request, however this hook allows
// other developers to modify how the message is processed.
Quit pRequest.FormVariables
]]></Implementation>
</Method>
<Method name="PopulatePayload">
<Description>
Developers may override this method in order to populate a payload object based on the
values provided in the request message. The Object output by this method will be passed to the
Adapter's Get(), Post(), Put(), or Delete() request as the pData variable.
See EnsLib.HTTP.OutboundAdapter for further documentation.</Description>
<FormalSpec>pRequest:DLS.REST.Request</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
// We simply return the Payload property of our DLS.REST.Request, however this hook allows
// other developers to modify how the message is processed.
Quit pRequest.Payload
]]></Implementation>
</Method>
<Method name="HandleResponse">
<Description>
Developers may override this method in order to update the Ens.Response message based on the data
retreived from the Server. pServerResponse will be an object constructed from the JSON string that
the server provided.</Description>
<FormalSpec>pServerResponse:%String</FormalSpec>
<ReturnType>DLS.REST.Response</ReturnType>
<Implementation><![CDATA[
// We simply set the JSON string as our ServerResponse property in the
// DLS.REST.Response message, however this hook allows other developers to modify how the response
// is handled.
Set responseString = pServerResponse
// Log an Error if we're within the 100,000 character limit of our ServerResponse property
$$$TRACE("Response String is "_$LENGTH(responseString)_" characters long")
If $LENGTH(responseString) > 100000 {
$$$LOGERROR("Server's response is greater than 100,000 characters long and cannot be saved to the Ensemble Response Message.")
}
// Instantiate our Ens.Response message
Set ensResponse = ##class(DLS.REST.Response).%New()
// Set the ServerResponse property of our DLS.REST.Response to the server's responseString
Set ensResponse.ServerResponse = pServerResponse
Quit ensResponse
]]></Implementation>
</Method>
<Method name="OnMessage">
<FormalSpec>pRequest:DLS.REST.Request,pResponse:DLS.REST.Response</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
$$$TRACE("Calling OnMessage of "_$CLASSNAME())
//Set up the form variables that will be passed into our HTTP request
$$$TRACE("Calling PopulateFormVariables of "_$CLASSNAME())
Set formVariables = ..PopulateFormVariables(pRequest)
$$$TRACE("Form variables are "_formVariables)
// Set up the payload that will be passed in as our HTTP request body
$$$TRACE("Calling PopulatePayload of "_$CLASSNAME())
Set payload = ..PopulatePayload(pRequest)
$$$TRACE("Assigning payload as HTTP request body "_payload)
// Send appropriate request type to Server depending on the selected Action
If ..Action = "POST" {
$$$TRACE("Sending POST to "_..Adapter.HTTPServer_"/"_..Adapter.URL)
Set status = ..Adapter.Post(.tHttpResponse, formVariables, payload)
}
ELSEIF ..Action = "GET" {
// Save original URL to restore to later
Set oldUrl = ..Adapter.URL
Set queryParams = $REPLACE(formVariables, ",", "&") // replace commas with "&"
Set queryParams = $REPLACE(queryParams, " ", "") // remove empty spaces
// Set our adapter's URL to include the query params
Set ..Adapter.URL = oldUrl_"?"_queryParams
$$$TRACE("Sending GET to "_..Adapter.HTTPServer_"/"_..Adapter.URL)
Set status = ..Adapter.Get(.tHttpResponse, formVariables, payload)
// Revert the adapter's URL to the original state (without query params)
Set ..Adapter.URL = oldUrl
}
ELSEIF ..Action = "PUT" {
$$$TRACE("Sending PUT to "_..Adapter.HTTPServer_"/"_..Adapter.URL)
Set status = ..Adapter.Put(.tHttpResponse, formVariables, payload)
}
ELSEIF ..Action = "DELETE" {
$$$TRACE("Sending DELETE to "_..Adapter.HTTPServer_"/"_..Adapter.URL)
Set status = ..Adapter.Delete(.tHttpResponse, formVariables, payload)
}
ELSE {
Set status = $$$ERROR(5001, "No Action Selected for REST Operation")
}
// Save response string to variable
Set responseString = tHttpResponse.Data.Read(100000) //TODO: need to determine max length of string that can be sent and update this accordingly
$$$TRACE("Server Response = "_responseString)
// Handle Response Object
$$$TRACE("Calling HandleResponse of "_$CLASSNAME())
Set pResponse = ..HandleResponse(responseString)
Quit status
]]></Implementation>
</Method>
</Class>
<Class name="DLS.REST.Request">
<Description>
Holds relevant information used to initiate a REST request</Description>
<Super>Ens.Request</Super>
<TimeChanged>64470,40012.860677</TimeChanged>
<TimeCreated>64469,43448.204874</TimeCreated>
<Property name="FormVariables">
<Type>%String</Type>
</Property>
<Property name="Payload">
<Type>%String</Type>
<Parameter name="MAXLEN" value="25000"/>
</Property>
<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DefaultData>RequestDefaultData</DefaultData>
<Data name="RequestDefaultData">
<Subscript>"Request"</Subscript>
<Value name="1">
<Value>FormVariables</Value>
</Value>
<Value name="2">
<Value>Payload</Value>
</Value>
</Data>
</Storage>
</Class>
<Class name="DLS.REST.Response">
<Description>
Holds information passed back by the Server as a response to a REST request
(Stored as a Cache Object)</Description>
<Super>Ens.Response</Super>
<TimeChanged>64498,53837.502611</TimeChanged>
<TimeCreated>64469,43527.969022</TimeCreated>
<Property name="ServerResponse">
<Type>%String</Type>
<Parameter name="MAXLEN" value="100000"/>
</Property>
<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DefaultData>ResponseDefaultData</DefaultData>
<Data name="ResponseDefaultData">
<Subscript>"Response"</Subscript>
<Value name="1">
<Value>ServerResponse</Value>
</Value>
</Data>
</Storage>
</Class>
<Project name="EnsExportItem_2017-09-07 14-21-07_261-10" LastModified="2017-09-07 14:22:06.376804">
<ProjectDescription>Studio Project generated starting from Ensemble Production Configuration Item 'DLS.PRODUCTION.Development : RestExampleBPL' at 2017-09-08 00:21:07.261 UTC</ProjectDescription>
<Items>
<ProjectItem name="DLS.HTTP.OutboundAdapterV2" type="CLS"></ProjectItem>
<ProjectItem name="DLS.REST.Example.BPL" type="CLS"></ProjectItem>
<ProjectItem name="DLS.REST.Example.InboundAdapter" type="CLS"></ProjectItem>
<ProjectItem name="DLS.REST.Example.Service" type="CLS"></ProjectItem>
<ProjectItem name="DLS.REST.OperationV2" type="CLS"></ProjectItem>
<ProjectItem name="DLS.REST.Request" type="CLS"></ProjectItem>
<ProjectItem name="DLS.REST.Response" type="CLS"></ProjectItem>
<ProjectItem name="Settings:RestExampleBPL.PTD" type="PTD"></ProjectItem>
<ProjectItem name="Settings:RestExampleOperation.PTD" type="PTD"></ProjectItem>
<ProjectItem name="Settings:RestExampleService.PTD" type="PTD"></ProjectItem>
<ProjectItem name="EnsExportNotes.EnsExportItem_2017-09-07 14-21-07_261-10.PTD" type="PTD"></ProjectItem>
</Items>
</Project>
<Document name="EnsExportNotes.EnsExportItem_2017-09-07 14-21-07_261-10.PTD"><ProjectTextDocument name="EnsExportNotes.EnsExportItem_2017-09-07 14-21-07_261-10" description="Export Notes for export EnsExportItem_2017-09-07 14-21-07_261-10">
<![CDATA[<Deployment>
<Creation>
<Machine>HS-TEST.DLABS.COM</Machine>
<Instance>HEALTHSHARE</Instance>
<Namespace>ENSDEV</Namespace>
<SourceProduction>DLS.PRODUCTION.Development</SourceProduction>
<Username>nathann</Username>
<UTC>2017-09-08 00:22:06.370</UTC>
</Creation>
<Notes>
</Notes>
<Contents>
<ExportProject>EnsExportItem_2017-09-07 14-21-07_261-10</ExportProject>
<Item num="1">DLS.HTTP.OutboundAdapterV2.CLS</Item>
<Item num="2">DLS.REST.Example.BPL.CLS</Item>
<Item num="3">DLS.REST.Example.InboundAdapter.CLS</Item>
<Item num="4">DLS.REST.Example.Service.CLS</Item>
<Item num="5">DLS.REST.OperationV2.CLS</Item>
<Item num="6">DLS.REST.Request.CLS</Item>
<Item num="7">DLS.REST.Response.CLS</Item>
<Item num="8">Settings:RestExampleBPL.PTD</Item>
<Item num="9">Settings:RestExampleOperation.PTD</Item>
<Item num="10">Settings:RestExampleService.PTD</Item>
</Contents>
<ProductionClassInExport></ProductionClassInExport>
</Deployment>
]]></ProjectTextDocument>
</Document>
<Document name="Settings:RestExampleBPL.PTD"><ProjectTextDocument name="Settings:RestExampleBPL" description="Settings for RestExampleBPL in Production DLS.PRODUCTION.Development">
<![CDATA[<Item Name="RestExampleBPL" Category="Example" ClassName="DLS.REST.Example.BPL" PoolSize="1" Enabled="true" Foreground="false" Comment="" LogTraceEvents="true" Schedule=""></Item>
]]></ProjectTextDocument>
</Document>
<Document name="Settings:RestExampleOperation.PTD"><ProjectTextDocument name="Settings:RestExampleOperation" description="Settings for RestExampleOperation in Production DLS.PRODUCTION.Development">
<![CDATA[<Item Name="RestExampleOperation" Category="Example" ClassName="DLS.REST.OperationV2" PoolSize="1" Enabled="true" Foreground="false" Comment="" LogTraceEvents="true" Schedule=""><Setting Target="Adapter" Name="HTTPServer">jsonplaceholder.typicode.com</Setting><Setting Target="Adapter" Name="SSLCheckServerIdentity">0</Setting><Setting Target="Adapter" Name="URL">comments</Setting></Item>
]]></ProjectTextDocument>
</Document>
<Document name="Settings:RestExampleService.PTD"><ProjectTextDocument name="Settings:RestExampleService" description="Settings for RestExampleService in Production DLS.PRODUCTION.Development">
<![CDATA[<Item Name="RestExampleService" Category="Example" ClassName="DLS.REST.Example.Service" PoolSize="1" Enabled="false" Foreground="false" Comment="" LogTraceEvents="false" Schedule=""><Setting Target="Host" Name="TargetConfigNames">RestExampleBPL</Setting><Setting Target="Adapter" Name="CallInterval">30</Setting></Item>
]]></ProjectTextDocument>
</Document></Export>