public int ExecuteProcessLaunch(string ssKey, int tenantId, int userId, int parentActivityId, int parentProcessId, List <Pair <string, object> > inputs, out List <Pair <int, ActivityKind> > nextActIds, out string failureMessage)
        {
            List <Pair <int, ActivityKind> > nextActivitiesIds = new List <Pair <int, ActivityKind> >();
            int newProcessId = 0;

            failureMessage = string.Empty;
            nextActIds     = nextActivitiesIds;

            bool res;

            try {
                res = ExecuteWebService("ProcessLaunch",
                                        delegate(HeContext heContext) {
                    return(ExecuteProcessWebService(heContext, ssKey, tenantId, userId, string.Empty,
                                                    delegate(IProcess execObj) {
                        newProcessId = execObj.ProcessLaunch(heContext, parentActivityId, parentProcessId, inputs, out nextActivitiesIds);
                    }));
                }
                                        ,
                                        false);

                nextActIds = nextActivitiesIds;
            } catch (Exception e) {
                failureMessage = ProcessBase.ProcessException(Global.App.OsContext, e, "", /*skipLog*/ true);;
                return(0);
            }

            return(res ? newProcessId: 0);
        }