ãµãŒãã¹ã¯ãæéã®çµéãšãšãã«åæ£ãããããã»ã¹ãšèŠãªãããšãã§ããŸãããã®ããã»ã¹ã«ã¯ãçµæã«åœ±é¿ãäžããããšãã§ããããã€ãã®ãã€ã³ãããããŸãïŒããŒã¿ã«ãä»ããŠãã£ã³ã»ã«ãã代çåºãæåŠãããµãŒãã¹ã®ã¹ããŒã¿ã¹ã®å€æŽã«é¢ããæ å ±ãããŒã¿ã«ã«éä¿¡ãããµãŒãã¹ã®æäŸã®çµæãéä¿¡ããŸãïŒããã®ç¹ã§ãåãµãŒãã¹ã¯ãã®ããã»ã¹ãéããŠç¬èªã®ã©ã€ããµã€ã¯ã«ãçµãŠããŠãŒã¶ãŒã®èŠæ±ãåä¿¡ãããšã©ãŒããµãŒãã¹ã®çµæãªã©ã«é¢ããããŒã¿ãèç©ããŸããããã«ããããã€ã§ããµãŒãã¹ãåŠçããããã®ãããªãã¢ã¯ã·ã§ã³ãå¶åŸ¡ããã³æ±ºå®ã§ããããã«ãªããŸãã
ãã®ãããªåŠçãã©ã®ããã«ãã©ã®ããã«æŽçã§ãããã«ã€ããŠãããã«è©³ãã説æããŸãã
ããžãã¹ããã»ã¹èªååãšã³ãžã³ã®éžæ
ããŒã¿åŠçãæŽçããããã«ãããžãã¹ããã»ã¹ãèªååããããã®ã©ã€ãã©ãªãšã·ã¹ãã ãåºããããŸãåžå Žã§ïŒçµã¿èŸŒã¿ãœãªã¥ãŒã·ã§ã³ããããã»ã¹å¶åŸ¡ã®ãã¬ãŒã ã¯ãŒã¯ãæäŸãããã«æ©èœã®ã·ã¹ãã ãŸã§ãããžãã¹ããã»ã¹ãèªååããããã®ããŒã«ãšããŠWorkflowCoreãéžæããŸããããã®éžæã¯ããã€ãã®çç±ã§è¡ãããŸããããŸãããšã³ãžã³ã¯.NET Coreãã©ãããã©ãŒã ïŒãããã¡ã€ã³ã®éçºãã©ãããã©ãŒã ã§ãïŒçšã«CïŒã§èšè¿°ãããŠãããããããšãã°Camunda BPMãšã¯ç°ãªãã補åã®æŠèŠå šäœã«å«ããæ¹ãç°¡åã§ããããã«ãããã¯çµã¿èŸŒã¿ãšã³ãžã³ã§ãããããžãã¹ããã»ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã管çããããã®ååãªæ©äŒãæäŸããŸãã次ã«ããµããŒããããŠããå€ãã®ã¹ãã¬ãŒãžãªãã·ã§ã³ã®äžã«ããœãªã¥ãŒã·ã§ã³ã§äœ¿çšãããŠããPostgreSQLããããŸãã第3ã«ããšã³ãžã³ã¯ãæµæ¢ãªAPIã®åœ¢åŒã§ããã»ã¹ãèšè¿°ããããã®åçŽãªæ§æãæäŸããŸãïŒãã ããJSONãã¡ã€ã«ã§ããã»ã¹ãèšè¿°ããããªã¢ã³ãããããŸããå®éã®å®è¡ã®ç¬éãŸã§ããã»ã¹ã®èšè¿°ã®ãšã©ãŒãæ€åºããããšãå°é£ã«ãªããšããäºå®ã®ããã«ã䜿çšããã®ã¯äžäŸ¿ã§ããããã«æãããŸããïŒã
ããžãã¹ããã»ã¹
ããžãã¹ããã»ã¹ã説æããããã«äžè¬çã«åãå ¥ããããŠããããŒã«ã®äžã§ãBPMNè¡šèšã«æ³šæããå¿ èŠããããŸããããšãã°ãBPMNè¡šèšã®FizzBuââzzåé¡ã®è§£æ±ºçã¯æ¬¡ã®ããã«ãªããŸãã
ã¯ãŒã¯ãããŒã³ã¢ãšã³ãžã³ã«ã¯ãè¡šèšã§ç€ºãããã»ãšãã©ã®ãã«ãã£ã³ã°ãããã¯ãšã¹ããŒãã¡ã³ããå«ãŸããŠãããåè¿°ã®ããã«ãæµæ¢ãªAPIãŸãã¯JSONããŒã¿ã䜿çšããŠç¹å®ã®ããã»ã¹ãèšè¿°ããããšãã§ããŸããã¯ãŒã¯ãããŒã³ã¢ãšã³ãžã³ã«ãããã®ããã»ã¹ã®å®è£ ã¯ã次ã®åœ¢åŒããšãããšãã§ããŸãã
// .
public class FizzBuzzWfData
{
public int Counter { get; set; } = 1;
public StringBuilder Output { get; set; } = new StringBuilder();
}
// .
public class FizzBuzzWorkflow : IWorkflow<FizzBuzzWfData>
{
public string Id => "FizzBuzz";
public int Version => 1;
public void Build(IWorkflowBuilder<FizzBuzzWfData> builder)
{
builder
.StartWith(context => ExecutionResult.Next())
.While(data => data.Counter <= 100)
.Do(a => a
.StartWith(context => ExecutionResult.Next())
.Output((step, data) => data.Output.Append(data.Counter))
.If(data => data.Counter % 3 == 0 || data.Counter % 5 == 0)
.Do(b => b
.StartWith(context => ExecutionResult.Next())
.Output((step, data) => data.Output.Clear())
.If(data => data.Counter % 3 == 0)
.Do(c => c
.StartWith(context => ExecutionResult.Next())
.Output((step, data) =>
data.Output.Append("Fizz")))
.If(data => data.Counter % 5 == 0)
.Do(c => c
.StartWith(context => ExecutionResult.Next())
.Output((step, data) =>
data.Output.Append("Buzz"))))
.Then(context => ExecutionResult.Next())
.Output((step, data) =>
{
Console.WriteLine(data.Output.ToString());
data.Output.Clear();
data.Counter++;
}));
}
}
}
ãã¡ãããã«ãŒãã£ããªãã£ãã§ãã¯ã«ç¶ãã¹ãããã§ç®çã®å€ã®åºåãè¿œå ããããšã§ãããã»ã¹ãããç°¡åã«èª¬æã§ããŸãããã ããçŸåšã®å®è£ ã§ã¯ãåã¹ãããã§ããã»ã¹ããŒã¿ã®äžè¬çãªããã®ãŒãã³ã¯ãã«ããã€ãã®å€æŽãå ããããšãã§ããåã®ã¹ãããã®çµæãå©çšããããšãã§ããŸãããã®å Žåãããã»ã¹ããŒã¿ã¯ã€ã³ã¹ã¿ã³ã¹
FizzBuzzWfData
ã«æ ŒçŽããããã®å®è¡æã«åã¹ããããžã®ã¢ã¯ã»ã¹ãæäŸãããŸãã
æ¹æ³
Build
ããã»ã¹ãã«ããŒãªããžã§ã¯ããåŒæ°ãšããŠåããŸããããã¯ãããžãã¹ããã»ã¹ã®ã¹ããããé çªã«èšè¿°ããäžé£ã®æ¡åŒµã¡ãœãããåŒã³åºãããã®éå§ç¹ãšããŠæ©èœããŸãã次ã«ãæ¡åŒµã¡ãœããã¯ãåŒæ°ãšããŠæž¡ãããã©ã ãåŒã®åœ¢åŒã§çŸåšã®ã³ãŒãã«çŽæ¥ã¢ã¯ã·ã§ã³ã®èª¬æãå«ããããšãã§ããŸãããŸãã¯ããã©ã¡ãŒã¿ãŒåããããšãã§ããŸãããªã¹ãã«ç€ºãããŠããæåã®ã±ãŒã¹ã§ã¯ãåçŽãªã¢ã«ãŽãªãºã ãããªãè€éãªåœä»€ã®ã»ããã«å€æãããŸãã 2çªç®ã®äŸã§ã¯ãã¹ãããã®ããžãã¯ã¯ãåããç¶æ¿ããStep
ïŒãŸãã¯AsyncStep
éåæããªã¢ã³ãã®å ŽåïŒåå¥ã®ã¯ã©ã¹ã«é ãããŠãããããè€éãªããã»ã¹ãããç°¡æœãªèª¬æã«åããããšãã§ããŸããå®éã«ã¯ã2çªç®ã®ã¢ãããŒãã®æ¹ãé©ããŠããããã§ããæåã®ã¢ãããŒãã¯ãåçŽãªäŸãŸãã¯éåžžã«åçŽãªããžãã¹ããã»ã¹ã«ã¯ååã§ãã
å®éã®ããã»ã¹èšè¿°ã¯ã©ã¹ã¯ããã©ã¡ãŒã¿ãŒåãããã€ã³ã¿ãŒãã§ãŒã¹ãå®è£ ã
IWorkflow
ãã³ã³ãã©ã¯ããå®è¡ãããšãããã»ã¹IDãšããŒãžã§ã³çªå·ãå«ãŸããŸãããã®æ
å ±ã®ãããã§ããšã³ãžã³ã¯ã¡ã¢ãªå
ã«ããã»ã¹ã€ã³ã¹ã¿ã³ã¹ãçæãããããã«ããŒã¿ãå
¥åããŠãã¹ãã¬ãŒãžå
ã®ç¶æ
ãä¿®æ£ããããšãã§ããŸããããŒãžã§ã³ç®¡çã®ãµããŒãã«ããããªããžããªå
ã®æ¢åã®ã€ã³ã¹ã¿ã³ã¹ã«åœ±é¿ãäžãããªã¹ã¯ãªãã«ãæ°ããããã»ã¹ããªãšãŒã·ã§ã³ãäœæã§ããŸããæ°ããããŒãžã§ã³ãäœæããã«ã¯ãæ¢åã®èª¬æã®ã³ããŒãäœæããããããã£ã«æ¬¡ã®çªå·ãå²ãåœãŠãVersion
å¿
èŠã«å¿ããŠãã®ããã»ã¹ã®åäœãå€æŽããã ãã§ååã§ãïŒèå¥åã¯å€æŽããªãã§ãã ããïŒã
ç§ãã¡ã®ã¿ã¹ã¯ã®ã³ã³ããã¹ãã§ã®ããžãã¹ããã»ã¹ã®äŸã¯æ¬¡ã®ãšããã§ãã
- â .
- â , , .
- â .
- â , .
äŸãããããããã«ããã¹ãŠã®ããã»ã¹ã¯æ¡ä»¶ä»ãã§ã埪ç°ãã«çŽ°åããããã®å®è¡ã«ã¯å®æçãªç¹°ãè¿ããå«ãŸãããç·åœ¢ãã¯ç¹å®ã®ã¹ããŒãã¡ã³ãã®ã³ã³ããã¹ãã§å®è¡ãããŸãããããã»ã¹å ã®äžéšã®åŸªç°æ§é ã®ååšãæé€ãããã®ã§ã¯ãããŸããã
çä¿¡èŠæ±ãã¥ãŒãããŒãªã³ã°ããããã«ãœãªã¥ãŒã·ã§ã³ã§æ©èœããŠããããã»ã¹ã®1ã€ã®äŸãèããŠã¿ãŸãããã
public class LoadRequestWf : IWorkflow<LoadRequestWfData>
{
public const string DefinitionId = "LoadRequest";
public string Id => DefinitionId;
public int Version => 1;
public void Build(IWorkflowBuilder<LoadRequestWfData> builder)
{
builder
.StartWith(then => ExecutionResult.Next())
.While(d => !d.Quit)
.Do(x => x
.StartWith<LoadRequestStep>() // *
.Output(d => d.LoadRequest_Output, s => s.Output)
.If(d => d.LoadRequest_Output.Exception != null)
.Do(then => then
.StartWith(ctx => ExecutionResult.Next()) // *
.Output((s, d) => d.Quit = true))
.If(d => d.LoadRequest_Output.Exception == null
&& d.LoadRequest_Output.Result.SmevReqType
== ReqType.Unknown)
.Do(then => then
.StartWith<LogInfoAboutFaultResponseStep>() // *
.Input((s, d) =>
{ s.Input = d.LoadRequest_Output?.Result?.Fault; })
.Output((s, d) => d.Quit = false))
.If(d => d.LoadRequest_Output.Exception == null
&& d.LoadRequest_Output.Result.SmevReqType
== ReqType.DataRequest)
.Do(then => then
.StartWith<StartWorkflowStep>() // *
.Input(s => s.Input, d => BuildEpguNewApplicationWfData(d))
.Output((s, d) => d.Quit = false))
.If(d => d.LoadRequest_Output.Exception == null
&& d.LoadRequest_Output.Result.SmevReqType == ReqType.Empty)
.Do(then => then
.StartWith(ctx => ExecutionResult.Next()) // *
.Output((s, d) => d.Quit = true))
.If(d => d.LoadRequest_Output.Exception == null
&& d.LoadRequest_Output.Result.SmevReqType
== ReqType.CancellationRequest)
.Do(then => then
.StartWith<StartWorkflowStep>() // *
.Input(s => s.Input, d => BuildCancelRequestWfData(d))
.Output((s, d) => d.Quit = false)));
}
}
*ã§ããŒã¯ãããè¡ã§ã¯ããã©ã¡ãŒã¿ãŒåãããæ¡åŒµã¡ãœããã®äœ¿çšã確èªã§ããŸããããã¯ãã¿ã€ããã©ã¡ãŒã¿ãŒã«å¯Ÿå¿ããã¹ãããã¯ã©ã¹ïŒè©³çŽ°ã¯åŸã§èª¬æããŸãïŒã䜿çšããããã«ãšã³ãžã³ã«æ瀺ããŸããæ¡åŒµã¡ãœããã®å©ããåããŠ
Input
ãšOutput
ãç§ãã¡ã¯ïŒãšåœŒãã¯ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã§è¡šãããå®è¡ãéå§ããå段éã«æž¡ãããåæããŒã¿ãèšå®ãããããŠãããã«å¿ããŠãããã»ã¹ããŒã¿ãå€æŽããæ©äŒãæã£ãŠããLoadRequestWfData
ã¢ã¯ã·ã§ã³ãã¹ãããã«ãã£ãŠå®è¡ã«é¢é£ããŠïŒããããŠãããã¯ããã»ã¹ãBPMNå³ã§ã©ã®ããã«èŠãããã§ãïŒ
æé
äžèšã®ããã«ãã¹ãããã®ããžãã¯ãå¥ã ã®ã¯ã©ã¹ã«é 眮ããããšã¯åççã§ããããã»ã¹ãããç°¡æœã«ããããšã«å ããŠãäžè¬çãªæäœã®ããã®åå©çšå¯èœãªã¹ããããäœæããããšãã§ããŸãã
ãœãªã¥ãŒã·ã§ã³ã§å®è¡ãããã¢ã¯ã·ã§ã³ã®äžææ§ã®çšåºŠã«å¿ããŠãæé ã¯äžè¬ãšç¹å®ã®2ã€ã®ã«ããŽãªã«åããããŸããåè ã¯ãä»»æã®ãããžã§ã¯ãã®ä»»æã®ã¢ãžã¥ãŒã«ã§åå©çšã§ãããããå ±æãœãªã¥ãŒã·ã§ã³ã©ã€ãã©ãªã«é 眮ãããŸããåŸè ã¯ã察å¿ããèšèšã¢ãžã¥ãŒã«ã§ã®äœçœ®ä»ããéããŠã顧客ããšã«åºæã§ããäžè¬çãªæé ã®äŸã¯æ¬¡ã®ãšãã
ã§ããå¿çã«å¯ŸããAckèŠæ±ã®éä¿¡ã
- ãã¡ã€ã«ã¹ãã¬ãŒãžãžã®ãã¡ã€ã«ã®ã¢ããããŒãã
- SMEVããã±ãŒãžãªã©ããã®ããŒã¿ã®æœåºã
ç¹å®ã®æé ïŒ
- IASã§ãªããžã§ã¯ããäœæãããªãã¬ãŒã¿ãŒããµãŒãã¹ãæäŸã§ããããã«ããŸãã
- .
- ..
ããã»ã¹ã®ã¹ãããã説æããã«ããããåã¹ãããã®è²¬ä»»ã¯éå®çã§ãããšããååãé å®ããŸãããããã«ãããé«ã¬ãã«ã®ããžãã¹ããã»ã¹ããžãã¯ã®ãã©ã°ã¡ã³ãã段éçã«é衚瀺ã«ãããããã»ã¹ã®èª¬æã§æ瀺çã«è¡šçŸããããšãå¯èœã«ãªããŸãããããšãã°ãã¢ããªã±ãŒã·ã§ã³ããŒã¿ã«ãšã©ãŒãèŠã€ãã£ãå Žåãã¢ããªã±ãŒã·ã§ã³ã®åŠçã®æåŠã«é¢ããã¡ãã»ãŒãžãSMEVã«éä¿¡ããå¿ èŠããããŸãã察å¿ããæ¡ä»¶ãããã¯ã¯ãããžãã¹ããã»ã¹ã®ã³ãŒãå ã«é 眮ãããããŸããŸãªã¯ã©ã¹ããšã©ãŒã®äºå®ãå€æããŠå¯Ÿå¿ããæé ã«å¯Ÿå¿ããŸãã
åããã»ã¹ãã©ã€ããµã€ã¯ã«ã移åãããšãã«ãšã³ãžã³ãã¹ãããã®ã€ã³ã¹ã¿ã³ã¹ã䜿çšã§ããããã«ãã¹ããããäŸåé¢ä¿ã³ã³ãããŒã«ç»é²ããå¿ èŠãããããšã«æ³šæããŠãã ããã
åã¹ãããã¯ãããã»ã¹ã®é«ã¬ãã«ã®èª¬æãå«ãã³ãŒããšãã¢ããªã±ãŒã·ã§ã³ã®åé¡ã解決ããã³ãŒãïŒãµãŒãã¹ïŒã®éã®æ¥ç¶ãªã³ã¯ã§ãã
ãµãŒãã¹
ãµãŒãã¹ã¯ã次ã®äœã¬ãã«ã®åé¡è§£æ±ºãè¡šããŸãã矩åã®éè¡ã«ãããåã¹ãããã¯ãååãšããŠã1ã€ä»¥äžã®ãµãŒãã¹ã«äŸåããŸãïŒæ³šïŒãã®ã³ã³ããã¹ãã§ã®ããµãŒãã¹ãã®æŠå¿µã¯ããã¡ã€ã³åºæã®èšèšïŒDDDïŒã®ãã¡ã€ã³ããã®ãã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã®ãµãŒãã¹ãã®é¡äŒŒã®æŠå¿µã«è¿ãã§ãïŒã
ãµãŒãã¹ã®äŸã¯æ¬¡ã®ãšããã§ãã
- SMEVå¿çãã¥ãŒããå¿çãåä¿¡ããããã®ãµãŒãã¹ã¯ã察å¿ããããŒã¿ãã±ãããSOAP圢åŒã§æºåãããããSMEVã«éä¿¡ããŠãå¿çãããã«åŠçããã®ã«é©ãã圢åŒã«å€æããŸãã
- SMEVãªããžããªãããã¡ã€ã«ãããŠã³ããŒãããããã®ãµãŒãã¹-FTPãããã³ã«ã䜿çšããŠããã¡ã€ã«ãªããžããªããããŒã¿ã«ããã¢ããªã±ãŒã·ã§ã³ã«æ·»ä»ããããã¡ã€ã«ã®èªã¿åããæäŸããŸãã
- ãµãŒãã¹ã®æäŸã®çµæãååŸããããã®ãµãŒãã¹-IASãããµãŒãã¹ã®çµæã«é¢ããããŒã¿ãèªã¿åãã察å¿ãããªããžã§ã¯ãã圢æããŸããããã«åºã¥ããŠãå¥ã®ãµãŒãã¹ãããŒã¿ã«ã«éä¿¡ããããã®SOAPèŠæ±ãäœæããŸãã
- ãµãŒãã¹ã®çµæã«é¢é£ãããã¡ã€ã«ãSMEVãã¡ã€ã«ã¹ãã¬ãŒãžã«ã¢ããããŒãããããã®ãµãŒãã¹ã
ãœãªã¥ãŒã·ã§ã³å ã®ãµãŒãã¹ã¯ãã·ã¹ãã ãããããæäŸããçžäºäœçšã«åºã¥ããŠã°ã«ãŒãã«åããããŸãã
- SMEVãµãŒãã¹ã
- IASãµãŒãã¹ã
çµ±åãœãªã¥ãŒã·ã§ã³ã®å éšã€ã³ãã©ã¹ãã©ã¯ãã£ãæäœããããã®ãµãŒãã¹ïŒããŒã¿ãã±ããã«é¢ããæ å ±ã®ãã°èšé²ãçµ±åãœãªã¥ãŒã·ã§ã³ã®ãšã³ãã£ãã£ãšIASãªããžã§ã¯ãã®ãªã³ã¯ãªã©ïŒã
ã¢ãŒããã¯ãã£ã®èŠ³ç¹ããã¯ããµãŒãã¹ã¯æäœã¬ãã«ã§ãããåé¡ã解決ããããã«ãŠãŒãã£ãªãã£ã¯ã©ã¹ã«äŸåããããšãã§ããŸãããããã£ãŠãããšãã°ããã®ãœãªã¥ãŒã·ã§ã³ã«ã¯ãããŸããŸãªããŒãžã§ã³ã®SMEVãããã³ã«ã®SOAPããŒã¿ãã±ããã®ã·ãªã¢ã«åãšéã·ãªã¢ã«åã®åé¡ã解決ããã³ãŒãå±€ããããŸããäžè¬çã«ãäžèšã®èª¬æã¯ã¯ã©ã¹å³ã«èŠçŽã§ããŸãã
ã€ã³ã¿ãŒãã§ã€ã¹
IWorkflow
ãšæœè±¡ã¯ã©ã¹ã¯ãšã³ãžã³ã«çŽæ¥é¢é£ããŠãStepBodyAsync
ãŸãïŒãã ããåæã¢ããã°StepBodyã䜿çšããããšãã§ããŸãïŒã次ã®å³ã¯ãããã«ãã£ã³ã°ãããã¯ãã®å®è£
ã瀺ããŠããŸããããã¯ãã¯ãŒã¯ãããŒããžãã¹ããã»ã¹ãšãã®äžã§äœ¿çšãããã¹ãããã®èª¬æãå«ãå
·äœçãªã¯ã©ã¹ã§ãïŒStep
ïŒãäžäœã¬ãã«ã§ã¯ããµãŒãã¹ãæ瀺ãããŸããããã¯ãæ¬è³ªçã«ããœãªã¥ãŒã·ã§ã³ã®ãã®ç¹å®ã®å®è£
ã«ãã§ã«åºæã§ãããããã»ã¹ãã¹ããããšã¯ç°ãªããå¿
é ã§ã¯ãããŸããã
ã¹ããããšåæ§ã«ããµãŒãã¹ã䜿çšããã¹ããããã³ã³ã¹ãã©ã¯ã¿ãŒãä»ããæ¿å ¥ã«ãã£ãŠå¿ èŠãªã€ã³ã¹ã¿ã³ã¹ãååŸã§ããããã«ããµãŒãã¹ãäŸåé¢ä¿ã³ã³ãããŒã«ç»é²ããå¿ èŠããããŸãã
ãœãªã¥ãŒã·ã§ã³ãžã®ãšã³ãžã³ã®åã蟌ã¿
ããŒã¿ã«ãšã®çµ±åã·ã¹ãã ã®äœæãéå§ãããæç¹ã§ããšã³ãžã³ã®ããŒãžã§ã³2.1.2ãNugetãªããžããªã§å©çšå¯èœã§ãããããã¯ã
ConfigureServices
ã¯ã©ã¹ã¡ãœããã®æšæºçãªæ¹æ³ã§äŸåé¢ä¿ã³ã³ããã«çµã¿èŸŒãŸããŠãStartup
ãŸãã
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddWorkflow(opts =>
opts.UsePostgreSQL(connectionString, false, false, schemaName));
// ...
}
ïŒãããšã³ãžã³ããµããŒããããŠããããŒã¿ã»ãŠã§ã¢ããŠã¹ã®ããããã®ããã«æ§æããããšãã§ããä»ã®äººããããã®éïŒã®MySQLãMS SQLãSQLiteã¯ãMongoDBã®ïŒã PostgreSQLã®å Žåããšã³ãžã³ã¯ã³ãŒããã¡ãŒã¹ãããªã¢ã³ãã®ãšã³ãã£ãã£ãã¬ãŒã ã¯ãŒã¯ã³ã¢ã䜿çšããŠããã»ã¹ãåŠçããŸãããããã£ãŠã空ã®ããŒã¿ããŒã¹ãããå Žåã¯ã移è¡ãé©çšããŠç®çã®ããŒãã«æ§é ãååŸããããšãã§ããŸãã移è¡ã®äœ¿çšã¯ãªãã·ã§ã³ã§ãããã¡ãœããåŒæ°ã䜿çšããŠå¶åŸ¡ã§ããŸã
UsePostgreSQL
ã2çªç®ïŒcanCreateDB
ïŒããã³3çªç®ïŒcanMigrateDB
ïŒã®ããŒã«ååŒæ°ã䜿çšãããšãããŒã¿ããŒã¹ãååšããªãå Žåã«ããŒã¿ããŒã¹ãäœæããŠç§»è¡ãé©çšã§ãããã©ããããšã³ãžã³ã«éç¥ã§ããŸãã
ãšã³ãžã³ã®æ¬¡ã®æŽæ°ã§ã¯ãããŒã¿ã¢ãã«ãå€æŽãããå¯èœæ§ããŒãã§ã¯ãªãã察å¿ãã次ã®ç§»è¡ã®äœ¿çšã«ããããã§ã«èç©ãããããŒã¿ãæå·ããå¯èœæ§ããããããä»ã®ãããžã§ã¯ãã§äœ¿çšãããŠããããŒã¿ããŒã¹ã³ã³ããŒãã³ãã®ã¡ã«ããºã ã«åºã¥ããŠããã®ãªãã·ã§ã³ãç Žæ£ããããŒã¿ããŒã¹æ§é ãç¬èªã«ç¶æããããšã«ããŸããã
ããã§ãããŒã¿ã®ä¿åãšäŸåé¢ä¿ã³ã³ãããžã®ãšã³ãžã³ã®ç»é²ã®åé¡ã解決ãããŸããã次ã«ããšã³ãžã³ã®èµ·åã«ç§»ããŸãããããã®ã¿ã¹ã¯ã®ããã«ããã¹ããããµãŒãã¹ãªãã·ã§ã³ãç»å ŽããŸããããã®ãããªãµãŒãã¹ãäœæããããã®åºæ¬ã¯ã©ã¹ã®äŸãåç §ããŠãã ããïŒãã¢ãžã¥ãŒã«æ§ãç¶æããããã«ãåºæ¬ãšãªãã³ãŒãããããã«å€æŽãããŸãããã€ãŸããçµ±åãœãªã¥ãŒã·ã§ã³ïŒãOnyxããšåŒã°ããïŒãããšã³ãžã³ã®åæåãšäžéšã®ãµãŒãã¹æé ã®å®è¡ãæäŸããå ±éã®éšåãšãç¹å®ã®å顧客ã«åºæã®éšåïŒçµ±åã¢ãžã¥ãŒã«ïŒã«åå²ããŸãã ..ã
åã¢ãžã¥ãŒã«ã«ã¯ãããã»ã¹ã®èª¬æãããžãã¹ããžãã¯ãå®è¡ããããã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãããã³éçºãããçµ±åã·ã¹ãã ãããã»ã¹ã®èª¬æãèªèããŠWorkflowCoreãšã³ãžã³ã®ã€ã³ã¹ã¿ã³ã¹ã«åçã«ããŒãã§ããããã«ããçµ±åã³ãŒããå«ãŸããŠããŸãã
ããžãã¹ããã»ã¹ã®ç»é²ãšéå§
ããžãã¹ããã»ã¹ãšãœãªã¥ãŒã·ã§ã³ã«æ¥ç¶ããããšã³ãžã³ã®æ¢è£œã®èª¬æãã§ããã®ã§ã次ã«ãã©ã®ããã»ã¹ã§åäœãããããšã³ãžã³ã«äŒããŸãã
ããã¯ãåè¿°ã®ãã¹ãããããµãŒãã¹å ã«é 眮ã§ãã次ã®ã³ãŒãã䜿çšããŠå®è¡ãããŸãïŒæ¥ç¶ãããã¢ãžã¥ãŒã«ã§ããã»ã¹ã®ç»é²ãéå§ããã³ãŒããããã«é 眮ã§ããŸãïŒã
public async Task RunWorkflowsAsync(IWorkflowHost host,
CancellationToken token)
{
host.RegisterWorkflow<LoadRequestWf, LoadRequestWfData>();
// ...
await host.StartAsync(token);
token.WaitHandle.WaitOne();
host.Stop();
}
çµè«
äžè¬çã«ãçµ±åãœãªã¥ãŒã·ã§ã³ã§WorkflowCoreã䜿çšããããã«å¿ èŠãªæé ã«ã€ããŠèª¬æããŸããããã®ãšã³ãžã³ã䜿çšãããšãæè»ã§äŸ¿å©ãªæ¹æ³ã§ããžãã¹ããã»ã¹ãèšè¿°ã§ããŸããSMEVãä»ããŠãGosuslugãããŒã¿ã«ãšã®çµ±åã¿ã¹ã¯ãåŠçããŠãããšããäºå®ã念é ã«çœ®ããŠãäºæž¬ãããããžãã¹ããã»ã¹ã¯ãããªãå€æ§ãªã¿ã¹ã¯ïŒãã¥ãŒã®ããŒãªã³ã°ããã¡ã€ã«ã®ã¢ããããŒã/ããŠã³ããŒãã亀æãããã³ã«ãžã®æºæ ã®ç¢ºèªãããŒã¿ã®åä¿¡ã®ç¢ºèªãããŸããŸãªæ®µéã§ã®ãšã©ãŒåŠçãªã©ïŒããããã£ãŠãäžèŠãããšããæããã§ãªãå®è£ ã®ç¬éãçºçããããšãæåŸ ããã®ã¯éåžžã«èªç¶ãªããšã§ããããµã€ã¯ã«ã®æ¬¡ã®æåŸã®èšäºã«å°å¿µããã®ã¯åœŒãã«ãšã£ãŠã§ãã