public void ExecuteProcess(string serv, string proc) { IntPtr hServer = IntPtr.Zero; IntPtr hProcess = IntPtr.Zero; IntPtr hVariableNames = IntPtr.Zero; IntPtr hVariableTypes = IntPtr.Zero; IntPtr hPromptStrings = IntPtr.Zero; IntPtr hDefaultValues = IntPtr.Zero; IntPtr hParamVariableName = IntPtr.Zero; IntPtr hParamVariableType = IntPtr.Zero; IntPtr hParamPromptString = IntPtr.Zero; IntPtr hParamDefaultValue = IntPtr.Zero; IntPtr hParamValue = IntPtr.Zero; IntPtr hParamArray = IntPtr.Zero; IntPtr hResult = IntPtr.Zero; IntPtr[] argsarray = null; int num_variables = 0; int errorcode; string errorstring; string errorlogfile; hServer = TM1API.SystemFunctions.TM1SystemServerHandle(this.UserHandle, serv); if (hServer != IntPtr.Zero) { ProcessParameter ppinfo; string variable; string prompt; string value = null; string type = null; int typeindex; var ppsinfo = new List<ProcessParameter>(); ParameterDialog pdlg = null; // Get a handle to the process hProcess = TM1API.ObjectFunctions.TM1ObjectListHandleByNameGet(this.PoolHandle, hServer, TM1API.ProcessFunctions.TM1ServerProcesses(), TM1API.ValueFunctions.TM1ValString(this.PoolHandle, proc, proc.Length)); hVariableNames = TM1API.ObjectFunctions.TM1ObjectPropertyGet(this.PoolHandle, hProcess, TM1API.ProcessFunctions.TM1ProcessParametersNames()); hVariableTypes = TM1API.ObjectFunctions.TM1ObjectPropertyGet(this.PoolHandle, hProcess, TM1API.ProcessFunctions.TM1ProcessParametersTypes()); hPromptStrings = TM1API.ObjectFunctions.TM1ObjectPropertyGet(this.PoolHandle, hProcess, TM1API.ProcessFunctions.TM1ProcessParametersPromptStrings()); hDefaultValues = TM1API.ObjectFunctions.TM1ObjectPropertyGet(this.PoolHandle, hProcess, TM1API.ProcessFunctions.TM1ProcessParametersDefaultValues()); num_variables = TM1API.ValueFunctions.TM1ValArrayMaxSize(this.UserHandle, hVariableNames); for (int count = 0; count < num_variables; count++) { hParamVariableName = TM1API.ValueFunctions.TM1ValArrayGet(this.UserHandle, hVariableNames, count + 1); hParamVariableType = TM1API.ValueFunctions.TM1ValArrayGet(this.UserHandle, hVariableTypes, count + 1); hParamPromptString = TM1API.ValueFunctions.TM1ValArrayGet(this.UserHandle, hPromptStrings, count + 1); hParamDefaultValue = TM1API.ValueFunctions.TM1ValArrayGet(this.UserHandle, hDefaultValues, count + 1); variable = TM1API.ValueFunctions.TM1ValStringGet(this.UserHandle, hParamVariableName).ToString(); typeindex = TM1API.ValueFunctions.TM1ValIndexGet(this.UserHandle, hParamVariableType); prompt = TM1API.ValueFunctions.TM1ValStringGet(this.UserHandle, hParamPromptString).ToString(); if (typeindex == 32) { type = "String"; value = TM1API.ValueFunctions.TM1ValStringGet(this.UserHandle, hParamDefaultValue).ToString(); } else if (typeindex == 33) { type = "Numeric"; value = TM1API.ValueFunctions.TM1ValRealGet(this.UserHandle, hParamDefaultValue).ToString(); } ppinfo = new ProcessParameter(variable, prompt, type, value); ppsinfo.Add(ppinfo); ppinfo = null; } if (ppsinfo.Count > 0) { pdlg = new ParameterDialog(ppsinfo, serv + " - " + proc); if (pdlg.ShowDialog() == DialogResult.OK) { ppsinfo = pdlg.FinalParamValues; argsarray = new IntPtr[ppsinfo.Count]; for (int argcount = 0; argcount < ppsinfo.Count; argcount++) { if (ppsinfo[argcount].Type.Equals("Numeric")) { hParamValue = TM1API.ValueFunctions.TM1ValReal(this.PoolHandle, Double.Parse(ppsinfo[argcount].Value)); } else if (ppsinfo[argcount].Type.Equals("String")) { hParamValue = TM1API.ValueFunctions.TM1ValString(this.PoolHandle, ppsinfo[argcount].Value, ppsinfo[argcount].Value.Length); } argsarray[argcount] = hParamValue; } hParamArray = TM1API.ValueFunctions.TM1ValArray(this.PoolHandle, argsarray, ppsinfo.Count); } } hResult = TM1API.ProcessFunctions.TM1ProcessExecuteEx(this.PoolHandle, hProcess, hParamArray); if (TM1API.ValueFunctions.TM1ValType(this.UserHandle, hResult) == TM1API.ValueFunctions.TM1ValTypeArray()) { CheckProcessResult(hResult, out errorcode, out errorstring, out errorlogfile); if (errorcode > 0) { MessageBox.Show(errorcode.ToString() + ": " + errorstring, "Error in process execution", MessageBoxButtons.OK, MessageBoxIcon.Error); } } else { // Success! } } else { MessageBox.Show("An active connection to the server could not be found.", "Error in process execution", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void OkayBtn_Click(object sender, EventArgs e) { ProcessParameter ppi = null; string variable = null; string type = null; string prompt = null; string value = null; foreach (ListViewItem lvi in this.ParamsListView.Items) { variable = lvi.SubItems[0].Text; type = lvi.SubItems[1].Text; prompt = lvi.SubItems[2].Text; value = lvi.SubItems[3].Text; ppi = new ProcessParameter(variable, prompt, type, value); this.FinalParamValues.Add(ppi); } this.DialogResult = DialogResult.OK; this.Close(); }