The management service is a SOAP service that allows you to access and edit your repository without the use of Blueriq Encore. Everything that the Encore does graphically can be done via methods in the management service. You could theoretically build your own Encore that connects to the management service. This article describes how to authenticate and the different methods of the management service.
minOccurences in the XSD
Although many parameters in the XSD have a minOccurence of zero, almost all parameters are required. We advise to ignore the <!--Optional:--> line some tools such as SoapUI generate based on the minOccurence.
For authentication, you have to send your credentials with each request to the management service using Basic authentication.
We distinguish different categories of methods:
Dependencies
GetUsedByElementsForGlobalElement
The server will return a dependency for each element that uses the specified element. It will search through all projects and modules that are in scope for the specified element in the specified branch.
The server will return a dependency for each element that uses the specified element. It will search through all projects and modules that are in scope for the specified element in the specified branch.
Parameter
Parameter description
Required/optional
repository
the repository to search in
required
branch
the branch to search in
required
project
the project in which the element is defined
required
module
the module in which the element is defined
required
moduleElement
the element key of the element
required
If you use inheritance between modules, and specialization of elements, elements and dependencies you are looking for may react differently than expected.
Consider the following example for a module element: For a repository named ExampleRepository with a branch named ExampleBranch, with in the branch the following project structure:
project SpecificProject references GenericProject
GenericProject contains module GenericModule
GenericModule contains entity and attribute Person.Name
SpecificProject contains module SpecificModule, which includes GenericModule
SpecificModule contains container PersonView which displays Person.Name
SpecificModule contains page Overview which contains PersonView
project UnrelatedProject references none
UnrelatedProject contains module UnrelatedModule
UnrelatedModule contains entity and attribute Person.Name
UnrelatedModule contains container PersonView which displays Person.Name
If we use the GetUsedByElementsForModuleElement method with parameters: repository = ExampleRepository branch = ExampleBranch project = GenericProject module = GenericModule element key = Attribute, Person.Name
It will return a dependency for
PersonView in SpecificModule because
SpecificModule includes GenericModule
PersonView has a direct reference to Person.Name
But not for
Overview in SpecificModule because
Overview does not directly reference Person.Name
PersonView in UnrelatedModule because
there is no include between UnrelatedModule and GenericModule
The returned dependency will contain:
ReferenceType: Usage
From: ElementKeyReference
property ModuleElement will be a reference to PersonView in SpecificModule
all other properties will be null
To: ElementKeyReference
property ModuleElement will be reference Person.Name in GenericModule
all other properties will be null
Note that if Person.Name is also specialized in SpecificModule, then the dependency from PersonView in SpecificModule will refer to Person.Name in SpecificModule instead. This means the search with the given parameters will give no results: the search should also be executed for Person.Name in SpecificModule.
The server will return a description of the element with all the settings which can be configured.
For certain elements a special type is required to uniquely identify an element. An example are attributes, as an attribute with the same name can be defined multiple times for different entities. To find all of these special cases, search the wsdl for elements which have base="tns:ModuleElementKey". If you expand the example below we show how to work with attributes.
Parameter
Parameter description
Required/optional
repository
the repository to search in
required
branch
the branch to search in
required
project
the revision to be exported
required
module
the project in which the element is defined
required
moduleElement
The Name and Type of the module element which should be returned
The user can check a box to delete existing elements in the current branch that are not included in the imported branch. By checking this box, the imported branch will be identical to the exported branch.
ImportLibrary
ImportSpecification
Project Structure
GetModule
GetModules
GetPackage
GetPackages
GetProject
GetProjects
ReadLibraryMetadata
UnitTests
ExecuteAllUnitTests
Returns the result of all unit tests that are defined within a specific module scope.
Parameter
Parameter description
Required/optional
repository
The name of the repository of which the the unit tests have to be executed
required
branch
The name of the branch of which the the unit tests have to be executed
required
project
The name of the project of which the the unit tests have to be executed
required
module
The module scope of which the unit tests have to be executed. This includes tests and logic defined in the given module and all underlying modules.
Similar to ExecuteAllUnitTests above, but with the branch parameter replaced by a revisionId parameter to execute the tests of a particular revision. This operation is available since Blueriq 15.2.0.
ExecuteUnitTests
Returns the result of a list of specified unit tests, defined within a specific module scope.
Parameter
Parameter description
Required/optional
repository
The name of the repository of which the the unit tests have to be executed
required
branch
The name of the branch of which the the unit tests have to be executed
required
project
The name of the project of which the the unit tests have to be executed
required
module
The module scope of which the unit tests have to be executed. In contrast to the "ExecuteAllUnitTests" method, unlderlying modules are ignored here.
required
unittests
A list of unit tests to be run. In case no unit tests are submitted, the result will be "succeed".
Similar to ExecuteUnitTests above, but with the branch parameter replaced by a revisionId parameter to execute the tests of a particular revision. This operation is available since Blueriq 15.2.0.
Returns a list of revisions in a specified repository and branch, with the option to request a certain level of merged revisions
Usage recommendation : this method can be used as a better performing variant of the GetRevisions operation (with the includeMergeRevisions flag set to true).
Parameter
Parameter description
Required/optional
repository
the repository to search in
required
branch
the branch to search in
required
startIndex
the index of the first included revision
required
amount
the number of revisions to include; a negative amount includes all revisions
required
taggedOnly
boolean flag indicating whether to include only tagged revisions
required
level
the level of merge revision to include; a negative amount includes all levels of merged revisions
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<GetRevisionsWithLeveledMergeRevisionsResponse xmlns="http://www.everest.nl/aquima/studio/ManagementService/1.0">
<GetRevisionsWithLeveledMergeRevisionsResult>
<Revision>
<CommitTime>2016-11-29T13:30:18.277</CommitTime>
<RevisionId>99a878f4-5338-4910-974c-b5749303f7fe</RevisionId>
<Message>update from A B C</Message>
<Committer>admin</Committer>
<Branch>Trunk</Branch>
<ParentRevisionIds>64bac7d9-7140-4669-b3de-a8f0c98db5cf</ParentRevisionIds>
<ParentRevisionIds>6fd443ee-9a20-431f-8d91-b7b1a85bc217</ParentRevisionIds>
<MergeRevisions>
<CommitTime>2016-11-29T13:28:42.4</CommitTime>
<RevisionId>6fd443ee-9a20-431f-8d91-b7b1a85bc217</RevisionId>
<Message>update from Team b & C</Message>
<Committer>admin</Committer>
<Branch>TeamA</Branch>
<ParentRevisionIds>300c5d5c-08a5-4184-8c47-db7eb2aa1466</ParentRevisionIds>
</MergeRevisions>
<MergeRevisions>
<CommitTime>2016-11-28T17:39:01.007</CommitTime>
<RevisionId>300c5d5c-08a5-4184-8c47-db7eb2aa1466</RevisionId>
<Message>update from Trunk</Message>
<Committer>admin</Committer>
<Branch>TeamA</Branch>
<ParentRevisionIds>c00795a2-2c4d-4d12-be7d-35e3ea8d636d</ParentRevisionIds>
</MergeRevisions>
</Revision>
<Revision>
<CommitTime>2016-11-28T17:38:00.823</CommitTime>
<RevisionId>64bac7d9-7140-4669-b3de-a8f0c98db5cf</RevisionId>
<Message>create entity C on Trunk</Message>
<Committer>admin</Committer>
<Branch>Trunk</Branch>
<ParentRevisionIds>6f8c6390-dcb2-402d-b6bb-dc33bcdfce42</ParentRevisionIds>
</Revision>
<Revision>
<CommitTime>2016-11-28T17:37:39.927</CommitTime>
<RevisionId>6f8c6390-dcb2-402d-b6bb-dc33bcdfce42</RevisionId>
<Message>merge with teamA</Message>
<Committer>admin</Committer>
<Branch>Trunk</Branch>
<ParentRevisionIds>311d5dd3-8931-4e5c-99e5-0b3f22c47571</ParentRevisionIds>
<ParentRevisionIds>c00795a2-2c4d-4d12-be7d-35e3ea8d636d</ParentRevisionIds>
<MergeRevisions>
<CommitTime>2016-11-28T17:36:44.877</CommitTime>
<RevisionId>c00795a2-2c4d-4d12-be7d-35e3ea8d636d</RevisionId>
<Message>commit on TeamA branch</Message>
<Committer>admin</Committer>
<Branch>TeamA</Branch>
<ParentRevisionIds>311d5dd3-8931-4e5c-99e5-0b3f22c47571</ParentRevisionIds>
</MergeRevisions>
</Revision>
<Revision>
<CommitTime>2016-11-28T17:09:25.783</CommitTime>
<RevisionId>311d5dd3-8931-4e5c-99e5-0b3f22c47571</RevisionId>
<Message>initial commit on Trunk</Message>
<Committer>admin</Committer>
<Branch>Trunk</Branch>
<ParentRevisionIds>f9db26db-ca13-4154-a8dc-2c05fa81eda1</ParentRevisionIds>
</Revision>
<Revision>
<CommitTime>2016-11-28T17:08:58.74</CommitTime>
<RevisionId>f9db26db-ca13-4154-a8dc-2c05fa81eda1</RevisionId>
<Message>Created repository</Message>
<Committer>admin</Committer>
<Branch>Trunk</Branch>
</Revision>
</GetRevisionsWithLeveledMergeRevisionsResult>
</GetRevisionsWithLeveledMergeRevisionsResponse>
</s:Body>
</s:Envelope>
MergeBranch
MergeRevision
SetTags
UpdateRepository
UpdateBranch
UpdateBranchType
Other Methods
ApplyOperations
This operation allows for applying changes to the model in a particular branch. The list of operations is applied in the order in which they are provided (meaning that a creation operation of e.g. a module must precede the creation of module elements within it) and there can only be a single operation per element, otherwise this request will fail.
This request is executed atomically; either all operations succeed or the whole request is rejected.
Parameter
Parameter description
Required/optional
repository
the repository to search in
required
branch
the branch to search in
required
operations
the list of operations to apply.
required
The list of operations must contain OperationEntry elements with exactly one child element according to the type of element (ProjectOperation, PackageOperation, GlobalOperation, ModuleOperation, or ModuleElementOperation) that is being changed in that OperationEntry .
A ModuleElementOperation can either be a Create , Update , or Delete operation. In the case of Update , you need to be aware that the element is updated with the exact request data; optional elements that are omitted will be cleared instead of using their prior value as fallback. If the name of the OriginalKey and the name determined by the ModuleElement element differ then the element will be renamed, with "Update References" behavior enabled (this cannot be disabled).
The OriginalKey may take a specialized type depending on the type of element. In particular, all elements with a compound key require a dedicated type: attributes (AttributeKey), relations (RelationKey) and static instances (StaticInstanceKey). These types of key need an explicit xsi:type specification, where xsi is the XML Schema Instance namespace that needs to be declared in the SOAP envelope element (please refer to the example below).
Similarly, the ModuleElement element always needs an explicit xsi:type specification, as the ModuleElement element is of the abstract ModuleElement complex type. Hence, a concrete subtype needs to be given using xsi:type . Please be aware that the specified type name must include the namespace alias of the management service, which is ns in the example below (per the xmlns:ns declaration on the SOAP envelope element).
If no interaction occurs with a started search entry (e.g. results are not pulled via the GetAdvancedSearchResults method) for the configured timeout, the search is stopped and results are removed.
StartAdvancedSearch
This method starts a new search according to the input parameters and returns a GUID that can be further used to get the results or stop the search.
The server returns a SearchID: GUID associated with the newly started search .
Parameter
Parameter description
Required/optional
ElementName
name of the element to be searched
required
ElementTypes
array of element types that can be searched. Currently, the following global or module element types are supported : Container, Attribute, Presentation Style, Content Style, Text Item, Service Call, Flow
optional
IsInExposedFlow
boolean indicating whether the search should return information about elements in exposed flows
true: the advanced search will check if the searched element is reachable through an exposed flow and will return the information accordingly in the <IsInExposedFlow> element from the response.
false: the advanced search will not check if the searched element is reachable through an exposed flow and will return a null value in the <IsInExposedFlow> element from the response.
optional
IsSpecialized
boolean indicating whether the search should return information about specialized elements
true : the advanced search will check if the search element is specialized and return the information accordingly in the <IsSpecialized> element from the response.
false: the advanced search will not check if the search element is specialized and will return a null value in the <IsSpecialized> element from the response.
required
FullText
boolean indicating whether full-text search is enabled
optional
SearchDepth
parameter of type int, indicating the level of dependencies on which to search
optional, default value = 5
SearchIn
Array of objects composed of the name of the repository, branch and project which specifies the search location
This method stops the search for the specified Search Id, and also clears the results that are stored in the search cache in the Studio server. If the provided search id does not exist anymore, an error will be returned.
Parameter
Parameter description
Required/optional
SearchId
the GUID obtained after calling the StartAdvancedSearch method
This method returns the results associated with the input search id. The results could be partial or complete. The state of the search is indicated by the "IsSearchFinished" parameter.
Parameter
Parameter description
Required/optional
SearchId
the GUID obtained after calling the StartAdvancedSearch method