Qlik Community

Knowledge

Search or browse our knowledge base to find answers to your questions ranging from account questions to troubleshooting error messages. The content is curated and updated by our global Support team

Announcements
WE ARE LISTENING! New Navigation for Qlik Community, Sept. 26: TELL ME MORE

QMS API remove a Named CAL

cancel
Showing results for 
Search instead for 
Did you mean: 
Sonja_Bauernfeind
Digital Support
Digital Support

QMS API remove a Named CAL

Attachments

The below is an example on how to use the QMS API to remove Named CALs. 
 

Modifying the QlikView CAL assignments outside of the license agreement is considered a license breach. Ensure that modifications are done within the agreed license terms and conditions.
The examples are provided AS IS and no support or customization can be provided by Qlik Support.

 Environment:

QlikView 

 

Resolution:

 

For Named User CAL:
{
ServiceInfo[] QVS = apiClient.GetServices(ServiceTypes.QlikViewServer);
CALConfiguration CALConfig = apiClient.GetCALConfiguration(QVS[0].ID, CALConfigurationScope.NamedCALs);
CALConfig.NamedCALs.RemovedAssignedCALs.Add(NamedCalToBeRemoved)

CALConfig.NamedCALs.AssignedCALs = CALConfig.NamedCALs.AssignedCALs(AllCalsExceptNamedCalToBeRemoved)
apiClient.SaveCALConfiguration(CALConfig);
}
 
For Named Doc CAL:
{
metaData.Licensing.RemovedAssignedCALs.Add(c);
metaData.Licensing.AssignedCALs.Remove(c)

backendClient.SaveDocumentMetaData(metaData);
}
catch (Exception ex)
{
Console.WriteLine("Removal failed. Reason: {0}",ex.Message);
}


Attached is an example VBS file, and an example C# solution. To access the attachments, log on to the Qlik Support portal. This is provided as-is as an example, and should not be used in Production environments.

With PowerShell

A Powershell script to remove a named User CAL:

$url = "http://qlikserver1.domain.local:4799/QMS/Service"
 
function GetServiceKey
{
   param(
     [string]$url
   ) 
    $service = New-WebServiceProxy -Uri $url -Namespace QlikViewServer -UseDefaultCredential
    $serviceKey = $service.GetTimeLimitedServiceKey()
    return $serviceKey
}

$hdrs = @{}
$hdrs.Add("SOAPACTION","http://ws.qliktech.com/QMS/12/2/IQMS2/GetServices")
$hdrs.Add("Content-Type", "text/xml;charset=utf-8")
$hdrs.Add('X-Service-Key',$(GetServiceKey -url $url))

$body = @{}
$body = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://ws.qliktech.com/QMS/12/2/">
   <soapenv:Header/>
   <soapenv:Body>
      <ns:GetServices>
         <ns:serviceTypes>QlikViewServer</ns:serviceTypes>
      </ns:GetServices>
   </soapenv:Body>
</soapenv:Envelope>'

Write-host "Invoke-WebRequest -Uri $url -Method Post -Body $body -UseDefaultCredential -Headers $($hdrs.Values)"
$res = Invoke-WebRequest -Uri $url -Method Post -Body $body -UseDefaultCredential -Headers $hdrs

#
[xml]$myXml = $res.Content
$QVSServerID = $myXml.Envelope.Body.GetServicesResponse.GetServicesResult.ServiceInfo.ID
$QVSServerID

$body = @{}
$body = '<s:Envelope
    xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <SaveCALConfiguration
            xmlns="http://ws.qliktech.com/QMS/12/2/">
            <calConfiguration
                xmlns:a="http://schemas.datacontract.org/2004/07/PIX.QMSAPI.DataObjects.CALs"
                xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
                <a:DocumentCALs
                    i:nil="true"/>
                <a:NamedCALs>
                    <a:AllowDynamicAssignment>
                        true
                        </a:AllowDynamicAssignment>
                    <a:AllowLicenseLease>
                        true
                        </a:AllowLicenseLease>
                    <a:Assigned>
                        2
                        </a:Assigned>
                    <a:AssignedCALs>
                        <a:AssignedNamedCAL>
                            <a:UserName>DOMAIN\ADMINISTRATOR</a:UserName>
                            </a:AssignedNamedCAL>
                        <a:AssignedNamedCAL>
                            <a:UserName>DOMAIN\USER2</a:UserName>
                            </a:AssignedNamedCAL>
                        </a:AssignedCALs>
                        <a:IdentificationMode>UserName</a:IdentificationMode>
                    <a:InLicense>
                        5
                        </a:InLicense>
                    <a:LeasedCALs>
                        <a:LeasedNamedCAL>
                            </a:LeasedNamedCAL>
                        </a:LeasedCALs>
                    <a:Limit>
                        5
                        </a:Limit>
                    <a:RemovedAssignedCALs>
                    <a:AssignedNamedCAL>
                            <a:UserName>DOMAIN\USER1</a:UserName>
                            </a:AssignedNamedCAL>
                        </a:RemovedAssignedCALs>
                    </a:NamedCALs>
                <a:QVSID>'
            $body = $body + $QVSServerID
            $body = $body + '</a:QVSID>
            <a:Scope>NamedCALs</a:Scope>
          </calConfiguration>
      </SaveCALConfiguration>
   </s:Body>
</s:Envelope>'

$hdrs = @{}
$hdrs.Add("SOAPACTION","http://ws.qliktech.com/QMS/12/2/IQMS2/SaveCALConfiguration")
$hdrs.Add("Content-Type", "text/xml;charset=utf-8")
$hdrs.Add('X-Service-Key',$(GetServiceKey -url $url))
$res = Invoke-WebRequest -Uri $url -Method Post -Body $body -UseDefaultCredential -Headers $hdrs

#
$res.content
[xml]$myXml = $res.Content 

 

Both Named User CALs that you want to keep and the ones you want to remove must be specified.

If you are unsure of the full list of Named User CALs currently assigned, you can request it with the GetCALConfiguration API call, see below:

$url = "http://qlikserver1.domain.local:4799/QMS/Service"
 
function GetServiceKey
{
   param(
     [string]$url
   ) 
    $service = New-WebServiceProxy -Uri $url -Namespace QlikViewServer -UseDefaultCredential
    $serviceKey = $service.GetTimeLimitedServiceKey()
    return $serviceKey
}

$hdrs = @{}
$hdrs.Add("SOAPACTION","http://ws.qliktech.com/QMS/12/2/IQMS2/GetServices")
$hdrs.Add("Content-Type", "text/xml;charset=utf-8")
$hdrs.Add('X-Service-Key',$(GetServiceKey -url $url))

$body = @{}
$body = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://ws.qliktech.com/QMS/12/2/">
   <soapenv:Header/>
   <soapenv:Body>
      <ns:GetServices>
         <ns:serviceTypes>QlikViewServer</ns:serviceTypes>
      </ns:GetServices>
   </soapenv:Body>
</soapenv:Envelope>'

Write-host "Invoke-WebRequest -Uri $url -Method Post -Body $body -UseDefaultCredential -Headers $($hdrs.Values)"
$res = Invoke-WebRequest -Uri $url -Method Post -Body $body -UseDefaultCredential -Headers $hdrs

#
[xml]$myXml = $res.Content
$QVSServerID = $myXml.Envelope.Body.GetServicesResponse.GetServicesResult.ServiceInfo.ID
$QVSServerID

$body = @{}
$body = '<s:Envelope
    xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <GetCALConfiguration
            xmlns="http://ws.qliktech.com/QMS/12/2/">
            <qvsID>'
            $body = $body + $QVSServerID
            $body = $body + '</qvsID>
            <scope>NamedCALs</scope>
            </GetCALConfiguration>
        </s:Body>
    </s:Envelope>'

$hdrs = @{}
$hdrs.Add("SOAPACTION","http://ws.qliktech.com/QMS/12/2/IQMS2/GetCALConfiguration")
$hdrs.Add("Content-Type", "text/xml;charset=utf-8")
$hdrs.Add('X-Service-Key',$(GetServiceKey -url $url))
$res = Invoke-WebRequest -Uri $url -Method Post -Body $body -UseDefaultCredential -Headers $hdrs

#
$res.content
[xml]$myXml = $res.Content
Labels (1)
Version history
Last update:
‎2021-07-06 08:43 AM
Updated by:
Contributors