Как получить списки динамических данных Liferay RecordId (ddlRecordId) в сценарии рабочего процесса

Я пытаюсь интегрировать списки динамических данных Liferay в рабочий процесс Kaleo (Liferay 6.1 CE GA2), но как получить ddlRecordId в рабочем процессе? Я сделал некоторую домашнюю работу, я проверил все атрибуты в serviceContext, но в атрибуте serviceContext нет «ddlRecordId», только ключ с именем «recordId», и его значение всегда равно 0. Также я могу получить некоторое значение поля в атрибутах serviceContext, такие как select и textarea. Но то, что я хочу, это поле для загрузки файла. Спасибо.

long ddlRecordId = GetterUtil.getLong(serviceContext.getAttribute("ddlRecordId"));
DDLRecord ddlRecord = DDLRecordLocalServiceUtil.getRecord(ddlRecordId);

person Gavin You    schedule 11.09.2013    source источник


Ответы (2)


В Liferay 6.1 DDLRecordId эквивалентен entryClassPK в переменных контекста рабочего процесса. Это может быть полезным документация (см. раздел о переменных контекста рабочего процесса)

Таким образом, вы можете получить поле загружаемого файла следующим образом:

import com.liferay.portlet.documentlibrary.store.DLStoreUtil;
import com.liferay.portlet.dynamicdatalists.model.DDLRecord;
import com.liferay.portlet.dynamicdatalists.service.DDLRecordLocalServiceUtil;
import com.liferay.portlet.dynamicdatamapping.storage.Field;
import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;
import com.liferay.portal.kernel.json.JSONFactoryUtil;
import com.liferay.portal.kernel.json.JSONObject;
import com.liferay.portal.kernel.util.GetterUtil;

import java.io.File;
import java.io.Serializable

DDLRecord ddlRecord = DDLRecordLocalServiceUtil.getDDLRecord(GetterUtil.getLong(entryClassPK));
// get the upload field
Field field = ddlRecord.getField("field_attachment");
if (field != null){
    DDMStructure structure = field.getDDMStructure();
    Serializable fieldValue = field.getValue();
    String value = String.valueOf(fieldValue);
    if (!value.isEmpty()){
        JSONObject fileJSONObject = JSONFactoryUtil.createJSONObject(value);
        String fileName = fileJSONObject.getString("name");
        String filePath = fileJSONObject.getString("path");
        File file = DLStoreUtil.getFile(structure.getCompanyId(), 0L, filePath);
    }
}

Я надеюсь, что это поможет не одному...

person Jean Dok    schedule 20.12.2013

У меня такая же проблема. Я уже неделю пытаюсь это решить и, наконец, получаю. Я надеюсь, что это решит вашу проблему.

Мне пришлось восстановить все DDLRecords в списке и найти тот, который использует мой рабочий процесс с атрибутом «recordSetId» по сравнению с «recordSetId» DDLRecord.

Окончательный код такой:

import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.workflow.WorkflowConstants;
import com.liferay.portal.service.ServiceContext;
import com.liferay.portlet.dynamicdatamapping.storage.Field;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.workflow.WorkflowConstants;
import com.liferay.portal.service.ServiceContext;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portlet.dynamicdatalists.model.DDLRecord;
import com.liferay.portlet.dynamicdatalists.model.impl.DDLRecordImpl;
import com.liferay.portlet.dynamicdatalists.service.*;

long companyId = GetterUtil.getLong((String) workflowContext.get(WorkflowConstants.CONTEXT_COMPANY_ID));
String uuid = (String) workflowContext.get(WorkflowConstants.CONTEXT_USER_ID);

ServiceContext serviceContext = (ServiceContext) workflowContext.get(WorkflowConstants.CONTEXT_SERVICE_CONTEXT);

long ddlRecordId = GetterUtil.getLong(serviceContext.getAttribute("recordSetId"));
List ddlRecordList = DDLRecordLocalServiceUtil.getDDLRecords(0,DDLRecordLocalServiceUtil.getDDLRecordsCount());
for(DDLRecord o : ddlRecordList){
    if(o.getRecordSetId()==ddlRecordId){
        Field field = o.getField("status");

        String status = GetterUtil.getString(field.getValue());

        if (status.contains("not")) {
        returnValue = "No"
        }
        else {
        returnValue = "Yes"
        }
    }

}
person user3116279    schedule 18.12.2013