in birt/src/main/java/org/apache/ofbiz/birt/flexible/BirtServices.java [219:303]
public static Map<String, Object> createFlexibleReportFromMaster(DispatchContext dctx, Map<String, Object> context) {
Delegator delegator = dctx.getDelegator();
LocalDispatcher dispatcher = dctx.getDispatcher();
Locale locale = (Locale) context.get("locale");
String reportName = (String) context.get("reportName");
String masterContentId = (String) context.get("contentId");
String description = (String) context.get("description");
String writeFilters = (String) context.get("writeFilters");
GenericValue userLogin = (GenericValue) context.get("userLogin");
GenericValue masterContentAttribute = null;
try {
EntityCondition entityCondition = EntityCondition.makeCondition("contentId", masterContentId);
masterContentAttribute = EntityQuery.use(delegator).from("ContentAttribute").where(entityCondition).queryFirst();
} catch (GenericEntityException e) {
Debug.logError(e, MODULE);
return ServiceUtil.returnError(UtilProperties.getMessage(RES_ERROR, "BirtErrorNoAttributeFound", locale));
}
if (masterContentAttribute == null) {
return ServiceUtil.returnError(UtilProperties.getMessage(RES_ERROR, "BirtErrorNoAttributeFound", locale));
}
String attrName = masterContentAttribute.getString("attrName");
String reportContentId;
if ("Entity".equalsIgnoreCase(attrName)) {
String entityViewName = masterContentAttribute.getString("attrValue");
ModelEntity modelEntity = delegator.getModelEntity(entityViewName);
if (modelEntity == null) {
return ServiceUtil.returnError(UtilProperties.getMessage(RES_ERROR, "BirtErrorEntityViewNotExist", locale) + " " + entityViewName);
}
try {
Map<String, Object> resultContent = dispatcher.runSync("createFlexibleReportFromMasterEntityWorkflow", UtilMisc.toMap(
"entityViewName", entityViewName,
"reportName", reportName, "description", description, "writeFilters", writeFilters, "masterContentId", masterContentId,
"userLogin", userLogin, "locale", locale));
if (ServiceUtil.isError(resultContent)) {
return ServiceUtil.returnError(ServiceUtil.getErrorMessage(resultContent));
}
reportContentId = (String) resultContent.get("contentId");
} catch (GenericServiceException e) {
Debug.logError(e, MODULE);
return ServiceUtil.returnError(UtilProperties.getMessage(RES_ERROR, "BirtErrorCannotDetermineDataSource", locale));
}
} else if ("Service".equalsIgnoreCase(attrName)) {
String serviceName = masterContentAttribute.getString("attrValue");
try {
Map<String, Object> resultContent = dispatcher.runSync("createFlexibleReportFromMasterServiceWorkflow", UtilMisc.toMap(
"serviceName", serviceName, "reportName", reportName, "description", description, "writeFilters", writeFilters,
"masterContentId", masterContentId, "userLogin", userLogin, "locale", locale));
if (ServiceUtil.isError(resultContent)) {
return ServiceUtil.returnError(ServiceUtil.getErrorMessage(resultContent));
}
reportContentId = (String) resultContent.get("contentId");
} catch (GenericServiceException e) {
Debug.logError(e, MODULE);
return ServiceUtil.returnError(UtilProperties.getMessage(RES_ERROR, "BirtErrorCannotDetermineDataSource", locale));
}
} else {
// TODO check: could create other workflows. WebService? Does it need to be independent from Service workflow?
return ServiceUtil.returnError(UtilProperties.getMessage(RES_ERROR, "BirtErrorCannotDetermineDataSource", locale));
}
// prepare report form to display to allow override
String textForm;
Map<String, Object> resultFormDisplay;
try {
resultFormDisplay = dispatcher.runSync("prepareFlexibleReportSearchFormToEdit", UtilMisc.toMap("reportContentId", reportContentId,
"userLogin", userLogin, "locale", locale));
if (ServiceUtil.isError(resultFormDisplay)) {
return ServiceUtil.returnError(ServiceUtil.getErrorMessage(resultFormDisplay));
}
textForm = (String) resultFormDisplay.get("textForm");
} catch (GenericServiceException e) {
Debug.logError(e, MODULE);
return ServiceUtil.returnError(UtilProperties.getMessage(RES_ERROR,
"BirtErrorCreatingDefaultSearchForm", locale).concat(": ").concat(e.getMessage()));
}
Map<String, Object> result = ServiceUtil.returnSuccess(UtilProperties.getMessage(RESOURCE, "BirtFlexibleReportSuccessfullyGenerated",
locale).concat(" ").concat(reportName));
result.put("textForm", textForm);
result.put("reportContentId", reportContentId);
return result;
}