Skip to Content

Archived discussions are read-only. Learn more about SAP Q&A

Unlock Gp Action Step

In the following code I Get a GP Process and complete the action .

This works

	public String endGP(String processID, String recordID, String matNum) {
		Collator collator = Collator.getInstance();
		String retorno = "";
		int index = 0 ;
		try {

			IGPRuntimeManager rtm = GPProcessFactory.getRuntimeManager();
			IGPDesigntimeManager dtm = GPProcessFactory.getDesigntimeManager();
			IGPUserContext userContext = getUserContext();
			IGPProcessInstance process =
				GPProcessFactory.getRuntimeManager().getProcessInstance(
					processID,
					userContext);
			retorno = "no id " + process.getID();
			IGPActivityInstance inst[] = process.getChildrenInformation();
			boolean contabil = false;
			for (int i = 0; i < inst.length; i++) {
						
				IGPBlockInstance block =
					GPProcessFactory.getRuntimeManager().getBlockInstance(
						processID,
						inst<i>.getID(),
						userContext);
				IGPActivityInstance instBlock[] =
					block.getChildrenInformation();
				
				IGPActivityInstance actInst = null;
				IGPActivityInstance activityToUpDate = null;
				boolean readyToComplete = false;
				for (int j = 0; j < instBlock.length; j++) {
					//		   
	actInst = instBlock[j];
					if (actInst.isBlock()) {
						IGPBlockInstance blockInstance =
							(IGPBlockInstance) actInst;
						IGPActivityInstance instParalelo[] =
							blockInstance.getChildrenInformation();
					}
					if (actInst.isAction()) {
												IGPActionInstance action = (IGPActionInstance) actInst;
						
						IGPActivity activity = action.getTemplate();
						if (collator
							.compare(
								activity.getTitle(),
								"FIRSTSTEP")
							== 0 & action.getStatus().getCode() <= 5) {
									   
							activityToUpDate = actInst;
							readyToComplete = true;
							contabil = true;
						} else {
							if (collator
								.compare(
									activity.getTitle(),
									"SECONDSTEP")
								== 0 & action.getStatus().getCode()
			<= 5 & !readyToComplete) {
										activityToUpDate = actInst;
								readyToComplete = true;
							}
						}
					}

				}
				if (readyToComplete) {
					//		   messageMgr.reportSuccess("ready to complete");
					IGPActionCompletionData completionData =
						GPProcessFactory
							.getRuntimeManager()
							.createActionCompletionData(
							processID,
							activityToUpDate.getID(),
							userContext);
					IGPStructure out = completionData.getOutputStructure();
					//									   addStructure("centralFiscal_output");
					out.addStructure("centralFiscal_output");
					IGPStructure cfo = out.getStructure("centralFiscal_output");
					if (contabil) {
						cfo.setAttributeValue(
							"step",
							"FISCAL@@" + recordID + "@@" + matNum);
					} else {
						cfo.setAttributeValue(
							"step",
							"CENTRAL@@" + recordID + "@@" + matNum);
					}
					completionData.setState(IGPActionCompletionData.RESULT_STATE_COMPLETED_DONE_ONLY);
					completionData.setType(IGPActionCompletionData.ACTIVITY_TYPE_BACKGROUND);
									GPProcessFactory.getRuntimeManager().completeAction(completionData);
	retorno ="action : "+ activityToUpDate.getTemplate().getTitle()+ " is completed. ";
		
}catch (Exception e) {
			retorno ="Exception Finalize. "+ e.getLocalizedMessage()+ " : "+ e.getCause()+ " : "+ e.fillInStackTrace()+" : index : "+ index;
		}
		
		return retorno;
		//@@end
	}

the first time this code runs it ends the u201CFIRSTSTEPu201D .

this works perfect.

The problem is when we call this a second time to the end the u201CSECONDSTEPu201D.

When we do this we get the following :

"Exception Finalize. Object is locked : com.sap.caf.eu.gp.model.fnd.lock.AlreadyLockedException: Object is locked : com.sap.caf.eu.gp.exception.api.GPEngineException: Object is locked"

My question to you ubergeeks: is there a way I can release this lock in orther to finish the u201CSECONDSTEPu201D . or am I mucking up something somewhere?

Thank you in advance ,

Guy

Former Member
Not what you were looking for? View more on this topic or Ask a question