Search code examples
filenet-p8filenetfilenet-process-engineibm-case-manager

VWAttachment added through API is not showing in CM 5.2


I have retrieved a workitem using API and changed the attachment fields using setParameterValue , After saving the work usingstepElement.doSave(true), I can see the added attachments in the process tracker through process administration console , but my problem is it is not showing up in case navigator and in workplaceXT also it is saying "Attachment may be corrupted or deleted"

below is the code i used to create attachment

        tempAtt.setAttachmentName("check.png");
        tempAtt.setAttachmentDescription("Added by code");
        tempAtt.setType(VWAttachmentType.ATTACHMENT_TYPE_DOCUMENT);
        tempAtt.setLibraryType(VWLibraryType.LIBRARY_TYPE_CONTENT_ENGINE);
        tempAtt.setLibraryName("TOS");
        tempAtt.setId(doc.getVersionSeries().getId());
 tempAttA[0] = tempAtt;
 stepElement.setParameterValue("Zip", tempAttA, true);

I dont understand where i am wrong , please suggest.

//Filenet p8 5.2 , Content Platform Engine


Solution

  • Got the solution after banging my head for a couple of hours , posting the entire code , may be helpful for others

         //Connect to PE   
            //Query the queue with wobnum and get the workobject
                        queryIndex = "F_WobNum";
                        queryMin[0] = wob;
                        queryMax[0] = wob;
                        queryFlag = VWQueue.QUERY_MIN_VALUES_INCLUSIVE +   VWQueue.QUERY_MAX_VALUES_INCLUSIVE;
                        queryType = VWFetchType.FETCH_TYPE_WORKOBJECT;
                        queryTypeStepElement = VWFetchType.FETCH_TYPE_STEP_ELEMENT;
                        queue = session.getQueue("Queue_Name");
                        query = queue.createQuery(queryIndex, queryMin, queryMax, queryFlag, null, null, queryType);
                        System.out.println("count " + query.fetchCount());
                        workObject = (VWWorkObject) query.next();
        //get the stepelement 
                        stepElement = workObject.fetchStepElement();
                        parameters = stepElement.getParameters(VWFieldType.ALL_FIELD_TYPES, VWStepElement.FIELD_USER_AND_SYSTEM_DEFINED);
    
       //get the existing attachment value
             tempAttA= (VWAttachment[]) stepElement.getParameterValue("attachment_field_name");
    //attachment is VWAttachment array          
    attachment=tempAttA;
    //lock the item for working
                stepElement.doLock(true);
    //set the new values for the new attachment to be added          
                tempAtt=new VWAttachment();
                tempAtt.setAttachmentName("Attachment_name");
                tempAtt.setAttachmentDescription("Added by code");
                tempAtt.setType(VWAttachmentType.ATTACHMENT_TYPE_DOCUMENT);
                tempAtt.setLibraryType(VWLibraryType.LIBRARY_TYPE_CONTENT_ENGINE);
                tempAtt.setLibraryName("TOS");
    //vs id of the existing CE document , note that  adding attachment means refering a CE object , so the document u want to attach should be stored in CE before.
                tempAtt.setId(doc.getVersionSeries().getId());
                attachment=tempAttA;
    //law is a arraylist of VWAttachment type , so u dont override any existing attachments
                law.add(attachment[0]);
                law.add(tempAtt);
    //set the attchment field with new values
                stepElement.setParameterValue("attachment_name", law.toArray(), true);