2017-09-13 3 views
0

私は複雑なスカラモデルを持っています。scala manipulatingモデルオブジェクトの値

私はモデルの値を変更したいと思います。

私はこの試みた:

processSteps.map{ 
    step => { 
     step.prerequisites = processStepPrerequisitesDTO.getProcessStepPrerequisiteIdsByProcessTemplateIdSeq(step.id) 
    } 
    } 

をしかし、私はこのエラーを得た:

found : scala.concurrent.Future[Seq[models.ProcessStepPrerequisitesModel]] 
required: Option[Seq[models.ProcessStepPrerequisitesModel]] 

どのように私はこのエラーを解決することができますか?

追加情報

def getProcessStepPrerequisiteIdsByProcessTemplateIdSeq(processStepTemplateId: Int): Future[Seq[ProcessStepPrerequisitesModel]] = { 
    db.run(processStepsPrerequisites.filter(p => p.processsteptemplate === processStepTemplateId).result) 
} 

更新:

も、この試みた:

processSteps.map{ 
    step => { 
     processStepPrerequisitesDTO.getProcessStepPrerequisiteIdsByProcessTemplateIdSeq(step.id.get).map(a => { 
     step.prerequisites ++ a 
     }) 
    } 
    } 

をしかし、空の配列

アップデートを返します。

私はそれがどのように見えるか

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{ 
    step => { 
     processStepPrerequisitesDTO.getProcessStepPrerequisiteIdsByProcessTemplateIdSeq(step.id.get).map(a => { 
     step.prerequisites ++ a 
     }) 
    } 
    } 

    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 
)) 
}) 
} 
+0

'processSteps'のタイプは何ですか? 'オプション[...]'?その表現はどこで使用されていますか? – pedromss

+3

実際に短いメソッド名を使用する必要があります... – pedromss

+0

processStepsは将来です[Seq [ProcesStepsModel]] – Felix

答えて

1

がstep.prerequisitesがオプションであることであるマップでこれを使用するには、[配列は[models.ProcessStepPrerequisitesModel]]、あなたはそれに未来を割り当てるしようとしている、とprocessSteps未来[ですSeq [ProcesStepsModel]]。あなたがやりたいように見えるものを

は、先物や変異を混合することは危険をはらんでいることに注目し、その先物ソート同時実行の問題の多くに思い出させるべきである

processSteps.flatMap { psteps: Seq[ProcessStepTemplatesModel] => 
    val updateFutures: Seq[Future[Unit]] = psteps.map { 
     step => { 
     val prerequisiteFuture = processStepPrerequisitesDTO.getProcessStepPrerequisiteIdsByProcessTemplateIdSeq(step.id.get) 
     prerequisiteFuture.foreach(prereqs => step.prerequisites = Some(prereqs)) 
     } 
    } 
    Future.sequence(updateFutures) 
} // Has type Future[Unit] 

のラインに沿っています硬化の私は(ProcessStepsModelはケースクラスであると仮定して)のようなもので割り当てを交換する時に深刻な表情を取る:

processSteps.map { psteps: Seq[ProcessStepsModel] => 
    Future.sequence(psteps.map { 
    step => { 
     val prerequisiteFuture = processStepPrerequisitesDTO.getProcessStepPrerequisiteIdsByProcessTemplateIdSeq(step.id) 
     prerequisiteFuture.map(prereqs => step.copy(prerequisites = Some(prereqs))) 
    } 
    }) 
} // Has type Future[Seq[models.ProcessStepPrerequisitesModel]] 

オブジェクトの創作は高価に思えるかもしれないが、彼らはおそらく、実際のように高価なことするつもりはありません防御的なAwaitsによって導入されたブロッキング(およびタイムアウトが手に入る)または突然変異が導入するheisenbugsとして。

+0

おかげ上記の完全なコードを追加して、私はこのエラーを得た: 'が見つかりました:配列[models.ProcessStepTemplatesModel] => scala.concurrent.Future [配列が[models.ProcessStepTemplatesModel]] 必要:models.ProcessStepTemplatesModel =>? – Felix

+0

ヒントはありますか? – Felix

+0

私はその目標に本当に近いと思う、それをもう一度見て分があるならそれは素晴らしいだろう。ありがとう:) – Felix

関連する問題