public static string GetFilterString(this FilterScheme scheme, Context ctx, FormMetadata metadata) { if (scheme.Scheme.IsNullOrEmptyOrWhiteSpace()) { return(string.Empty); } //字段比较条件元数据。 var filterMetadata = FormMetaDataCache.GetCachedFilterMetaData(ctx); //过滤模型:解析过滤方案 ListFilterModel filterModel = new ListFilterModel(); filterModel.FilterObject.FilterMetaData = filterMetadata; filterModel.SetContext(ctx, metadata.BusinessInfo, metadata.BusinessInfo.GetForm().GetFormServiceProvider()); filterModel.InitFieldList(metadata, null); //把过滤方案的XML内容,反序列化为对象 DcxmlSerializer dcxmlSerializer = new DcxmlSerializer(new PreInsertDataDcxmlBinder()); SchemeEntity schemeEntity = dcxmlSerializer.DeserializeFromString(scheme.Scheme) as SchemeEntity; //利用ListFilterModel, 翻译过滤条件 filterModel.FilterObject.Setting = schemeEntity.FilterSetting; string statement = filterModel.FilterObject.GetFilterSQLString(ctx, TimeServiceHelper.GetSystemDateTime(ctx)); return(statement); } //end metthod
/// <summary> /// 查询余额 /// </summary> /// <param name="Context">上下文</param> /// <param name="actband">我方银行账户</param> public JNBandBalance checkamount(Context ctx, JNBandPara actband) { DynamicObject bandID = getbandobject(ctx, actband); DynamicObject urlobject = getbandUrl(bandID); string bandNUMBER = Convert.ToString(bandID["NUMBER"]); string ACNTBRANCHNUMBER = Convert.ToString(bandID["ACNTBRANCHNUMBER"]); string token = checkin(ctx, actband); string url = Convert.ToString(urlobject["F_JN_ServiceURL"]); string F_JNtermid = Convert.ToString(urlobject["F_JNtermid"]); string F_JNCustid = Convert.ToString(urlobject["F_JNCustid"]); string F_JNCusopr = Convert.ToString(urlobject["F_JNCusopr"]); DateTime currentTime = new System.DateTime(); currentTime = TimeServiceHelper.GetSystemDateTime(ctx); string F_JNcustdt = string.Format("{0:yyyyMMddHHmmss}", currentTime); string xmlMsg = string.Format(@"<?xml version=""1.0"" encoding=""UTF-8""?> <bocb2e version=""100"" security=""true"" lang=""chs""> <head> <termid>{0}</termid> <trnid>20060704001</trnid> <custid>{1}</custid> <cusopr>{2}</cusopr> <trncod>b2e0005</trncod> <token>{3}</token> </head> <trans> <trn-b2e0005-rq> <b2e0005-rq> <account> <ibknum>{4}</ibknum> <actacn>{5}</actacn> </account> </b2e0005-rq> </trn-b2e0005-rq> </trans> </bocb2e> ", F_JNtermid, F_JNCustid, F_JNCusopr, token, bandNUMBER, ACNTBRANCHNUMBER); string Xmldata = BandPost(url, xmlMsg, 600); XmlDocument xx = new XmlDocument(); xx.LoadXml(Xmldata); //加载xml XmlNodeList xxList = xx.GetElementsByTagName("balance"); //取得节点名为row的XmlNode集合 double bokbal = Convert.ToDouble(xxList[0]["bokbal"].Value); //账面余额 double avabal = Convert.ToDouble(xxList[0]["avabal"].Value);; //有效余额 double stpamt = Convert.ToDouble(xxList[0]["stpamt"].Value);; //圈存余额 double ovramt = Convert.ToDouble(xxList[0]["ovramt"].Value);; //透资余额 JNBandBalance amount = new JNBandBalance(); amount.bokbal = bokbal; amount.bokbal = avabal; amount.stpamt = stpamt; amount.ovramt = ovramt; return(amount); }
/// <summary> /// 签入 /// </summary> /// <param name="Context">上下文</param> /// <param name="actband">我方银行账户</param> public string checkin(Context ctx, JNBandPara actband) { DynamicObject bandID = getbandobject(ctx, actband); DynamicObject urlobject = getbandUrl(bandID); #region //判断是否是启用的帐套 string database = ctx.DataCenterName; string F_VTR_DataBase = Convert.ToString(urlobject["F_VTR_DataBase"]); if (database != F_VTR_DataBase) { return(""); } #endregion string url = Convert.ToString(urlobject["F_JN_ServiceURL"]); string F_JNtermid = Convert.ToString(urlobject["F_JNtermid"]); string F_JNCustid = Convert.ToString(urlobject["F_JNCustid"]); string F_JNCusopr = Convert.ToString(urlobject["F_JNCusopr"]); string F_JNOprpwd = Convert.ToString(urlobject["F_JNOprpwd"]); DateTime currentTime = new System.DateTime(); currentTime = TimeServiceHelper.GetSystemDateTime(ctx); string F_JNcustdt = string.Format("{0:yyyyMMddHHmmss}", currentTime); string xmlMsg = string.Format(@"<?xml version=""1.0"" encoding=""UTF-8""?> <bocb2e version=""100"" security=""true"" lang=""chs""> <head> <termid>{0}</termid> <trnid>20060704001</trnid> <custid>{1}</custid> <cusopr>{2}</cusopr> <trncod>b2e0001</trncod> </head> <trans> <trn-b2e0001-rq> <b2e0001-rq> <custdt>{3}</custdt> <oprpwd>{4}</oprpwd> </b2e0001-rq> </trn-b2e0001-rq> </trans> </bocb2e> ", F_JNtermid, F_JNCustid, F_JNCusopr, F_JNcustdt, F_JNOprpwd); string Xmldata = BandPost(url, xmlMsg, 600); XmlDocument xx = new XmlDocument(); xx.LoadXml(Xmldata); //加载xml XmlNode rootnote = xx.SelectSingleNode("bocb2e"); //指向根节点 XmlNode transnote = rootnote.SelectSingleNode("trans"); XmlNode b2enote = transnote.SelectSingleNode("trn-b2e0001-rs"); XmlNode tokennote = b2enote.SelectSingleNode("token"); string token = tokennote.InnerText; return(token); }
public override void Validate(ExtendedDataEntity[] dataEntities, ValidateContext validateContext, Context ctx) { if (dataEntities == null || dataEntities.Length <= 0) { return; } DateTime dtNow = TimeServiceHelper.GetSystemDateTime(this.Context); DateTime startDate = new DateTime(dtNow.Year, dtNow.Month, 1); DateTime endDate = new DateTime(dtNow.Year, dtNow.Month + 1, 1).AddSeconds(-1); string strSql = @"SELECT SUM(FALLAMOUNT) FROM T_PUR_POORDERENTRY_F F INNER JOIN T_PUR_POORDER T ON F.FID = T.FID WHERE T.FDATE >=@StartDate and t.FDATE <=@EndDate "; List <SqlParam> sqlParaList = new List <SqlParam> { new SqlParam("@StartDate", KDDbType.DateTime, startDate), new SqlParam("@EndDate", KDDbType.DateTime, endDate) }; var allAmount = DBUtils.ExecuteScalar <decimal>(this.Context, strSql, 0, sqlParaList.ToArray()); foreach (var et in dataEntities) { var dyEntrys = et.DataEntity["POOrderEntry"] as DynamicObjectCollection; if (dyEntrys != null) { foreach (var dy in dyEntrys) { allAmount += Convert.ToDecimal(dy["AllAmount"]); if (allAmount > 100000) { validateContext.AddError(et, new ValidationErrorInfo( "", Convert.ToString(et.DataEntity[0]), et.DataEntityIndex, et.RowIndex, "E1", string.Format("本月的价税合计已经超过十万,禁止保存,当前价税合计为:{0}", allAmount), "价税合计超额检查")); } } } } //查询本月的价税合计数 }
/// <summary> /// 签出 /// </summary> /// <param name="Context">上下文</param> /// <param name="actband">我方银行账户</param> public void checkout(Context ctx, JNBandPara actband) { DynamicObject bandID = getbandobject(ctx, actband); DynamicObject urlobject = getbandUrl(bandID); #region //判断是否是启用的帐套 string database = ctx.DataCenterName; string F_VTR_DataBase = Convert.ToString(urlobject["F_VTR_DataBase"]); if (database != F_VTR_DataBase) { return; } #endregion string url = Convert.ToString(urlobject["F_JN_ServiceURL"]); string F_JNtermid = Convert.ToString(urlobject["F_JNtermid"]); string F_JNCustid = Convert.ToString(urlobject["F_JNCustid"]); string F_JNCusopr = Convert.ToString(urlobject["F_JNCusopr"]); DateTime currentTime = new System.DateTime(); currentTime = TimeServiceHelper.GetSystemDateTime(ctx); string F_JNcustdt = string.Format("{0:yyyyMMddHHmmss}", currentTime); string xmlMsg = string.Format(@"<?xml version=""1.0"" encoding=""UTF-8""?> <bocb2e version=""100"" security=""true"" lang=""chs""> <head> <termid>{0}</termid> <trnid>20060704001</trnid> <custid>{1}</custid> <cusopr>{2}</cusopr> <trncod>b2e0002</trncod> </head> <trans> <trn-b2e0002-rq> <b2e0002-rq> <custdt>{3}</custdt> </b2e0002-rq> </trn-b2e0002-rq> </trans> </bocb2e> ", F_JNtermid, F_JNCustid, F_JNCusopr, F_JNcustdt); string Xmldata = BandPost(url, xmlMsg, 600); }
/// <summary> /// 实际运行的Run 方法 /// </summary> /// <param name="ctx"></param> /// <param name="schedule"></param> public void Run(Context ctx, Schedule schedule) { DateTime currentTime = new System.DateTime(); JNBandPara actband = new JNBandPara(); JNBand findbandservice = new JNBand(); currentTime = TimeServiceHelper.GetSystemDateTime(ctx); string sql = ""; sql = string.Format(@"select t1.FENTRYID,t1.F_JNOBSSID,t2.FACCOUNTID from T_AP_PAYBILLENTRY_B t1 join T_AP_PAYBILLENTRY t2 on t2.fid=t1.fid join T_AP_PAYBILL t3 on t1.FID=t3.FID where DATEDIFF(DAY,GETDATE(),FAPPROVEDATE)>-10 and (t1.F_JNOBSSID is not null and t1.F_JNOBSSID <>'')"); DynamicObjectCollection rundatas = DBUtils.ExecuteDynamicObject(ctx, sql); string token = ""; int i = 0; foreach (var rundata in rundatas) { FormMetadata formMetadata = MetaDataServiceHelper.Load(ctx, "CN_BANKACNT") as FormMetadata; DynamicObject FrACCOUNT = BusinessDataServiceHelper.LoadSingle( ctx, rundata["FACCOUNTID"], formMetadata.BusinessInfo.GetDynamicObjectType()); DynamicObject FrBAND = FrACCOUNT["BANKID"] as DynamicObject; actband.bandid = Convert.ToInt32(FrACCOUNT["Id"]); //actband.addr = Convert.ToString(FrACCOUNT["BANKADDRESS"]); actband.name = Convert.ToString(FrACCOUNT["Name"]); actband.bandnum = Convert.ToString(FrACCOUNT["ACNTBRANCHNUMBER"]); actband.cn = Convert.ToString(FrACCOUNT["NUMBER"]); actband.bandname = Convert.ToString(FrBAND["Name"]); string obssid = Convert.ToString(rundata["F_JNOBSSID"]); if (i == 0)//首行获取令牌 { token = findbandservice.checkin(ctx, actband); i++; } string result = ""; if (obssid.Length > 1) { result = findbandservice.findPay(ctx, actband, obssid, token); } if (result.Length > 0) { switch (result) { default: BusinessDataServiceHelper.SetState(ctx, "T_AP_PAYBILLENTRY_B", "FBankStatus", "A", "F_JNOBSSID", new object[] { obssid }); break; case "待授权": BusinessDataServiceHelper.SetState(ctx, "T_AP_PAYBILLENTRY_B", "FBankStatus", "B", "F_JNOBSSID", new object[] { obssid }); break; case "ok": BusinessDataServiceHelper.SetState(ctx, "T_AP_PAYBILLENTRY_B", "FBankStatus", "C", "F_JNOBSSID", new object[] { obssid }); break; case "授权拒绝": BusinessDataServiceHelper.SetState(ctx, "T_AP_PAYBILLENTRY_B", "FBankStatus", "D", "F_JNOBSSID", new object[] { obssid }); break; case "交易处理中": BusinessDataServiceHelper.SetState(ctx, "T_AP_PAYBILLENTRY_B", "FBankStatus", "B", "F_JNOBSSID", new object[] { obssid }); break; } } //Thread.Sleep(5000); } //throw new NotImplementedException(); if (token.Length > 1) { findbandservice.checkout(ctx, actband); } }
/// <summary> /// 绑定单据后,上传附件 /// </summary> private string BindForm_UploadAttach() { if (jSONObject != null) { JSONArray jSONArray = new JSONArray(jSONObject["NewValue"].ToString()); if (jSONArray.Count > 0) { List <DynamicObject> dynList = new List <DynamicObject>(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < jSONArray.Count; i++) { //获取上传的文件名 string serverFileName = (jSONArray[i] as Dictionary <string, object>)["ServerFileName"].ToString(); string fileName = (jSONArray[i] as Dictionary <string, object>)["FileName"].ToString(); //文件上传到服务端的临时目录 string directory = "FileUpLoadServices\\UploadFiles"; //文件的完整路径 string fileFullPath = PathUtils.GetPhysicalPath(directory, serverFileName); var formMetadata = (FormMetadata)MetaDataServiceHelper.Load(this.Context, FormIdConst.BOS_Attachment); var dataBuff = System.IO.File.ReadAllBytes(fileFullPath); var dyn = new DynamicObject(formMetadata.BusinessInfo.GetDynamicObjectType()); if (submitType != 0) { // 将数据上传至文件服务器,并返回上传结果 var result = this.UploadAttachment(fileName, dataBuff); if (!result.Success) { // 上传失败,收集失败信息 sb.AppendLine(string.Format("附件:{0},上传失败:{1}", fileName, result.Message)); continue; } // 通过这个FileId就可以从文件服务器下载到对应的附件 dyn["FileId"] = result.FileId; } else { // 数据库的方式是直接保存附件数据 dyn["Attachment"] = dataBuff; } string _BillType = this.View.BusinessInfo.GetForm().Id; string _BillNo = this.View.Model.DataObject["BillNo"].ToString(); //原始BOS单据【绑定实体属性】 string _InterID = this.View.Model.DataObject["Id"].ToString(); dyn["BillType"] = _BillType; dyn["BillNo"] = _BillNo; dyn["InterID"] = _InterID; // 上传文件服务器成功后才加入列表 dyn["AttachmentName"] = fileName; dyn["AttachmentSize"] = Math.Round(dataBuff.Length / 1024.0, 2); dyn["EntryInterID"] = -1;// 参照属性解读 dyn["CreateMen_Id"] = Convert.ToInt32(this.Context.UserId); dyn["CreateMen"] = GetUser(this.Context.UserId.ToString()); dyn["ModifyTime"] = dyn["CreateTime"] = TimeServiceHelper.GetSystemDateTime(this.Context); dyn["ExtName"] = System.IO.Path.GetExtension(fileName); dyn["FileStorage"] = submitType.ToString(); dyn["EntryKey"] = " "; dynList.Add(dyn); } if (dynList.Count > 0) { // 所有数据加载完成后再一次性保存全部 BusinessDataServiceHelper.Save(this.Context, dynList.ToArray()); sb.AppendLine(); sb.AppendLine(string.Join(",", dynList.Select(dyn => dyn["AttachmentName"].ToString()).ToArray()) + ",上传成功"); } //写入上传日志 增加判定 FLog不存在不写入 if (this.Model.BillBusinessInfo.GetElement("FLog") != null) { this.Model.SetValue("FLog", sb.ToString()); } return(sb.ToString()); } } return(""); }
/// <summary> /// 查询交易状态 /// </summary> /// <param name="Context">上下文</param> /// <param name="actband">我方银行账户</param> /// <param name="obssid">银行流水号</param> /// <param name="token">令牌</param> public string findPay(Context ctx, JNBandPara actband, string obssid, string token) { DynamicObject bandID = getbandobject(ctx, actband); DynamicObject urlobject = getbandUrl(bandID); #region //判断是否是启用的帐套 string database = ctx.DataCenterName; string F_VTR_DataBase = Convert.ToString(urlobject["F_VTR_DataBase"]); if (database != F_VTR_DataBase) { return(""); } #endregion string bandNUMBER = Convert.ToString(bandID["NUMBER"]); string ACNTBRANCHNUMBER = Convert.ToString(bandID["ACNTBRANCHNUMBER"]); //string token = checkin(ctx,actband); string url = Convert.ToString(urlobject["F_JN_ServiceURL"]); string F_JNtermid = Convert.ToString(urlobject["F_JNtermid"]); string F_JNCustid = Convert.ToString(urlobject["F_JNCustid"]); string F_JNCusopr = Convert.ToString(urlobject["F_JNCusopr"]); DateTime currentTime = new System.DateTime(); currentTime = TimeServiceHelper.GetSystemDateTime(ctx); string F_JNcustdt = string.Format("{0:yyyyMMddHHmmss}", currentTime); string xmlMsg = string.Format(@"<?xml version=""1.0"" encoding=""UTF-8""?> <bocb2e version=""100"" security=""true"" lang=""chs""> <head> <termid>{0}</termid> <trnid>20060704001</trnid> <custid>{1}</custid> <cusopr>{2}</cusopr> <trncod>b2e0007</trncod> <token>{3}</token> </head> <trans> <trn-b2e0007-rq> <b2e0007-rq> <insid></insid> <obssid>{4}</obssid> </b2e0007-rq> </trn-b2e0007-rq> </trans> </bocb2e> ", F_JNtermid, F_JNCustid, F_JNCusopr, token, obssid); string Xmldata = BandPost(url, xmlMsg, 600); XmlDocument xx = new XmlDocument(); xx.LoadXml(Xmldata); //加载xml XmlNode rootnote = xx.SelectSingleNode("bocb2e"); //指向根节点 XmlNode transnote = rootnote.SelectSingleNode("trans"); XmlNode trnb2enote = transnote.SelectSingleNode("trn-b2e0007-rs"); XmlNode b2enotes = trnb2enote.SelectSingleNode("b2e0007-rs"); XmlNode statusnote = b2enotes.SelectSingleNode("status"); XmlNode rspnote = statusnote.SelectSingleNode("rspmsg"); string rspmsg = rspnote.InnerText; //checkout(ctx,actband); return(rspmsg);//返回银行流水号 }
/// <summary> /// 公对私转账支付 /// </summary> /// /// <param name="Context">上下文</param> /// <param name="actband">我方银行账户</param> /// <param name="actband">对方银行账户</param> /// <param name="actband">金额</param> /// <param name="furinfo">用途</param> /// <param name="F_VTR_Bocflag">是否跨行</param> /// <param name="token">令牌</param> public string BtoCPay(Context ctx, JNBandPara actband, JNBandPara toband, double payamount, string furinfo, int F_VTR_Bocflag, string token) { DynamicObject bandID = getbandobject(ctx, actband); DynamicObject urlobject = getbandUrl(bandID); #region //判断是否是启用的帐套 string database = ctx.DataCenterName; string F_VTR_DataBase = Convert.ToString(urlobject["F_VTR_DataBase"]); if (database != F_VTR_DataBase) { return(""); } #endregion string bandNUMBER = Convert.ToString(bandID["NUMBER"]); string ACNTBRANCHNUMBER = Convert.ToString(bandID["ACNTBRANCHNUMBER"]); //string token = checkin(ctx,actband); string url = Convert.ToString(urlobject["F_JN_ServiceURL"]); string F_JNtermid = Convert.ToString(urlobject["F_JNtermid"]); string F_JNCustid = Convert.ToString(urlobject["F_JNCustid"]); string F_JNCusopr = Convert.ToString(urlobject["F_JNCusopr"]); DateTime currentTime = new System.DateTime(); currentTime = TimeServiceHelper.GetSystemDateTime(ctx); string insid = string.Format("{0:yyyyMMddHHmmssff}", currentTime);//指令ID //我方银行账号 string frbandnum = actband.bandnum; string frcn = actband.cn; string frname = actband.name; //对方银行账号 string tobandnum = toband.bandnum; string tocn = toband.cn; string toname = toband.name; string toadd = toband.addr; string tobandname = toband.bandname; string payamountstr = Convert.ToString(payamount); string F_JNcustdt = string.Format("{0:yyyyMMdd}", currentTime); //F_JNcustdt = "20170330"; string xmlMsg = string.Format(@"<?xml version=""1.0"" encoding=""UTF-8""?> <bocb2e version=""100"" security=""true"" lang=""chs""> <head> <termid>{0}</termid> <trnid>20060704001</trnid> <custid>{1}</custid> <cusopr>{2}</cusopr> <trncod>b2e0061</trncod> <token>{3}</token> </head> <trans> <trn-b2e0061-rq> <transtype>1</transtype> <b2e0061-rq> <insid>{4}</insid> <obssid></obssid> <fractn> <fribkn>{5}</fribkn> <actacn>{6}</actacn> <actnam>{7}</actnam> </fractn> <toactn> <toibkn>{8}</toibkn> <actacn>{9}</actacn> <toname>{10}</toname> <toaddr>{11}</toaddr> <tobknm>{12}</tobknm> </toactn> <trnamt>{13}</trnamt> <trncur>001</trncur> <priolv>0</priolv> <cuspriolv>0</cuspriolv> <furinfo>{14}</furinfo> <trfdate>{15}</trfdate> <trftime></trftime> <comacn></comacn> <bocflag>{16}</bocflag> </b2e0061-rq> </trn-b2e0061-rq> </trans> </bocb2e> ", F_JNtermid, F_JNCustid, F_JNCusopr, token, insid, frbandnum, frcn, frname, tobandnum, tocn, toname, toadd, tobandname, payamountstr, furinfo, F_JNcustdt, F_VTR_Bocflag); string Xmldata = BandPost(url, xmlMsg, 600); XmlDocument xx = new XmlDocument(); xx.LoadXml(Xmldata); //加载xml XmlNode rootnote = xx.SelectSingleNode("bocb2e"); //指向根节点 XmlNode transnote = rootnote.SelectSingleNode("trans"); XmlNode b2enote = transnote.SelectSingleNode("trn-b2e0061-rs"); if (b2enote == null) { return(""); } XmlNode statusnote = b2enote.SelectSingleNode("b2e0061-rs"); XmlNode obssidnote = statusnote.SelectSingleNode("obssid"); //XmlNode rspnote = statusnote.SelectSingleNode("rspmsg"); string rspmsg = obssidnote.InnerText; //checkout(ctx,actband); return(rspmsg);//返回银行流水号 }
/// <summary> /// 附件上传至本地临时目录后的回调函数 /// PlugIn.Args.MobileUploadEventArgs /// Kingdee.BOS.Mobile.PlugIn.Args.MobileUploadEventArgs /// </summary> /// <param name="e">PlugIn.Args.MobileUploadEventArgs e</param> public override void AfterMobileUpload(Kingdee.BOS.Mobile.PlugIn.Args.MobileUploadEventArgs e) { // 获取服务器临时目录 HttpContext.Current.Request.PhysicalApplicationPath + KeyConst.TEMPFILEPATH; string tempDirPath = HttpContext.Current.Request.PhysicalApplicationPath + KeyConst.TEMPFILEPATH; // 获取附件表的元数据类 var formMetadata = (FormMetadata)MetaDataServiceHelper.Load(this.Context, FormIdConst.BOS_Attachment); //TY:以下是取值 by 田杨 //string _BillType = this.View.BillBusinessInfo.GetForm().Id; string _BillType = this.View.BillView.BusinessInfo.GetForm().Id; string _BillNo = this.View.BillModel.DataObject["BillNo"].ToString(); //原始BOS单据【绑定实体属性】 string _InterID = this.View.BillModel.DataObject["Id"].ToString(); /* 示例代码 从5.0 * //_BillType = this.View.BillView.BusinessInfo.GetForm().Id; * //_BillNo = this.View.BillModel.DataObject["BillNo"]; * //dyn["BillStatus"] = this.View.BillModel.DataObject["DocumentStatus"]; * //_InterID = this.View.BillModel.DataObject["Id"]; */ List <DynamicObject> dynList = new List <DynamicObject>(); StringBuilder sb = new StringBuilder(); foreach (FiledUploadEntity file in e.FileNameArray) { // 检查文件是否成功上传到临时目录 if (!file.IsSuccess) { continue; } // 检查文件是否存在于临时目录 var fileName = System.IO.Path.Combine(tempDirPath, file.FileName); if (!System.IO.File.Exists(fileName)) { continue; } /** * 此处几个关键属性解读: * 1. BillType 关联的模型的FormId * 2. BillNo 关联的单据编号,用于确定此附件是属于哪张单据 * 3. InterID 关联的单据/基础资料ID,附件列表就是根据这个ID进行加载 * 4. EntryInterID 关联的单据体ID,这里我们只演示单据头,所以固定设置为-1 * 5. AttachmentSize 系统统一按照KB单位进行显示,所以需要除以1024 * 6. FileStorage 文件存储类型,0为数据库,1为文件服务,2为亚马逊云,3为金蝶云 */ var dataBuff = System.IO.File.ReadAllBytes(fileName); var dyn = new DynamicObject(formMetadata.BusinessInfo.GetDynamicObjectType()); if (submitType != 0) { // 将数据上传至文件服务器,并返回上传结果 var result = this.UploadAttachment(file.FileName, dataBuff); if (!result.Success) { // 上传失败,收集失败信息 sb.AppendLine(string.Format("附件:{0},上传失败:{1}", file.FileName, result.Message)); continue; } // 通过这个FileId就可以从文件服务器下载到对应的附件 dyn["FileId"] = result.FileId; } else { // 数据库的方式是直接保存附件数据 dyn["Attachment"] = dataBuff; } /* 示例代码 从6.1 * //// 此处我们不绑定到特定的单据,为了简化示例,只实现单纯的文件上传与下载 * //dyn["BillType"] = "Test_MOB_Accessory"; // 虚拟FormId * //dyn["BillNo"] = "A00001"; // 虚拟的单据编号 * //dyn["InterID"] = "D00001"; // 虚拟的InterId,这个ID将作为我们下载的识别标识 * * 示例代码 从5.0 * // 而实际插件开发可以从移动单据中获取到这些数据 * //dyn["BillType"] = this.View.BillView.BusinessInfo.GetForm().Id; * //dyn["BillNo"] = this.View.BillModel.DataObject["BillNo"]; * ////dyn["BillStatus"] = this.View.BillModel.DataObject["DocumentStatus"]; * //dyn["InterID"] = this.View.BillModel.DataObject["Id"]; */ dyn["BillType"] = _BillType; dyn["BillNo"] = _BillNo; dyn["InterID"] = _InterID; // 上传文件服务器成功后才加入列表 dyn["AttachmentName"] = file.OldName; dyn["AttachmentSize"] = Math.Round(dataBuff.Length / 1024.0, 2); dyn["EntryInterID"] = -1;// 参照属性解读 dyn["CreateMen_Id"] = Convert.ToInt32(this.Context.UserId); dyn["CreateMen"] = GetUser(this.Context.UserId.ToString()); dyn["ModifyTime"] = dyn["CreateTime"] = TimeServiceHelper.GetSystemDateTime(this.Context); dyn["ExtName"] = System.IO.Path.GetExtension(file.OldName); dyn["FileStorage"] = submitType.ToString(); dyn["EntryKey"] = " "; dyn["IsAllowDownLoad"] = 0;//参考PC端,历史原因 0 允许下载,1 不允许下载 dynList.Add(dyn); } if (dynList.Count > 0) { // 所有数据加载完成后再一次性保存全部 BusinessDataServiceHelper.Save(this.Context, dynList.ToArray()); sb.AppendLine(); sb.AppendLine(string.Join(",", dynList.Select(dyn => dyn["AttachmentName"].ToString()).ToArray()) + ",上传成功"); } //写入上传日志 增加判定 FLog不存在不写入 if (this.Model.BillBusinessInfo.GetElement("FLog") != null) { this.Model.SetValue("FLog", sb.ToString()); } base.AfterMobileUpload(e); this.View.ShowMessage("提交成功,是否退出页面?", MessageBoxOptions.YesNo, new Action <MessageBoxResult>((result) => { if (result == MessageBoxResult.Yes) { //关闭页面 //JSONObject arg = new JSONObject(); //arg.Put("pageId", this.View.PageId); //this.View.AddAction("closeWebViewWithXT", arg); this.View.Close(); } }) ); }
private string SubmitWorkflow(Context ctx, string formId, string pKValue, string receiverName, string actionResult, string disposition, bool isApprovalFlow) { string reason = ""; DataSet ds = DBUtils.ExecuteDataSet(ctx, @"select b.FASSIGNID,b.FAPPROVALASSIGNID,a.FACTINSTID,a.FRECEIVERNAMES from t_wf_assign a join T_WF_APPROVALASSIGN b on a.fassignid=b.fassignid where b.Fobjecttypeid=@FormID and b.Fkeyvalue=@pKValue and a.FSTATUS=0", new List <SqlParam> { new SqlParam("@FormID", DbType.String, formId), new SqlParam("@pKValue", DbType.String, pKValue) }); DataRow row = ds.Tables[0].Rows.Cast <DataRow>().FirstOrDefault(dr => dr["FRECEIVERNAMES"].ToString().Split(',').Any(r => r == receiverName)); if (row == null) { reason = "未找到待办任务"; return(reason); } string assignId = row["FASSIGNID"].ToString(); string approvalAssignId = row["FAPPROVALASSIGNID"].ToString(); string _approvalItemId = AssignmentServiceHelper.OpenApprovalItem(ctx, ctx.UserId, assignId, false); FormMetadata formMetadata = MetaDataServiceHelper.GetFormMetaData(ctx, formId); DynamicObject ObjData = BusinessDataServiceHelper.LoadSingle(ctx, pKValue, formMetadata.BusinessInfo.GetDynamicObjectType()); BusinessInfo businessInfo = formMetadata.BusinessInfo; var _approvalItem = AssignmentServiceHelper.GetApprovalItemById(ctx, _approvalItemId); if (_approvalItem == null) { reason = "待办任务所在的流程实例不在运行中,不能进行处理!"; return(reason); } _approvalItem.ObjData = ObjData; _approvalItem.ReceiverPostId = 0; _approvalItem.ActionResult = actionResult; _approvalItem.Disposition = disposition.ToString(); AssignResult assignResult = _approvalItem.Actions != null?_approvalItem.Actions.FirstOrDefault(i => i.Id == actionResult) : null; AssignResultApprovalType approvalType = assignResult != null ? assignResult.ApprovalType : AssignResultApprovalType.None; _approvalItem.ActionResultType = approvalType; _approvalItem.Status = ApprovalItemStatus.Completed; DateTime timeNow = TimeServiceHelper.GetSystemDateTime(ctx); _approvalItem.CompletedTime = timeNow; ObjectActivityInstance _activityInstance = AssignmentServiceHelper.ConvertActivityModel( ctx, businessInfo, approvalAssignId, _approvalItem); var option = OperateOption.Create(); if (isApprovalFlow) { ApprovalAssignmentContext assignCtx = new ApprovalAssignmentContext() { ApprovalItems = new List <ApprovalItem>() { _approvalItem }, Info = businessInfo, Option = option }; assignCtx.NextActHandler = null; assignCtx.RejectReturn = false; assignCtx.ActivityInstance = _activityInstance; if (actionResult == AssignResultApprovalType.Reject.ToString()) { var _policy = AssignmentServiceHelper.GetApprovalAssignByAssignId(ctx, assignId); var nextHandleWrapper = new Kingdee.BOS.ApprovalFlow.PlugIns.Mobile.MobNextHandleWrapper(assignId, ctx, _policy); assignCtx.Target = nextHandleWrapper.RejectActivityModel.ActivityId; } ApprovalAssignmentServiceHelper.SubmitApprovalItem(ctx, assignCtx); reason = ""; return(reason); } else { ApprovalAssignmentContext assignCtx = new ApprovalAssignmentContext() { ApprovalItems = new List <ApprovalItem>() { _approvalItem }, Info = businessInfo, Option = option }; assignCtx.NextActHandler = null; assignCtx.RejectReturn = false; assignCtx.ActivityInstance = _activityInstance; ApprovalAssignmentServiceHelper.SubmitApprovalItem(ctx, assignCtx); reason = ""; return(reason); } //if (actionResult == AssignResultApprovalType.Reject.ToString()) //{ // string actInstId = row["FACTINSTID"].ToString(); // Kingdee.BOS.Workflow.App.Core.ProcInstService procInstService = new Kingdee.BOS.Workflow.App.Core.ProcInstService(); // var rejectActivityIds = procInstService.GetBackActInstList(ctx, actInstId, true).Select(r => r.ActivityId); // if (!rejectActivityIds.Any()) // { // reason = "无驳回节点"; // return reason; // } // assignCtx.Target = rejectActivityIds.FirstOrDefault(); //} }