/// <summary> /// 如果在当前流程中找不到参数。根据probeMode参数决定是否查找父流程 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="paramName"></param> /// <param name="probeMode"></param> /// <param name="defaultValue"></param> /// <returns></returns> public T GetValueRecursively <T>(string paramName, WfProbeApplicationRuntimeParameterMode probeMode, T defaultValue) { object result = null; if (InnerGetValueRecursively <T>(this, ProcessInstance, probeMode, paramName, out result) == false) { result = defaultValue; } return((T)result); }
private static bool InnerGetValueRecursively <T>(WfApplicationRuntimeParameters parameters, IWfProcess process, WfProbeApplicationRuntimeParameterMode probeMode, string paramName, out object result) { paramName.CheckStringIsNullOrEmpty("paramName"); result = null; bool existed = false; if (parameters.Contains(paramName)) { object dataInARP = parameters[paramName]; if (dataInARP is T) { result = (T)dataInARP; } else { result = DataConverter.ChangeType(parameters[paramName], typeof(T)); } existed = true; } else { if (process != null) { bool probParent = false; switch (probeMode) { case WfProbeApplicationRuntimeParameterMode.Auto: probParent = process.Descriptor.Properties.GetValue("ProbeParentProcessParams", false); break; case WfProbeApplicationRuntimeParameterMode.NotRecursively: probParent = false; break; case WfProbeApplicationRuntimeParameterMode.Recursively: probParent = true; break; } if (probParent && process.HasParentProcess) { existed = InnerGetValueRecursively <T>(process.EntryInfo.OwnerActivity.Process.ApplicationRuntimeParameters, process.EntryInfo.OwnerActivity.Process, probeMode, paramName, out result); } } } return(existed); }
public static WfClientProbeApplicationRuntimeParameterMode ToClientProbeApplicationRuntimeParameterMode(this WfProbeApplicationRuntimeParameterMode probeMode) { return((WfClientProbeApplicationRuntimeParameterMode)probeMode); }