예제 #1
0
    /// <summary>
    /// 單據狀態咨詢回寫SAP
    /// </summary>
    /// <param name="SPMTaskVars"></param>
    /// <param name="FormFields"></param>
    /// <param name="handlerType"></param>
    private void PostBackToSAP(SPMTaskVariables SPMTaskVars, EFFormFields FormFields, SPMVariables Variables, string handlerType)
    {
        GDS_Helper oStandard   = new GDS_Helper();
        string     sCurLogonID = (string)(SPMTaskVars.ReadDatum("SYS_LOGONID"));
        int        CASEID      = int.Parse((string)(SPMTaskVars.ReadDatum("CASEID")));
        string     StatusMark  = string.Empty;
        string     APROV       = string.Empty;

        switch (handlerType)
        {
        case "R":
            string sMemo = System.Web.HttpUtility.UrlDecode(Variables[SPMVariableKey.Opinion]);
            StatusMark = "Reject by:" + sCurLogonID + "(" + sMemo + ")";
            APROV      = "R";
            break;

        case "A":
            StatusMark = "Approve by:" + sCurLogonID;
            APROV      = "A";
            break;

        default:
            StatusMark = "Error";
            break;
        }
        //退簽原因長度防呆
        if (StatusMark.Length > 255)
        {
            StatusMark = StatusMark.Substring(0, 255);
        }
        //簡繁轉換
        StatusMark = ConvertChinese(StatusMark, "Big5");
        try
        {
            //By 主單號 UPDATE Flag and StatusRemark
            oStandard.UpdateGDSQueue(CASEID, StatusMark, APROV);
        }
        catch (Exception)
        {
            //trace
            //DBIO.RecordTraceLog("C", "NG", DOAHandler);
            //throw;
        }
    }
예제 #2
0
    // Code for 'after send'
    public override void SPMAfterSend(SPMSubmitMethod SubmitMethod, SPMTaskVariables SPMTaskVars, SPMVariables Variables, SPMRoutingVariable RoutingVariable, EFFormFields FormFields, ref IInterfaceHandleResult HandleResult)
    {
        if (SubmitMethod != SPMSubmitMethod.CreateNewCase)
        {
            SPMAfterSend_DBIO(SPMTaskVars, FormFields, ref HandleResult, RoutingVariable, Variables);
        }
        else
        {
            GDS_Helper oStandard      = new GDS_Helper();
            string     CASEID         = System.Web.HttpUtility.UrlDecode(Variables[SPMVariableKey.CaseId]); //CASEID
            string     Werks          = oUIControls.txtWERKS.Text;
            string     DocNo          = oUIControls.txtDocNo.Text;                                          //主單號
            string     RDocNo         = oUIControls.txtRDocNo.Text;                                         //Link 單號
            string     CostCenter     = oUIControls.txtCostCenter.Text;                                     //成本中心
            string     Department     = oUIControls.txtDepartment.Text;                                     //部門
            string     Application    = oUIControls.txtApplication.Text;                                    //申請人
            string     ZEILE          = oUIControls.txtZEILE.Text;                                          //ITEM
            string     Material       = oUIControls.txtMaterial.Text;                                       //料號
            string     ReturnQuantity = oUIControls.txtReturnQuantity.Text;                                 //退料數量
            string     Reason         = oUIControls.txtReason.Text;                                         //退料原因
            string     Remark         = oUIControls.txtRemark.Text;                                         //備註
            string     Return         = oUIControls.txtReturn.Text;                                         //條件FLAG Flag為Y才符合條件
            string     IADocNo        = oUIControls.txtIADocNo.Text;                                        //關聯IA單
            string     I6DocNo        = oUIControls.txtI6DocNo.Text;                                        //關聯I6單
            string     Amount         = oUIControls.txtAmount.Text;                                         //金額
            string     Settingxml     = oUIControls.txtDOA.Text;                                            //Setting
            try
            {
                //Insert Submit之後數據到DB中
                oStandard.Insert_Begin(Werks, DocNo, RDocNo, CostCenter, Department, Application, ZEILE, Material, ReturnQuantity, Return, Reason, Remark, IADocNo, I6DocNo, "In Process", double.Parse(Amount), Settingxml, int.Parse(CASEID));

                //將Submit後的狀態 W(In Process)回傳給SAP Begin關卡直接回傳
                oStandard.PostBackToSAP(int.Parse(CASEID));
            }
            catch (Exception ex)
            {
                //有異常 刪除已經Insert的資料
                oStandard.DeleteFormNo(int.Parse(CASEID));
                HandleResult.IsSuccess     = false;
                HandleResult.CustomMessage = ex.Message;
            }
        }
        base.SPMAfterSend(SubmitMethod, SPMTaskVars, Variables, RoutingVariable, FormFields, ref HandleResult);
    }
예제 #3
0
    // Validate contols before submit
    public override bool EFFormFieldsValidation(SPMSubmitMethod SubmitMethod, SPMProcessMethod ProcessMethod, SPMTaskVariables SPMTaskVars, ref IInterfaceHandleResult HandleResult, object oContainer, IUIShadow UIShadow)
    {
        GDSExceptionHandlingUIShadow lUIControls = (GDSExceptionHandlingUIShadow)UIShadow;
        GDS_Helper    oStandard = new GDS_Helper();
        StringBuilder ErrMsg    = new StringBuilder();


        string stepName = (string)(SPMTaskVars.ReadDatum("STEPNAME"));
        string curDOA   = lUIControls.txtDOA.Text;
        string plant    = lUIControls.txtWERKS.Text;
        string apType   = lUIControls.txtAPTYP.Text;

        DOA    spmDOA     = new DOA();
        string sApplicant = lUIControls.txtApplication.Text.Trim();
        //獲取 表頭及表身DATA
        string    formDetail = lUIControls.txtDetail.Text.Trim().Replace("&lt1;", "<").Replace("&gt1;", ">");
        string    formHead   = lUIControls.txtHead.Text.Trim().Replace("&lt1;", "<").Replace("&gt1;", ">");
        DataTable dtHead     = LiteOn.GDS.Utility.Tools.BuildHeadTable();

        System.IO.StringReader reader = new System.IO.StringReader(formHead);
        dtHead.ReadXml(reader);
        System.IO.StringReader reader2 = new System.IO.StringReader(formDetail);
        DataTable dtDetail             = LiteOn.GDS.Utility.Tools.BuildDetailTable();

        dtDetail.ReadXml(reader2);
        if (SubmitMethod == SPMSubmitMethod.CreateNewCase)
        {
            #region 欄位的非空驗證

            #endregion

            #region Check單據是否已經過帳
            string I1DocNo = oUIControls.txtRDocNo.Text;
            string IADocNo = oUIControls.txtIADocNo.Text;
            string I6DocNo = oUIControls.txtI6DocNo.Text;
            string WERKS   = oUIControls.txtWERKS.Text;
            //Check此I1單(領料單)和關聯的IA,I6單(退料單)是否都已經過賬 (Call SAP BAPI Z_BAPI_GDS_SEND MBLNR不為空則表示已經過賬)
            if (!oStandard.CheckFormNoIsPass(I1DocNo, IADocNo, I6DocNo, WERKS))
            {
                HandleResult.IsSuccess     = false;
                HandleResult.CustomMessage = "I1(領料單)或者IA,I6(退料單)存在未過賬的單子!";
            }
            #endregion
        }
        else
        {
            //only  approve action check controls
            if (SubmitMethod == SPMSubmitMethod.HandleCase_Approve)
            {
                int    caseId    = int.Parse((string)(SPMTaskVars.ReadDatum("CASEID")));
                string curStepId = SPMAppLine.GetCurrentStep(curDOA);
                //調用FUNCTION作FormFieldsValidation
                string errMsg = DOA.FieldsValidationByStepId(plant, apType, curStepId, caseId);
                if (errMsg.Length > 0)
                {
                    HandleResult.IsSuccess     = false;
                    HandleResult.CustomMessage = errMsg;
                }
                else
                {
                    try
                    {
                        //CALL FUNCTION獲取下關簽核人
                        DOAHandler = spmDOA.GetStepHandler(sApplicant, curDOA, dtHead, dtDetail, false);
                        oStandard.UpdateSettingxml(oUIControls.txtDocNo.Text, DOAHandler._sDOA.ToString());
                    }
                    catch (Exception ex)
                    {
                        HandleResult.IsSuccess     = false;
                        HandleResult.CustomMessage = ex.Message;
                    }
                }

                if (ErrMsg.ToString().Length > 0)
                {
                    HandleResult.IsSuccess     = false;
                    HandleResult.CustomMessage = ErrMsg.ToString();
                }

                //簽核人防呆檢查
                if (DOAHandler._sEndFlag == "N" && DOAHandler._sHandler.Length == 0)
                {
                    HandleResult.IsSuccess     = false;
                    HandleResult.CustomMessage = "Can't find next step handler, pls contact sys administrator";
                }
                string sCurLogonID  = (string)(SPMTaskVars.ReadDatum("SYS_LOGONID"));
                string sCurRoleCode = SPMAppLine.GetCurrentApprover(curDOA).Replace("{", "").Replace("}", "");

                //簽核人重復簽核防呆
                if (DOAHandler._sEndFlag == "N" && DOAHandler._sRoleCode == sCurRoleCode && DOAHandler._sHandler.ToUpper() == sCurLogonID.ToUpper())
                {
                    HandleResult.IsSuccess     = false;
                    HandleResult.CustomMessage = "Server or network is busy now, pls try again";
                }
            }
        }
        return(base.EFFormFieldsValidation(SubmitMethod, ProcessMethod, SPMTaskVars, ref HandleResult, oContainer, UIShadow));
    }
예제 #4
0
    // Fill SPM Variable
    public override void PrepareSPMVariables(SPMSubmitMethod SubmitMethod, SPMProcessMethod ProcessMethod, SPMTaskVariables SPMTaskVars, ref SPMVariables Variables, ref SPMRoutingVariable RoutingVariable, ref string strSPMUid, string strMemo, string strNotesForNextApprover, EFFormFields FormFields, ref IInterfaceHandleResult HandleResult, ref string SuccessMessage)
    {
        if (SubmitMethod == SPMSubmitMethod.CreateNewCase)
        {
            GDS_Helper    oStandard = new GDS_Helper();
            StringBuilder ErrMsg    = new StringBuilder();


            //string stepName = (string)(SPMTaskVars.ReadDatum("STEPNAME"));
            string curDOA = oUIControls.txtDOA.Text;
            string plant  = oUIControls.txtWERKS.Text;
            string apType = oUIControls.txtAPTYP.Text;


            DOA    spmDOA     = new DOA();
            string sApplicant = oUIControls.txtApplication.Text.Trim();
            //獲取 表頭及表身DATA
            string    formDetail          = oUIControls.txtDetail.Text.Trim().Replace("&lt1;", "<").Replace("&gt1;", ">");
            string    formHead            = oUIControls.txtHead.Text.Trim().Replace("&lt1;", "<").Replace("&gt1;", ">");
            DataTable dtHead              = LiteOn.GDS.Utility.Tools.BuildHeadTable();
            System.IO.StringReader reader = new System.IO.StringReader(formHead);
            dtHead.ReadXml(reader);
            System.IO.StringReader reader2 = new System.IO.StringReader(formDetail);
            DataTable dtDetail             = LiteOn.GDS.Utility.Tools.BuildDetailTable();
            dtDetail.ReadXml(reader2);
            try
            {
                //抓取第一關簽核人
                DOAHandler = spmDOA.GetStepHandler(sApplicant, curDOA, dtHead, dtDetail, true);
                Variables.Add(SPMVariableKey.Subject, "[部門領料_應退未退---測試] [" + FormFields["txtDocNo".ToUpper()] + "]");
                RoutingVariable = new SPMRoutingVariable(SPMRoutingVariableKey.spm_Jump, "DOA(" + DOAHandler._sHandler + ")");
            }
            catch (Exception ex)
            {
                HandleResult.IsSuccess     = false;
                HandleResult.CustomMessage = ex.Message;
            }
        }
        else
        {
            try
            {
                if (DOAHandler._sEndFlag == "N")
                {
                    //簽核人防呆檢查
                    if (DOAHandler._sHandler.Length == 0)
                    {
                        HandleResult.IsSuccess     = false;
                        HandleResult.CustomMessage = "Operation fail(server or network is busy now), pls refresh this page and try again";
                    }
                    else
                    {
                        RoutingVariable = new SPMRoutingVariable(SPMRoutingVariableKey.spm_Jump, "DOA(" + DOAHandler._sHandler + ")");
                        // 20121105 Add QX NA
                        if (DOAHandler._cc.Length > 0)
                        {
                            Variables.Add(SPMVariableKey.NextCC, DOAHandler._cc);
                        }
                        // 20121105 End QX NA
                    }
                }
                else
                {
                    RoutingVariable = new SPMRoutingVariable(SPMRoutingVariableKey.spm_Jump, "End");
                }

                // DBIO.RecordTraceLog("D", "OK", DOAHandler);
            }
            catch (Exception)
            {
                DBIO.RecordTraceLog("D", "NG", DOAHandler);
                throw;
            }
        }

        base.PrepareSPMVariables(SubmitMethod, ProcessMethod, SPMTaskVars, ref Variables, ref RoutingVariable, ref strSPMUid, strMemo, strNotesForNextApprover, FormFields, ref HandleResult, ref SuccessMessage);
    }
예제 #5
0
    private void ShowRecord(GDSExceptionHandlingUIShadow lUIControls, EFFormFields FormFields, string type, int caseId, SPMTaskVariables SPMTaskVars)
    {
        string     caseid    = SPMTaskVars.ReadDatum("CASEID").ToString();
        string     stepName  = (string)(SPMTaskVars.ReadDatum("STEPNAME"));
        GDS_Helper oStandard = new GDS_Helper();

        if (stepName != "Begin")
        {
            #region 抓取 異常單資料 並綁定到控件中
            DataTable dt = oStandard.GetMaster_Exception(int.Parse(caseid));//加載 異常單主表資料
            if (dt.Rows.Count > 0)
            {
                #region 數據加載
                DataRow dr = dt.Rows[0];
                oUIControls.txtDocNo.Text          = dr["MBLNR"].ToString();      //主單號
                oUIControls.txtRDocNo.Text         = dr["MBLNR_A"].ToString();    //Link 單號
                oUIControls.txtCostCenter.Text     = dr["KOSTL"].ToString();      //成本中心
                oUIControls.txtDepartment.Text     = dr["ABTEI"].ToString();      //部門
                oUIControls.txtApplication.Text    = dr["Applicant"].ToString();  //LoginID
                oUIControls.txtReturn.Text         = dr["RTNIF"].ToString();      // Return Flag
                oUIControls.txtWERKS.Text          = dr["WERKS"].ToString();      //廠別
                oUIControls.txtMaterial.Text       = dr["MATNR"].ToString();      //料號
                oUIControls.txtZEILE.Text          = dr["ZEILE"].ToString();      //料號對應的ITEM
                oUIControls.txtAmount.Text         = dr["Amount"].ToString();     //金額
                oUIControls.txtIADocNo.Text        = dr["IADocNo"].ToString();    //關聯IA單
                oUIControls.txtI6DocNo.Text        = dr["I6DocNo"].ToString();    //關聯I6單
                oUIControls.txtReason.Text         = dr["Reason"].ToString();     //REASON
                oUIControls.txtRemark.Text         = dr["Remark"].ToString();     //REMARK
                oUIControls.txtReturnQuantity.Text = dr["MENGE"].ToString();      //RETURN 數量
                oUIControls.txtDOA.Text            = dr["Settingxml"].ToString(); //Settingxml
                #endregion

                #region 控件顯示
                oUIControls.btnLink.Hidden             = true;
                oUIControls.frmUserInfo.Hidden         = true;
                oUIControls.txtDocNo.ReadOnly          = true;
                oUIControls.txtRDocNo.ReadOnly         = true;
                oUIControls.txtCostCenter.ReadOnly     = true;
                oUIControls.txtDepartment.ReadOnly     = true;
                oUIControls.txtApplication.ReadOnly    = true;
                oUIControls.txtReturn.ReadOnly         = true;
                oUIControls.txtMaterial.ReadOnly       = true;
                oUIControls.txtZEILE.ReadOnly          = true;
                oUIControls.txtAmount.ReadOnly         = true;
                oUIControls.txtIADocNo.ReadOnly        = true;
                oUIControls.txtI6DocNo.ReadOnly        = true;
                oUIControls.txtReason.ReadOnly         = true;
                oUIControls.txtRemark.ReadOnly         = true;
                oUIControls.txtReturnQuantity.ReadOnly = true;
                #endregion
            }
            #endregion


            #region 通過異常單的Link單號 抓取正常單中的Head和Detail
            DataTable dtHead   = oStandard.GetdtHead(oUIControls.txtRDocNo.Text.Trim());
            DataTable dtDetail = oStandard.GetdtDetail(oUIControls.txtRDocNo.Text.Trim());
            oUIControls.txtWERKS.Text = dtHead.Rows[0]["WERKS"].ToString(); //廠別
            oUIControls.txtAPTYP.Text = dtHead.Rows[0]["APTYP"].ToString(); //單據類型
            string xmlstrHead = oStandard.DataTableToXMLStr(dtHead);
            oUIControls.txtHead.Text = xmlstrHead;                          //Head
            string xmlstrDetail = oStandard.DataTableToXMLStr(dtDetail);
            oUIControls.txtDetail.Text = xmlstrDetail;                      //Detail
            //string tempWEKS = DOA.GetXMLConfigName(dtHead);//CALL FUNCTION獲取XML配置檔名
            //SettingParser x = new SettingParser(tempWEKS, oUIControls.txtAPTYP.Text);//讀取XML配置檔信息
            //oUIControls.txtDOA.Text = x.ApproveXML.Replace("&lt1;", "<").Replace("&gt1;", ">"); ;//抓取DOA的簽核邏輯
            #endregion
        }
    }