| Quintiq file version 2.0 | 
| #parent: #root | 
| Method PTF_StartClient ( | 
|   String user, | 
|   String password, | 
|   String clienttype, | 
|   String project, | 
|   String view, | 
|   String customargumentline, | 
|   Number minstartclientdelayinsecond, | 
|   Number maxstartclientdelayinsecond, | 
|   String dataset, | 
|   String datasetfolder, | 
|   String datasetkind | 
| ) id:Method_LibPTF_pnlTestController_PTF_StartClient | 
| { | 
|   #keys: '[105690.0.145844532]' | 
|   Body: | 
|   [* | 
|     // Construct the commandline for starting a Client with the parameters entered by user | 
|     argument                 := "/autostart/license=ReadWrite"; | 
|     clientexecutable         := ""; | 
|     fullpathclientexecutable := ""; | 
|      | 
|     if( project.Length() > 0 ) | 
|     { | 
|       argument := argument + '/project="' + project + '"'; | 
|     } | 
|      | 
|     if( user.Length() > 0 ) | 
|     { | 
|       argument := argument + '/user="' + user + '"'; | 
|     } | 
|      | 
|     if( password.Length() > 0 ) | 
|     { | 
|       argument := argument + '/password="' + password + '"'; | 
|     } | 
|      | 
|     if( view.Length() > 0 ) | 
|     { | 
|       argument := argument + '/view="' + view + '"'; | 
|     } | 
|      | 
|     // Replacement values to bypass batch file reserved words | 
|     argument := argument.ReplaceAll( '/', '@' ); | 
|      | 
|     // Dataset folder adjustment | 
|     datasetfolder     := datasetfolder.TrimBoth(); | 
|     missingbeginslash := datasetfolder.SubString( 0, 1 ) <> "/" | 
|     extraendslash     := datasetfolder.RestString( datasetfolder.Length() -1 ) = "/" | 
|     if( missingbeginslash ) | 
|     { | 
|       datasetfolder := "/" + datasetfolder; | 
|     } | 
|     if( extraendslash ) | 
|     { | 
|       datasetfolder := datasetfolder.SubString( 0, datasetfolder.Length() - 1 ); | 
|     } | 
|      | 
|     selectdataset := '/selectdataset="' + datasetkind + ':' + datasetfolder + '/' + dataset + '"'; | 
|     argument      := argument + selectdataset; | 
|      | 
|     if( customargumentline.Length() > 0 ) | 
|     { | 
|       customargs      := customargumentline.Tokenize( " " ); | 
|       customarguments := ""; | 
|      | 
|       traverse( customargs, Elements, customarg ) | 
|       { | 
|         customarguments := customarguments + customarg.TrimBoth(); | 
|       } | 
|      | 
|       argument := argument + customarguments; | 
|     } | 
|      | 
|     if( clienttype = LibPTF_Util::ClientType_ThinClient() ) | 
|     { | 
|       clientexecutable := LibPTF_Util::ExecutableName_ThinClient(); | 
|     } | 
|     else if( clienttype = LibPTF_Util::ClientType_FatClient() ) | 
|     { | 
|       clientexecutable := LibPTF_Util::ExecutableName_FatClient(); | 
|     } | 
|     fullpathclientexecutable := '"' + this.PTF_GetClientExecutablePath() + clientexecutable + '"'; | 
|      | 
|     // The following are replaced with some other values because they are | 
|     // reserved words in the batch file when exectuted from command windows. | 
|     // The corresponding batch file will make the necessary conversion when executes | 
|     argument := argument.ReplaceAll( '=', '$' ); | 
|     argument := argument.ReplaceAll( ' ', '\%20' ); | 
|     argument := argument.ReplaceAll( '"', '#' ); | 
|     argument := argument.ReplaceAll( ">", "gtsign" ); | 
|     argument := argument.ReplaceAll( "<", "ltsign" ); | 
|      | 
|     fullpathclientexecutable := fullpathclientexecutable.ReplaceAll( ' ', '\%20' ); | 
|     fullpathclientexecutable := fullpathclientexecutable.ReplaceAll( '"', '#' ); | 
|      | 
|     // Get random delay between the start client delay range | 
|     randomdelayinsecond := Number::Random( minstartclientdelayinsecond, maxstartclientdelayinsecond ); | 
|      | 
|      | 
|     command := 'cmd /c "' + this.PTF_GetBatchFileFullPathForKickStartClient() + '" ' | 
|                + argument | 
|                + ',' + [String]randomdelayinsecond | 
|                + ',' + fullpathclientexecutable; | 
|      | 
|     Application.ExecuteCommand( command ); | 
|   *] | 
| } |