2017-09-14 57 views
0

我在scala playframework项目中使用了一些复杂的模型。我必须做一些数据库请求,然后我必须将新值分配给模型。scala playframework如何将新值赋给模型

整个方法是这样的:

def getEditProcessTemplateData(processTemplateId: Int): Action[AnyContent] = Action.async { 
    //Get all steps of this process templates 
    val stepIds: Future[Seq[Int]] = processTemplateDTO.getProcessStepTemplateIds(processTemplateId) 

    val process = for { 
     allApprovedProcessTemplates <- processTemplateDTO.getApprovedProcessTemplates //Get all approved process templates 
     processTemplate <- processTemplateDTO.getProcessTemplate(processTemplateId) // Get the Process Template 
     prerequisites <- getProcessTemplateForEdit(processPrerequisitesDTO.getProcessPrerequisiteProcessTemplateIdsByProcessTemplateId(processTemplateId)) 
     postConditions <- getProcessTemplateForEdit(processPostConditionsDTO.getProcessPostConditionProcessTemplateIdsByProcessTemplateId(processTemplateId)) 
     approvedProcessTemplate <- processTemplateDTO.getProcessTemplate(processTemplate.get.approveprocess) 
     trainedProcessTemplate <- processTemplateDTO.getProcessTemplate(processTemplate.get.trainingsprocess) 
     processSteps <- processTemplateDTO.getProcessStepTemplates(processTemplateId) 
     // Step prerequisites 
     processStepsPrerequisites <- getProcessStepsPrerequisites(stepIds) 
     processStepsPrerequisiteProcessTemplate <- getProcessStepsPrerequisiteProcessTemplate(stepIds) 
     processTemplatesForStepPrerequisites <- getProcessTemplateForStepPrerequisite(stepIds) 
     // Step post conditions 
     processStepsPostConditions <- getProcessStepsPostConditions(stepIds) 
     processStepPostConditionProcessTemplate <- getProcessStepPostConditionProcessTemplate(stepIds) 
     processTemplatesForStepPostConditions <- getProcessTemplateForStepPostCondition(stepIds) 
     // Derived processes 
     derivedProcesses <- getDerivedProcesses(stepIds) 
     processTemplatesForStepDerivedProcesses <- getProcessStepsDerivedProcesses(stepIds) 
     // Process to process step 
     processStepsTemplates_ProcessTemplates <- getProcessStepsTemplates_ProcessTemplates(stepIds) 
     processTemplatesForProcessTemplatesToProcessStep <- getProcessTemplateToProcessStepId(stepIds) 
     responsible <- raciProcessTemplateDTO.getResponsibleProcessTemplates(processTemplateId) // get all responsibles for this process template 
     accountable <- raciProcessTemplateDTO.getAccountableProcessTemplates(processTemplateId) // get all accountables for this process template 
     consulted <- raciProcessTemplateDTO.getConsultedProcessTemplates(processTemplateId) // get all consulted for this process template 
     informed <- raciProcessTemplateDTO.getInformedProcessTemplates(processTemplateId) // get all consulted for this process template 
    } yield (allApprovedProcessTemplates, processTemplate, prerequisites, postConditions, processSteps, processStepsPrerequisites, 
     processStepsPrerequisiteProcessTemplate, processTemplatesForStepPrerequisites, processStepsPostConditions, processStepPostConditionProcessTemplate, processTemplatesForStepPostConditions, derivedProcesses, 
     processTemplatesForStepDerivedProcesses, processStepsTemplates_ProcessTemplates, processTemplatesForProcessTemplatesToProcessStep, approvedProcessTemplate, trainedProcessTemplate, responsible, accountable, consulted, informed) 

    process.map({ case (allApprovedProcessTemplates, processTemplate, prerequisites, postConditions, processSteps, processStepsPrerequisites, 
    processStepsPrerequisiteProcessTemplate, processTemplatesForStepPrerequisites, processStepsPostConditions, processStepPostConditionProcessTemplate, processTemplatesForStepPostConditions, derivedProcesses, 
    processTemplatesForStepDerivedProcesses, processStepsTemplates_ProcessTemplates, processTemplatesForProcessTemplatesToProcessStep, approvedProcessTemplate, trainedProcessTemplate, responsible, accountable, consulted, informed) => 

     processSteps.map{ psteps: Seq[ProcessStepTemplatesModel] => 
     Future.sequence(psteps.map { 
      step => { 
      val prerequisiteFuture = processStepPrerequisitesDTO.getProcessStepPrerequisiteIdsByProcessTemplateIdSeq(step.id.get) 
      prerequisiteFuture.map(prereqs => step.copy(prerequisites = Some(prereqs))) 
      } 
     }) 
     } 

     Ok(Json.obj(
     "allApprovedProcessTemplates" -> allApprovedProcessTemplates, 
     "processTemplate" -> processTemplate, 
     "prerequisites" -> prerequisites, 
     "postConditions" -> postConditions, 
     "approvedProcessTemplate" -> approvedProcessTemplate, 
     "trainedProcessTemplate" -> trainedProcessTemplate, 
     //  Step prerequisites 
     "processStepsPrerequisites" -> processStepsPrerequisites, 
     "processStepsPrerequisiteProcessTemplate" -> processStepsPrerequisiteProcessTemplate, 
     "processTemplatesForStepPrerequisites" -> processTemplatesForStepPrerequisites, 
     // Step post conditions 
     "processStepsPostConditions" -> processStepsPostConditions, 
     "processStepPostConditionProcessTemplate" -> processStepPostConditionProcessTemplate, 
     "processTemplatesForStepPostConditions" -> processTemplatesForStepPostConditions, 
     // Derived processes 
     "derivedProcesses" -> derivedProcesses, 
     "processTemplatesForStepDerivedProcesses" -> processTemplatesForStepDerivedProcesses, 
     // Process to process step 
     "processStepsTemplates_ProcessTemplates" -> processStepsTemplates_ProcessTemplates, 
     "processTemplatesForProcessTemplatesToProcessStep" -> processTemplatesForProcessTemplatesToProcessStep, 
     "steps" -> processSteps, 
     "responsible" -> responsible, 
     "accountable" -> accountable, 
     "consulted" -> consulted, 
     "informed" -> informed 
    )) 
    }) 
    } 

在那里我有问题的代码的部分是这样的:

processSteps.map{ psteps: Seq[ProcessStepTemplatesModel] => 
    Future.sequence(psteps.map { 
     step => { 
     val prerequisiteFuture = processStepPrerequisitesDTO.getProcessStepPrerequisiteIdsByProcessTemplateIdSeq(step.id.get) 
     prerequisiteFuture.map(prereqs => step.copy(prerequisites = Some(prereqs))) 
     } 
    }) 
    } 

我得到这个错误:

found : Seq[models.ProcessStepTemplatesModel] => scala.concurrent.Future[Seq[models.ProcessStepTemplatesModel]] 

required: models.ProcessStepTemplatesModel => ? 
[error]  processSteps.map{ psteps: Seq[ProcessStepTemplatesModel] => 

如何我可以解决这个问题吗?

谢谢!

+0

你是说'processSteps'是'未来[序列[ProcessStepTemplatesModel]'?它似乎只是一个'Seq [ProcessStepTemplatesModel]'或'Future [ProcessStepTemplatesModel]'。 – michaJlS

+0

你是指我的评论?这可能是错的,你是对的。 – Felix

+1

这基本上是错误消息说的;) – michaJlS

回答

1

我想你已经到位的代码,你需要,你只需要一个小的修改:

Future.sequence { 
    processSteps.map { step => 
     val prerequisiteFuture = processStepPrerequisitesDTO.getProcessStepPrerequisiteIdsByProcessTemplateIdSeq(step.id.get) 
     prerequisiteFuture.map(prereqs => step.copy(prerequisites = Some(prereqs))) 
    } 
} 
+0

看起来不错,但并不真的工作......我把所有的东西都返回到前端。但是当我尝试添加这样后立即打印它们中的步骤的先决条件是空 – Felix

+0

: 'processSteps.map {步骤=> {的println(“ßßßßßßß”,step.prerequisites)}}' 其空 – Felix

+1

@Felix只有在'prerequisiteFuture'完成时才会填充'step.prerequisites'?你应该在step.copy(prerequisites = Some(prereqs))''后面打印'step'。 –