public void populateWorkflowAndTaskPayloadData(WorkflowModel workflowModel) {
        if (StringUtils.isNotBlank(workflowModel.getExternalInputPayloadStoragePath())) {
            Map<String, Object> workflowInputParams =
                    externalPayloadStorageUtils.downloadPayload(
                            workflowModel.getExternalInputPayloadStoragePath());
            Monitors.recordExternalPayloadStorageUsage(
                    workflowModel.getWorkflowName(),
                    ExternalPayloadStorage.Operation.READ.toString(),
                    ExternalPayloadStorage.PayloadType.WORKFLOW_INPUT.toString());
            workflowModel.internalizeInput(workflowInputParams);
        }

        if (StringUtils.isNotBlank(workflowModel.getExternalOutputPayloadStoragePath())) {
            Map<String, Object> workflowOutputParams =
                    externalPayloadStorageUtils.downloadPayload(
                            workflowModel.getExternalOutputPayloadStoragePath());
            Monitors.recordExternalPayloadStorageUsage(
                    workflowModel.getWorkflowName(),
                    ExternalPayloadStorage.Operation.READ.toString(),
                    ExternalPayloadStorage.PayloadType.WORKFLOW_OUTPUT.toString());
            workflowModel.internalizeOutput(workflowOutputParams);
        }

        workflowModel.getTasks().forEach(this::populateTaskData);
    }
Populates the workflow input data and the tasks input/output data if stored in external
payload storage.

@param workflowModel the workflowModel for which the payload data needs to be populated from
    external storage (if applicable)
core/src/main/java/com/netflix/conductor/core/dal/ExecutionDAOFacade.java