SYMPTOM:
The following exception is thrown by the system when attempting to save an object whose ACL definition has been modified.
(System Error 0x80070057 (2147942487): --- The parameter is incorrect.) (com.Strategy.webapi.MSTRWebAPIException) 0x80070057:
Exception in thread "main" com.Strategy.webapi.MSTRWebAPIException: (System Error 0x80070057 (2147942487): --- The parameter is incorrect.)
at com.Strategy.webapi.CDSSXMLObjectServer.SaveObject(Unknown Source)
at com.Strategy.web.objects.WebObjectSourceImpl.saveObject(Unknown Source)
at com.Strategy.web.objects.WebObjectSourceImpl.saveOrMoveObject(Unknown Source)
at com.Strategy.web.objects.WebObjectSourceImpl.save(Unknown Source)
at com.Strategy.web.objects.WebObjectSourceImpl.save(Unknown Source)
at com.Strategy.sdk.memo.ModifyACL.main(ModifyACL.java:49)
The following code will reproduce the issue:
Java
package com.Strategy.sdk;
import com.Strategy.web.objects.WebAccessControlEntry;
import com.Strategy.web.objects.WebAccessControlList;
import com.Strategy.web.objects.WebIServerSession;
import com.Strategy.web.objects.WebObjectInfo;
import com.Strategy.web.objects.WebObjectSecurity;
import com.Strategy.web.objects.WebObjectSource;
import com.Strategy.web.objects.WebObjectsFactory;
import com.Strategy.web.objects.admin.users.WebUserEntity;
import com.Strategy.webapi.EnumDSSXMLAccessEntryType;
import com.Strategy.webapi.EnumDSSXMLAccessRightFlags;
import com.Strategy.webapi.EnumDSSXMLApplicationType;
import com.Strategy.webapi.EnumDSSXMLObjectFlags;
import com.Strategy.webapi.EnumDSSXMLObjectTypes;
public class ModifyACL{
public static WebIServerSession session;
public static void main(String[] args) throws Exception{
WebObjectsFactory webObjects = WebObjectsFactory.getInstance();
session = webObjects.getIServerSession();
session.setServerName("intelligence server");
session.setServerPort(0);
session.setProjectName("Project");
session.setLogin("User");
session.setPassword("Password");
session.setApplicationType(EnumDSSXMLApplicationType.DssXmlApplicationCustomApp);
WebObjectSource objectSource = webObjects.getObjectSource();
objectSource.setFlags(EnumDSSXMLObjectFlags.DssXmlObjectTotalObject);
WebObjectInfo obj = objectSource.getObject("CE5FA2814D948D234EF3C496A1384E6B", EnumDSSXMLObjectTypes.DssXmlTypeReportDefinition);
obj.populate();
WebObjectSecurity objSec = obj.getSecurity();
WebAccessControlList acl = objSec.getACL();
acl.clear();
// Uncomment this line to avoid the error message
//objectSource.setFlags(obj.getFlags() & ~EnumDSSXMLObjectFlags.DssXmlObjectDefn);
objectSource.save(obj);
session.closeSession();
}
}
objectSource.setFlags(obj.getFlags() & ~EnumDSSXMLObjectFlags.DssXmlObjectDefn);