Uderc programming article aggregator sites

Creation of a Request in OIM 11G using API's

Tags:
Answers: Have 15 answers
Advertisement
Hi Friends,
I am trying to create a request using OIM 11g API's.
I am trying to do this for EBS Responsibility resource and this resource has a request dataset has EBS-IT-Resource-Instance, application name, responsibility name, start date and security group. Please note application name, responsibility name, start date and security group are in child form.
I am trying to populate the request dataset using the below code.
List<RequestBeneficiaryEntityAttribute> entityAttrList;
RequestBeneficiaryEntity entity = null;
entityAttrList = new ArrayList<RequestBeneficiaryEntityAttribute>();
entity = new RequestBeneficiaryEntity();
tcITResourceInstanceOperationsIntf tcITResourceIntf = Platform.getService(tcITResourceInstanceOperationsIntf.class);
HashMap searchcriteria = new HashMap<String, String>();
searchcriteria.put("IT Resources.Name", "EBSHF-APPS12");
tcResultSet resultSet = tcITResourceIntf.findITResourceInstances(searchcriteria);
long itResourceKey=resultSet.getLongValue("IT Resources.Key");
entityAttrList.add(this.getAttrLong("eBusiness Suite Instance Name",itResourceKey));
entityAttrList.add(this.getAttr("Application Name","3~300"));
entityAttrList.add(this.getAttr("Responsibility Name", "3~300~52281"));
entityAttrList.add(this.getAttr("Security Group", "3~0"));
entity.setEntityKey(getResourceKey("Oracle eBusiness Responsibility"));
entity.setEntityType(RequestConstants.RESOURCE);
entity.setEntitySubType("Oracle eBusiness Responsibility");
entity.setEntityData(entityAttrList);
private RequestBeneficiaryEntityAttribute getAttr(String name, String value)
RequestBeneficiaryEntityAttribute attr = null;
attr = new RequestBeneficiaryEntityAttribute(name, value, RequestBeneficiaryEntityAttribute.TYPE.String);
return attr;
private RequestBeneficiaryEntityAttribute getAttrLong(String name, long value)
RequestBeneficiaryEntityAttribute attr = null;
attr = new RequestBeneficiaryEntityAttribute(name, value, RequestBeneficiaryEntityAttribute.TYPE.Long);
return attr;
My code is working fine and a request is getting created. But when I try to open the request dataset(object form) for the newly created request, I am getting null exceptions.
If I did not populate the fields that are in the child form application name, responsibility name and security group which are highlighted above, then I am able to view the form with the correct IT-Resource-Instance name after request creation.
So, I am thinking I am doing something wrong while populating child form data in the request dataset.
Can you please provide me some code snippet to populate the child using 11G API'S?
Advertisement
The best answer: Hi Bikash,
After referring your code, i made changes in mine. Here is my updated code.
RequestBeneficiaryEntityAttribute parantAttr=null;
List<RequestBeneficiaryEntityAttribute> entityAttrList;
RequestBeneficiaryEntity entity = null;
entity = new RequestBeneficiaryEntity();
parantAttr=this.getAttrLong("eBusiness Suite Instance Name", itResourceKey);
RequestBeneficiaryEntityAttribute mid1 = new RequestBeneficiaryEntityAttribute();
List <RequestBeneficiaryEntityAttribute> childAttributesList = new ArrayList<RequestBeneficiaryEntityAttribute>();
childAttributesList.add(this.getAttr("Application Name", "3~555"));
childAttributesList.add(this.getAttr("Responsibility Name", "3~555~22862"));
childAttributesList.add(this.getAttr("Security Group", "3~0"));
mid1.setChildAttributes(childAttributesList);
mid1.setAction(RequestBeneficiaryEntityAttribute.ACTION.Add);
entityAttrList = new ArrayList<RequestBeneficiaryEntityAttribute>();
entityAttrList.add(parantAttr);
entityAttrList.add(mid1);
But when I try to run this, it is getting failed saying "RequestServiceException: IAM-2050033:Invalid attribute name null. No corresponding reference was found in the data set ProvisionResourceOracle eBusiness Responsibility".
Here is my request data set for your reference.
<AttributeReference name="eBusiness Suite Instance Name" attr-ref="eBusiness Suite Instance Name" type="Long" length="50" widget="itresource-lookup" required="true" available-in-bulk="true" itresource-type="eBusiness Suite UM"/>
<AttributeReference available-in-bulk="true" length="10" widget="text" type="String" attr-ref="UD_EBH_RSCP" name="EBS HR Foundation User Responsibilities">
<AttributeReference name="Application Name" attr-ref="Application Name" type="String" length="256" widget="lookup-query" available-in-bulk="true" required="true">
<lookupQuery lookup-query="select lkv_encoded as Value,lkv_decoded as Description from lkv lkv, lku lku where lkv.lku_key=lku.lku_key and lku_type_string_key='Lookup.EBS.Application' and lkv_encoded like concat('$Form data.eBusiness Suite Instance Name', '~%')" display-field="Description" save-field="Value"/>
</AttributeReference>
<AttributeReference name="Responsibility Name" attr-ref="Responsibility Name" type="String" length="256" widget="lookup-query" available-in-bulk="true" required="true" primary="true">
<lookupQuery lookup-query="select lkv_encoded as Value,lkv_decoded as Description from lkv lkv,lku lku where lkv.lku_key=lku.lku_key and lku_type_string_key='Lookup.EBS.Responsibility' and lkv_encoded like concat('$Form data.Application Name','~%')" display-field="Description" save-field="Value"/>
</AttributeReference>
<AttributeReference name="Security Group" attr-ref="Security Group" type="String" length="256" widget="lookup-query" available-in-bulk="true" required="true">
<lookupQuery lookup-query="select lkv_encoded as Value,lkv_decoded as Description from lkv lkv, lku lku where lkv.lku_key=lku.lku_key and lku_type_string_key='Lookup.EBS.SecurityGroup' and lkv_encoded like concat('$Form data.eBusiness Suite Instance Name', '~%')" display-field="Description" save-field="Value"/>
</AttributeReference>
I am not sure why it is not referencing to the attribute. In your blog, it is saying your code is to set process form. But i am trying to create a request using API's. so, I need some code snippet to populate request dataset. Do you think, this will serve both?
Thanks for your help.