publicclassInfoPlusEvent{// *who*, sometimes can also be found in Step.AssignUserpublicInfoPlusUserUser{get;set;}// *who* actually made this move. in other words, the *Entruster*publicInfoPlusUserActualUser{get;set;}// *when*, unix timestamppubliclongWhen{get;set;}// *what* data it is,// especially, ON_FIELD_CHANGING will assign value here to indicate: // which field changed, changed to what.publicIDictionary<string,object>FormData{get;set;}// *where* the data located.// public string Path { get; set; }// Field EventspublicstringField{get;set;}publicstringFieldPath{get;set;}// suggestion data, only valid for FIELD_CHANGINGpublicCodeSuggestionSuggestion{get;set;}// *how* could the data be?publicIList<FormField>Fields{get;set;}// which step/instance/definition/form/applicationpublicFormStepStep{get;set;}// which action & users are chosenpublicstringActionCode{get;set;}publicstringActionName{get;set;}publicIList<FormStep>NextSteps{get;set;}publicFormStepEndStep{get;set;}// result, only available for DONE/STARTED...publicResponseEntity<object>Result{get;set;}/// <summary>/// Whether release/beta instance /// </summary>publicboolRelease{get;set;}/// <summary>/// AccessTokens for resources that: defined in workflow resources, granted by user, fetched by engine GUI/// only available in Events that after user interact/// </summary>publicIDictionary<string,string>Tokens{get;set;}}
publicclassInfoPlusResponse{/// <summary>/// cancel the current doing if Cancel == True/// </summary>publicboolCancel{get;set;}/// <summary>/// when you cancel the event, give the user a prompt./// </summary>publicstringPrompt{get;set;}/// <summary>/// for Expiration./// 0: do nothing/// -1: kill/// positive: seconds to extend./// </summary>publiclongThen{get;set;}/// <summary>/// Then, after Expiration, submit an Action/// </summary>publiclongThenAction{get;set;}/// <summary>/// Detail will contain exception infomation/// </summary>publicstringDetail{get;set;}/// <summary>/// Response form data, when: /// WorkflowStarting as Initialization data/// FieldChanging as auto fills./// </summary>publicIDictionary<string,object>FormData{get;set;}/// <summary>/// Codes. Maybe a list of CodeList, which used when:/// 1.ON_FIELD_SUGGESTING return only one CodeList suggested,/// 2.ON_STEP_RENDERING/ED, return CodeLists should be initialized./// 3.ON_FIELD_CHANGING, as above./// </summary>publicIList<CodeList>Codes{get;set;}}