The management service is a SOAP service that allows you to access and edit your studio repository without the use of studio. Everything that the studio does graphically can be done via methods in the management service. You could theoretically build your own studio that connects to the management service. This article describes how to authenticate and the different methods of the management service.
For authentication, you have to send your credentials with each request to the management service. Depending on your settings in studio, this might for example be Basic or NTLM. Here is an example of how to configure this in SOAPUI:
We distinguish different categories of methods:
Dependencies
GetUsedByElementsForGlobalElement
Parameters
repository: the repository to search in, required
branch: the branch to search in, required
project: the project in which the element is defined, required
globalElement: the element key of the element, required
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.
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
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.
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.
GetUseElementsForGlobalElement
Parameters
repository: the repository to search in, required
branch: the branch to search in, required
project: the project in which the element is defined, required
globalElement: the name and the global element type of the global element, required
The server will return a dependency for each element that is used by the specified element.
project: the project in which the element is defined, required
module: the element key of the element, required
moduleElement: The Name and Type of the module element which should be returned.
For certain elements a special type is required to uniquely identify an element in studio. 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.
The server will return a description of the element with all the settings which can be configured in studio.
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
ExecuteUnitTests
Version Management
Commit
CreateBranch
CreateBranchType
CreateFeatureBranch
CreateFeatureBranchOnRevision
DeleteRepository
DeleteBranch
DeleteBranchType
GetRepository
GetRepositories
GetBranch
GetBranches
GetBranchType
GetBranchTypes
GetProjectsForRevision
GetRevision
GetRevisionChanges
Returns the changes in a specific revision.
Parameters:
repository: the repository to search in, required.
branch: the branch to search in, required.
revision: the revision whose changes are to be retrieved, required
Returns a list of revisions in a specified repository and branch, with the option to request a certain level of merged revisions
Parameters:
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, required; a negative amount includes all revisions
taggedOnly : boolean flag indicating whether to include only tagged revisions, required
level : the level of merge revision to include, required; a negative amount includes all levels 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).
<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
ApplyOperation
EvaluateExpression
GetCurrentIdentity
GetDataSource
GetLicenseData
GetStatus
GetStatusMaxDepth
HasModuleWriteAccess
IsInRole
Logout
RetrieveLog
RetrieveServerInformation
RetrieveSubscriptionStatus
SendMessage
SetDataSource
ValidateProject
GetStatusMaxDepth
Returns a list of revisions which are the pending revisions to be commited(accepted in the branch). Same as GetStatus
repository : the repository to search in, required
branch : the branch to search in, required
maxMergedRevisionsDepth : the maximum depth which is search is the revision tree
The maxMergedRevisionsDepth service was added because the GetStatus service retrieved HUGE amount of data which was mostly repetitive in very big pending revisions structures. Suggested maxMergedRevisionsDepth values :5-10