Exemplo n.º 1
0
        /// <summary>
        /// Check to see whether the result of a persistence operation
        /// was successful, raise appropriate exceptions if not.
        /// </summary>
        /// <param name="dbCommand">
        /// <see cref="DbCommand" /> to retrieve result information from.
        /// </param>
        /// <param name="resultParameter">
        /// Name of the parameter storing the result.
        /// </param>
        /// <param name="instanceParameter">
        /// Name of the parameter storing the instance identifier.
        /// </param>
        private void CheckResult(DbCommand dbCommand, String resultParameter, String instanceParameter)
        {
            Int32?result     = _valueReader.GetNullableInt32(dbCommand, resultParameter);
            Guid  instanceId = _valueReader.GetGuid(dbCommand, instanceParameter);

            switch (result)
            {
            case _ownershipError:
                // ownership error
                throw new WorkflowOwnershipException(instanceId);

            case _instanceNotFoundError:
                // workflow could not be found
                PersistenceException e = new PersistenceException(RM.Get_Error_InstanceCouldNotBeLoaded(instanceId));
                e.Data["WorkflowNotFound"] = true;
                throw e;
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Retrieve instance state from the persistence store.
        /// </summary>
        /// <param name="instanceId"></param>
        /// <param name="ownerId"></param>
        /// <param name="ownedUntil"></param>
        /// <returns></returns>
        public byte[] RetrieveInstanceState(Guid instanceId, Guid ownerId, DateTime ownedUntil)
        {
            byte[] instanceState = null;

            using (DbCommand dbCommand = CreateCommand(nameResolver.ResolveCommandName(PersistenceCommandName.RetrieveInstanceState), CommandType.StoredProcedure))
            {
                string instanceParameter = nameResolver.ResolveParameterName(
                    PersistenceCommandName.InsertInstanceState,
                    PersistenceParameterName.InstanceId);

                string resultParameter = nameResolver.ResolveParameterName(
                    PersistenceCommandName.InsertInstanceState,
                    PersistenceParameterName.Result);

                AddParameter(dbCommand, instanceParameter, instanceId, AdoDbType.Guid);

                AddParameter(dbCommand, nameResolver.ResolveParameterName(
                                 PersistenceCommandName.RetrieveInstanceState,
                                 PersistenceParameterName.OwnerId), ownerId, AdoDbType.Guid);

                AddParameter(dbCommand, nameResolver.ResolveParameterName(
                                 PersistenceCommandName.RetrieveInstanceState,
                                 PersistenceParameterName.OwnedUntil), ownedUntil, AdoDbType.DateTime);

                AddParameter(dbCommand, resultParameter,
                             AdoDbType.Int32, ParameterDirection.Output);

                AddParameter(dbCommand, nameResolver.ResolveParameterName(
                                 PersistenceCommandName.RetrieveInstanceState,
                                 PersistenceParameterName.CurrentOwnerId), AdoDbType.Guid,
                             ParameterDirection.Output);

                AddParameter(dbCommand, nameResolver.ResolveParameterName(
                                 PersistenceCommandName.RetrieveInstanceState,
                                 PersistenceParameterName.State), AdoDbType.Cursor,
                             ParameterDirection.Output);

                int?result;
                using (IDataReader dataReader = dbCommand.ExecuteReader())
                {
                    if (dataReader.Read())
                    {
                        instanceState = (byte[])valueReader.GetValue(dataReader, 0);
                    }

                    result = valueReader.GetNullableInt32(dbCommand, resultParameter);
                }

                if (instanceState == null && result > 0)
                {
                    // workflow could not be found
                    PersistenceException e = new PersistenceException(
                        RM.Get_Error_InstanceCouldNotBeLoaded(instanceId));

                    e.Data["WorkflowNotFound"] = true;
                    WfLogHelper.WriteLog("检索实例状态 public byte[] RetrieveInstanceState(" + instanceId + ", " + ownerId + ", " + ownedUntil + ")发生异常:" + e.ToString());
                    throw e;
                }
                else
                {
                    checkResult(dbCommand, resultParameter, instanceParameter);
                }
            }

            return(instanceState);
        }