2017-09-14 15 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'。 –