2017-09-14 9 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

はうまく見えますが、実際にはうまくいきません。私は 'Ok(..)'ですべてのものをフロントエンドに戻します。私は右のように追加した後にそれらを印刷しようとするが、ステップでの前提条件は – Felix

+0

空です: 'processSteps.map {ステップ=> {printlnを(「ßßßßßßß」、step.prerequisites)}}' その空 – Felix

+1

@Felix 'prerequisiteFuture'が終了したときにのみ、' step.prerequisites'は入力されませんか? 'step.copy(prerequisites = Some(prereqs))'の後ろに 'step'を表示してください。 –

関連する問題