[midPoint] Bulk Assignment of Roles to Users via JSON API Request
Pavol Mederly
mederly at evolveum.com
Tue Jun 21 13:21:13 CEST 2022
Actually, even the "pipeline" can be removed, by embedding the action
right into the "search" element:
{
"@ns" : "http://midpoint.evolveum.com/xml/ns/public/model/scripting-3",
"search" : {
"type": "UserType",
"searchFilter": {
"@ns" : "http://prism.evolveum.com/xml/ns/public/query-3",
"inOid": {
"value": [
"00000000-0000-0000-0000-000000000002"
]
}
},
"assign": {
"targetRef": {
"oid":"00000000-0000-0000-0000-000000000008",
"type":"RoleType"
}
}
}
}
For more scripting examples, please see
https://github.com/Evolveum/midpoint/tree/master/model/model-intest/src/test/resources/scripting
directory.
--
Pavol Mederly
Software developer
evolveum.com
On 21/06/2022 13:16, Pavol Mederly via midPoint wrote:
>
> Hello Alexander,
>
> actually, there was a couple of problems in your JSON code, mainly
> related to namespace.
>
> This one is parseable:
>
> {
> "@ns" :
> "http://midpoint.evolveum.com/xml/ns/public/model/scripting-3",
> "pipeline": [
> {
> "@element": "search",
> "type": "c:UserType",
> "searchFilter": {
> "@ns" : "http://prism.evolveum.com/xml/ns/public/query-3",
> "inOid": {
> "value": [
> "c38dc04a-e780-4475-ad51-f42dd054f622",
> "cd244459-81fe-4208-a51c-111cae039185",
> "12d665c0-7114-4b49-97ba-94c4cd154f8a"
> ]
> }
> }
> },
> {
> "@element": "sequence",
> "@value": [
> {
> "@element": "action",
> "type": "assign",
> "parameter": {
> "name": "role",
>
> "http://midpoint.evolveum.com/xml/ns/public/common/common-3#value": {
> "@type": "string",
> "@value": "a6afcd50-5f33-4250-8b93-62cb72e1a39a"
> }
> }
> }
> ]
> }
> ]
> }
>
> (the changes are highlighted)
>
> Note that since 4.2 it's possible to write the actions in more
> compact, statically-typed way. See
> https://docs.evolveum.com/midpoint/reference/misc/bulk/actions/ or
> https://github.com/Evolveum/midpoint/blob/30e5a166e566a99517dedb48680622a8c651c1ea/model/model-intest/src/test/resources/scripting/assign-pirate-manager-to-will.xml
> for an XML sample.
>
> Like this (I have also removed "sequence" as it superfluous here):
>
> {
> "@ns" :
> "http://midpoint.evolveum.com/xml/ns/public/model/scripting-3",
> "pipeline": [
> {
> "@element": "search",
> "type": "UserType",
> "searchFilter": {
> "@ns" : "http://prism.evolveum.com/xml/ns/public/query-3",
> "inOid": {
> "value": [
> "00000000-0000-0000-0000-000000000002"
> ]
> }
> }
> },
> {
> "@element": "assign",
> "targetRef": {
> "oid": "00000000-0000-0000-0000-000000000008",
> "type": "RoleType"
> }
> }
> ]
> }
>
> Best regards,
>
> --
> Pavol Mederly
> Software developer
> evolveum.com
> On 21/06/2022 12:12, Alexander Bruckner via midPoint wrote:
>>
>> Hello,
>>
>> thank you for your suggestions!
>>
>> I am not sure if the pipeline itself is the problem since the request
>> seems to work as an XML request, only when attempting to send it in
>> JSON format the mentioned error happened.
>>
>> Kind regards,
>>
>> Alexander
>>
>> *Von:*Emil Militzer <emil.militzer at posteo.de>
>> *Gesendet:* Mittwoch, 15. Juni 2022 17:46
>> *An:* midPoint General Discussion <midpoint at lists.evolveum.com>
>> *Cc:* Alexander Bruckner <alexander.bruckner at ventum.com>
>> *Betreff:* Re: [midPoint] Bulk Assignment of Roles to Users via JSON
>> API Request
>>
>> Hi,
>>
>> I think this will not work because the pipeline is not working correctly:
>>
>> *
>>
>> *
>>
>> https://jira.evolveum.com/browse/MID-7965?orderby=updated+DESC%2C+priority+DESC
>>
>> Kind regards
>>
>> Emil
>>
>>
>>
>> Am 15.06.2022 um 15:08 schrieb Alexander Bruckner via midPoint
>> <midpoint at lists.evolveum.com>:
>>
>>
>>
>> Hello everyone,
>>
>> we are currently trying to assign one role to multiple users via
>> a JSON API request. We’ve already managed to do this over XML
>> with this request body:
>>
>> <s:pipelinexmlns:s=http://midpoint.evolveum.com/xml/ns/public/model/scripting-3
>> <http://midpoint.evolveum.com/xml/ns/public/model/scripting-3>
>>
>> xmlns:c=http://midpoint.evolveum.com/xml/ns/public/common/common-3
>> <http://midpoint.evolveum.com/xml/ns/public/common/common-3>
>>
>> xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
>> <http://www.w3.org/2001/XMLSchema-instance>
>>
>> xmlns:xsd=http://www.w3.org/2001/XMLSchema
>> <http://www.w3.org/2001/XMLSchema>
>>
>> xmlns:q=http://prism.evolveum.com/xml/ns/public/query-3
>> <http://prism.evolveum.com/xml/ns/public/query-3>>
>>
>> <s:search>
>>
>> <s:type>c:UserType</s:type>
>>
>> <s:searchFilter>
>>
>> <q:inOid>
>>
>> <q:value>c38dc04a-e780-4475-ad51-f42dd054f622</q:value>
>>
>> <q:value>cd244459-81fe-4208-a51c-111cae039185</q:value>
>>
>> <q:value>12d665c0-7114-4b49-97ba-94c4cd154f8a</q:value>
>>
>> </q:inOid>
>>
>> </s:searchFilter>
>>
>> </s:search>
>>
>> <s:sequence>
>>
>> <s:action>
>>
>> <s:type>assign</s:type>
>>
>> <s:parameter>
>>
>> <s:name>role</s:name>
>>
>> <c:valuexsi:type="xsd:string">a6afcd50-5f33-4250-8b93-62cb72e1a39a</c:value>
>>
>> </s:parameter>
>>
>> </s:action>
>>
>> </s:sequence>
>>
>> </s:pipeline>
>>
>> But similar approaches do not seem to work for JSON. We attempted
>> the recommended method via heterogenous lists as outlined in
>> https://docs.evolveum.com/midpoint/devel/design/xml-json-yaml-vs-xnode-vs-internal-data/heterogeneous-lists/:
>>
>> {
>>
>> "@ns" :
>> http://midpoint.evolveum.com/xml/ns/public/model/scripting/extension-3,
>>
>> "pipeline": [
>>
>> {
>>
>> "@element": "search",
>>
>> "type": "c:UserType",
>>
>> "searchFilter": {
>>
>> "inOid": {
>>
>> "value": [
>>
>> "c38dc04a-e780-4475-ad51-f42dd054f622",
>>
>> "cd244459-81fe-4208-a51c-111cae039185",
>>
>> "12d665c0-7114-4b49-97ba-94c4cd154f8a"
>>
>> ]
>>
>> }
>>
>> }
>>
>> },
>>
>> {
>>
>> "@element": "sequence",
>>
>> "@value": [
>>
>> {
>>
>> "@element": "action",
>>
>> "type": "assign",
>>
>> "parameter": {
>>
>> "type": "role",
>>
>> "value": "a6afcd50-5f33-4250-8b93-62cb72e1a39a"
>>
>> }
>>
>> }
>>
>> ]
>>
>> }
>>
>> ]
>>
>> }
>>
>> But received the error message:
>>
>> <message>Wrong input value for ExecuteScriptType: RawType: (raw): XNode(list:2 elements))</message>
>>
>> <details>java.lang.IllegalArgumentException: Wrong input value for ExecuteScriptType: RawType: (raw): XNode(list:2 elements))
>>
>> It seems like Pipeline is not expecting a list of objects.
>>
>> Is there some error in our current JSON or is there a different
>> way of writing the query?
>>
>> If anyone of you has some advice regarding this, it would be
>> greatly appreciated!
>>
>> Thank you and best regards,
>>
>> Alexander Bruckner
>>
>> _______________________________________________
>> midPoint mailing list
>> midPoint at lists.evolveum.com
>> https://lists.evolveum.com/mailman/listinfo/midpoint
>>
>>
>> _______________________________________________
>> midPoint mailing list
>> midPoint at lists.evolveum.com
>> https://lists.evolveum.com/mailman/listinfo/midpoint
>
> _______________________________________________
> midPoint mailing list
> midPoint at lists.evolveum.com
> https://lists.evolveum.com/mailman/listinfo/midpoint
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.evolveum.com/pipermail/midpoint/attachments/20220621/8e6481b4/attachment-0001.htm>
More information about the midPoint
mailing list