示例#1
0
        /// <summary>
        /// Retrieves a detailed list of Rezef orders and executions for the specifed branch and account.
        /// GetOrdersRZ receives Order records either directly from the Order's Server or from an AS/400 server,
        /// depending on the user's configuration. To enable the records to be drawn from the server,
        /// OrdersStreamStart must first be executed. Records can be parsed using the RZFINQType structure.
        /// </summary>
        /// <param name="sessionId">Use FMRShell.Connection.GetSessionId()</param>
        /// <param name="vecRecords">A String array into which the rezef order records will be inserted.
        /// If strLastTime is specified and is other than "00000000", the vector will represent any orders
        /// received after that time. </param>
        /// <param name="Account">A filter, use FMRShell.Connection.Parameters.Account property</param>
        /// <param name="Branch">A filter, use FMRShell.Connection.Parameters.Branch property</param>
        /// <param name="LastTime">This is the 'Retrieve & Refresh' last time parameter.
        /// Only records which have been updated past this time will be retrieved.
        /// If this parameter is omitted or if "0" is specified all records are retrieved regardless of update time. </param>
        /// <returns>Upon success the function returns the total number of records retrieved into vecRecords.
        /// -1 : General function failure.
        /// -2 : Orders Data source initialization failure.
        /// -4 : Short Account not found.
        /// -5 : Inedequate authorization.</returns>
        public virtual int GetOrdersRZ(int sessionId, out Array vecRecords, string Account, string Branch, ref string LastTime)
        {
            //respond only if there is not null order instance in waiting state
            if (this._rezefSimpleOrder.Equals(default(RezefSimpleOrder)))
            {
                vecRecords = new object[0];
            }
            else
            {
                //give it some time to respond - always get back after 4 polls:
                if (this._pollsCounter < 4)
                {
                    _pollsCounter++;
                    vecRecords = new object[0];
                }
                else
                {
                    //reset polls counter
                    this._pollsCounter = 0;

                    // fill the vecRecords
                    RZFINQType data = new RZFINQType();

                    Random rand = new Random();

                    data.BNO_N      = _rezefSimpleOrder.BNO.ToString();
                    data.BNO_NAME   = rand.Next().ToString();
                    data.BRANCH_N   = "000";
                    data.COD_UPD    = rand.Next().ToString();
                    data.DIL_N      = rand.Next().ToString();;
                    data.DIL_NV_N   = rand.Next().ToString();
                    data.DIL_PRC_N  = rand.Next().ToString();
                    data.DIL_TIME_N = rand.Next().ToString();
                    data.DSP_FMR    = rand.Next().ToString();
                    data.ERR        = rand.Next().ToString();
                    data.ERR_DATA   = rand.Next().ToString();
                    data.ERR_INQ    = rand.Next().ToString();
                    data.ERR_UPD    = rand.Next().ToString();
                    data.ID_MAVR_N  = rand.Next().ToString();
                    data.ID_N       = rand.Next().ToString();
                    data.ID_NAME    = rand.Next().ToString();
                    data.MANA_N     = rand.Next().ToString();
                    data.MBR_SEQ_N  = rand.Next().ToString();
                    data.MSG1       = rand.Next().ToString();
                    data.NOSTRO     = rand.Next().ToString();
                    data.OP         = rand.Next().ToString();
                    data.OPR_NAME   = rand.Next().ToString();
                    data.ORDER_NO_N = rand.Next().ToString();
                    data.ORDR_NV_N  = rand.Next().ToString();
                    data.ORDR_PRC_N = rand.Next().ToString();
                    data.ORDR_SUG   = rand.Next().ToString();
                    data.ORDR_TIME  = rand.Next().ToString();
                    data.ORDR_TYPE  = rand.Next().ToString();
                    data.RZF_ORD_N  = rand.Next().ToString();
                    data.RZF_SEQ_N  = rand.Next().ToString();
                    data.SEQ_N      = this._orderId.ToString();                //this is our AsmachtaFMR - order's unique id
                    data.SND_RCV    = rand.Next().ToString();
                    data.STS_NAME   = rand.Next().ToString();
                    data.SUG_ID_N   = rand.Next().ToString();
                    data.SUG_INFO   = rand.Next().ToString();
                    data.SUG_INQ    = rand.Next().ToString();
                    data.SUG_MAVR_N = rand.Next().ToString();
                    data.SUG_N      = rand.Next().ToString();
                    data.SYS_TYPE   = rand.Next().ToString();
                    data.TIK_N      = rand.Next().ToString();

                    switch (_orderState)
                    {
                    case rzOrdersStates.WaitingApprove:
                    case rzOrdersStates.WaitingUpdate:
                        data.STS         = "4";                         //"נקלט" - approved TASE  - just change its value in order to test various events in orders FSM
                        this._orderState = rzOrdersStates.WaitingFill;
                        break;

                    case rzOrdersStates.WaitingFill:
                        data.STS = "6";                                 //"בצוע מלא" - complete fill TODO: add support for partial fill
                        //cleanup after the fill

                        /*
                         * this._orderState = rzOrdersStates.Idle;
                         * this._rezefSimpleOrder = default(RezefSimpleOrder);
                         */
                        break;

                    case rzOrdersStates.WaitingCancel:
                        data.STS = "7";                                 //"בוטל"
                        //cleanup after cancel
                        this._orderState       = rzOrdersStates.Idle;
                        this._rezefSimpleOrder = default(RezefSimpleOrder);
                        break;

                    default:
                        data.STS = "A";                                 //"שגוי"
                        //cleanup - the order is not valid anymore
                        this._orderState       = rzOrdersStates.Idle;
                        this._rezefSimpleOrder = default(RezefSimpleOrder);
                        break;
                    }

                    if (data.STS == "6")
                    {
                        vecRecords = new object[0];
                    }
                    else
                    {
                        vecRecords = new object[1];
                        vecRecords.SetValue(data, 0);
                    }

                    //fill LastTime with the value
                    LastTime =
                        DateTime.Now.Hour.ToString() +
                        DateTime.Now.Minute.ToString() +
                        DateTime.Now.Second.ToString() +
                        DateTime.Now.Millisecond.ToString()
                    ;

                    this._pollsCounter = 0;
                }
            }
            return(vecRecords.Length);
        }
        /// <summary>
        /// Retrieves a detailed list of Rezef orders and executions for the specifed branch and account.
        /// GetOrdersRZ receives Order records either directly from the Order's Server or from an AS/400 server, 
        /// depending on the user's configuration. To enable the records to be drawn from the server, 
        /// OrdersStreamStart must first be executed. Records can be parsed using the RZFINQType structure. 
        /// </summary>
        /// <param name="sessionId">Use FMRShell.Connection.GetSessionId()</param>
        /// <param name="vecRecords">A String array into which the rezef order records will be inserted. 
        /// If strLastTime is specified and is other than "00000000", the vector will represent any orders
        /// received after that time. </param>
        /// <param name="Account">A filter, use FMRShell.Connection.Parameters.Account property</param>
        /// <param name="Branch">A filter, use FMRShell.Connection.Parameters.Branch property</param>
        /// <param name="LastTime">This is the 'Retrieve & Refresh' last time parameter. 
        /// Only records which have been updated past this time will be retrieved. 
        /// If this parameter is omitted or if "0" is specified all records are retrieved regardless of update time. </param>
        /// <returns>Upon success the function returns the total number of records retrieved into vecRecords. 
        /// -1 : General function failure. 
        /// -2 : Orders Data source initialization failure.
        /// -4 : Short Account not found.
        /// -5 : Inedequate authorization.</returns>
        public virtual int GetOrdersRZ(int sessionId, out Array vecRecords, string Account, string Branch, ref string LastTime)
        {
            //respond only if there is not null order instance in waiting state
            if (this._rezefSimpleOrder.Equals(default(RezefSimpleOrder)))
            {
                vecRecords = new object[0];
            }
            else
            {
                //give it some time to respond - always get back after 4 polls:
                if (this._pollsCounter < 4)
                {
                    _pollsCounter++;
                    vecRecords = new object[0];
                }
                else
                {
                    //reset polls counter
                    this._pollsCounter = 0;

                    // fill the vecRecords
                    RZFINQType data = new RZFINQType();

                    Random rand = new Random();

                    data.BNO_N = _rezefSimpleOrder.BNO.ToString();
                    data.BNO_NAME = rand.Next().ToString();
                    data.BRANCH_N = "000";
                    data.COD_UPD = rand.Next().ToString();
                    data.DIL_N = rand.Next().ToString(); ;
                    data.DIL_NV_N = rand.Next().ToString();
                    data.DIL_PRC_N = rand.Next().ToString();
                    data.DIL_TIME_N = rand.Next().ToString();
                    data.DSP_FMR = rand.Next().ToString();
                    data.ERR = rand.Next().ToString();
                    data.ERR_DATA = rand.Next().ToString();
                    data.ERR_INQ = rand.Next().ToString();
                    data.ERR_UPD = rand.Next().ToString();
                    data.ID_MAVR_N = rand.Next().ToString();
                    data.ID_N = rand.Next().ToString();
                    data.ID_NAME = rand.Next().ToString();
                    data.MANA_N = rand.Next().ToString();
                    data.MBR_SEQ_N = rand.Next().ToString();
                    data.MSG1 = rand.Next().ToString();
                    data.NOSTRO = rand.Next().ToString();
                    data.OP = rand.Next().ToString();
                    data.OPR_NAME = rand.Next().ToString();
                    data.ORDER_NO_N = rand.Next().ToString();
                    data.ORDR_NV_N = rand.Next().ToString();
                    data.ORDR_PRC_N = rand.Next().ToString();
                    data.ORDR_SUG = rand.Next().ToString();
                    data.ORDR_TIME = rand.Next().ToString();
                    data.ORDR_TYPE = rand.Next().ToString();
                    data.RZF_ORD_N = rand.Next().ToString();
                    data.RZF_SEQ_N = rand.Next().ToString();
                    data.SEQ_N = this._orderId.ToString(); //this is our AsmachtaFMR - order's unique id
                    data.SND_RCV = rand.Next().ToString();
                    data.STS_NAME = rand.Next().ToString();
                    data.SUG_ID_N = rand.Next().ToString();
                    data.SUG_INFO = rand.Next().ToString();
                    data.SUG_INQ = rand.Next().ToString();
                    data.SUG_MAVR_N = rand.Next().ToString();
                    data.SUG_N = rand.Next().ToString();
                    data.SYS_TYPE = rand.Next().ToString();
                    data.TIK_N = rand.Next().ToString();

                    switch (_orderState)
                    {
                        case rzOrdersStates.WaitingApprove:
                        case rzOrdersStates.WaitingUpdate:
                            data.STS = "4"; //"נקלט" - approved TASE  - just change its value in order to test various events in orders FSM
                            this._orderState = rzOrdersStates.WaitingFill;
                            break;
                        case rzOrdersStates.WaitingFill:
                            data.STS = "6"; //"בצוע מלא" - complete fill TODO: add support for partial fill
                            //cleanup after the fill
                            /*
                            this._orderState = rzOrdersStates.Idle;
                            this._rezefSimpleOrder = default(RezefSimpleOrder);
                            */
                            break;
                        case rzOrdersStates.WaitingCancel:
                            data.STS = "7"; //"בוטל"
                            //cleanup after cancel
                            this._orderState = rzOrdersStates.Idle;
                            this._rezefSimpleOrder = default(RezefSimpleOrder);
                            break;
                        default:
                            data.STS = "A"; //"שגוי"
                            //cleanup - the order is not valid anymore
                            this._orderState = rzOrdersStates.Idle;
                            this._rezefSimpleOrder = default(RezefSimpleOrder);
                            break;
                    }

                    if (data.STS == "6")
                    {
                        vecRecords = new object[0];
                    }
                    else
                    {
                        vecRecords = new object[1];
                        vecRecords.SetValue(data, 0);
                    }

                    //fill LastTime with the value
                    LastTime =
                        DateTime.Now.Hour.ToString() +
                        DateTime.Now.Minute.ToString() +
                        DateTime.Now.Second.ToString() +
                        DateTime.Now.Millisecond.ToString()
                        ;

                    this._pollsCounter = 0;

                }
            }
            return vecRecords.Length;
        }