| Quintiq file version 2.0 | 
| #parent: #root | 
| StaticMethod CreateTransitionMessage ( | 
|   MacroPlan macroplan | 
| ) | 
| { | 
|   Description: 'Create sanity check message for transitions.' | 
|   TextBody: | 
|   [* | 
|     // Get the limit for number of sanity check messages | 
|     messagelimit := macroplan.GlobalParameters_MP().SanityCheckLimit(); | 
|      | 
|     // Get Campaign_MP that has sanity check violation(s) | 
|     invalidtransitions := selectsortedset( macroplan,  | 
|                                            SanityCheckGroup.astype( SanityCheckGroupCampaign ).InvalidTransition,  | 
|                                            invalidobject, | 
|                                            true, | 
|                                            invalidobject.SanityCheckTransitionMostSevere() ); | 
|      | 
|                                     | 
|     objcount := 0; | 
|      | 
|     // Traverse the set of Transition_MP and create sanity check message | 
|     // as long as the number of Transition_MP processed doesn't exceed the limit of number of messages | 
|     traverse( invalidtransitions, | 
|               Elements, | 
|               invalidobject, | 
|               objcount <= messagelimit ) | 
|     { | 
|       objcount := objcount + 1; | 
|      | 
|       feedbacks := construct( Strings ); | 
|       sanitycheckfeedbacks := construct( Strings ); | 
|        | 
|       // Get sanity check violation messages and categories | 
|       invalidobject.DoSanityCheckGroupTransition( feedbacks, sanitycheckfeedbacks ); | 
|        | 
|       i := 0; | 
|       // Traverse each sanity check violation feedbacks | 
|       traverse( feedbacks, Elements, fb ) | 
|       {  | 
|         // Check if there're any SanityCheckMessageCampaign with the same description, if there's none, create one | 
|         if( not exists( invalidobject, SanityCheckMessageCampaign, msg, msg.Description() = fb ) ) | 
|         { | 
|           //tokenize msg to retrieve category level and seperate the actual feedback | 
|           sanitycheckmessage := SanityCheckMessageCampaign::Create( invalidobject.SanityCheckGroupCampaign(),  | 
|                                                                     fb,  | 
|                                                                     true, | 
|                                                                     sanitycheckfeedbacks.Element( i ) ); | 
|                                                                      | 
|                                                             | 
|           sanitycheckmessage.Transition_MP( relset, invalidobject ); | 
|      | 
|         } | 
|         i := i + 1; | 
|       }  | 
|     } | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Module' } | 
| } |