using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kingdee.BOS;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Core.SqlBuilder;
using Kingdee.BOS.Core.Metadata;
using System.ComponentModel;
using Kingdee.BOS.Core.Bill;
namespace Quantities.BusinessPlugIn
{
[Description("工程量变更申请单和工程量调整单、直接成本调整单关联")]
public class AplyFor : AbstractBillPlugIn
{
/// <summary>
/// 初始化,对其他界面传来的参数进行处理,对控件某些属性进行处理
/// 这里不宜对数据DataModel进行处理
/// </summary>
/// <param name="e"></param>
public override void OnInitialize(InitializeEventArgs e)
{
}
/// <summary>
/// 新建单据加载数据完成之后,需要处理的功能
/// </summary>
/// <param name="e"></param>
public override void AfterCreateNewData(EventArgs e)
{
}
/// <summary>
/// 修改,查看单据加载已有数据之后,需要处理的功能
/// </summary>
/// <param name="e"></param>
public override void AfterLoadData(EventArgs e)
{
//获取工程量变更申请单单据内码
long billFid = Convert.ToInt64(this.View.Model.GetPKValue());
//获取工程量变更申请单单据编号
string fbillno = Convert.ToString(this.View.Model.GetValue("FBILLNO"));
//GetQueryDatas()获取直接成本调整单的变更申请单号和单据编码
//获取单变更申请单等于当前单据编码的单据编码
var adjustNo11 = GetQueryDatas().Where(s => Convert.ToString(s["FBGSQDH"]) == fbillno);
try
{
string adjustNo = GetQueryDatas().Where(s => Convert.ToString(s["FBGSQDH"]) == fbillno).Select(s => s["FBILLNO"]).FirstOrDefault().ToString(); //.Select(s =>s["FBILLNO"]).FirstOrDefault().ToString();
//获取工程量调整单对应的内码
this.View.Model.SetValue("F_PAEZ_Text1", adjustNo);
}
catch
{
}
try
{
string directNo = GetQueryCost().Where(s => Convert.ToString(s["FCOSTNO1"]) == fbillno).Select(s => s["FBILLNO"]).FirstOrDefault().ToString();
this.View.Model.SetValue("F_PAEZ_Text", directNo);
}
catch
{
}
//自动保存:非表单插件用
//BusinessDataServiceHelper.Save()
//调用自动保存:表单插件用
this.View.InvokeFormOperation("save");
}
/// <summary>
/// queryservice取数方案,通过业务对象来获取数据,推荐使用
/// </summary>
/// <returns></returns>
public DynamicObjectCollection GetQueryDatas()
{
QueryBuilderParemeter paramCatalog = new QueryBuilderParemeter()
{
FormId = "PAEZ_YNCS_GCBGSQD",//取数的业务对象:工程量调整单
FilterClauseWihtKey = "",//过滤条件,通过业务对象的字段Key拼装过滤条件
//FBGSQDH:变更申请单号
SelectItems = SelectorItemInfo.CreateItems("FBILLNO", "FBGSQDH", "FID"),//要筛选的字段【业务对象的字段Key】,可以多个,如果要取主键,使用主键名
};
DynamicObjectCollection dyDatas = Kingdee.BOS.ServiceHelper.QueryServiceHelper.GetDynamicObjectCollection(this.Context, paramCatalog);
return dyDatas;
}
public DynamicObjectCollection GetQueryCost()
{
QueryBuilderParemeter paramCatalog = new QueryBuilderParemeter()
{
FormId = "PAEZ_YNCS_DirectCostAdjust",//取数的业务对象:直接成本调整单
FilterClauseWihtKey = "",//过滤条件,通过业务对象的字段Key拼装过滤条件
//FCOSTNO:直接成本调整单单号
SelectItems = SelectorItemInfo.CreateItems("FBILLNO", "FCOSTNO1", "FID"),//要筛选的字段【业务对象的字段Key】,可以多个,如果要取主键,使用主键名
};
DynamicObjectCollection dyDatas = Kingdee.BOS.ServiceHelper.QueryServiceHelper.GetDynamicObjectCollection(this.Context, paramCatalog);
return dyDatas;
}
public override void ButtonClick(ButtonClickEventArgs e)
{
base.ButtonClick(e);
string fbillno = Convert.ToString(this.View.Model.GetValue("FBILLNO"));
//工程量调整单对应的内码
long adjustId = Convert.ToInt64(GetQueryDatas().Where(s => Convert.ToString(s["FBGSQDH"]) == fbillno).Select(s => s["FID"]).FirstOrDefault()); //.Select(s =>s["FBILLNO"]).FirstOrDefault().ToString();
long directId = Convert.ToInt64(GetQueryCost().Where(s => Convert.ToString(s["FCOSTNO1"]) == fbillno).Select(s => s["FID"]).FirstOrDefault());
switch (e.Key.ToUpperInvariant())
{
//case "SAVE": 表单定义的事件都可以在这里执行,需要通过事件的代码[大写]区分不同事件
//break;
case "F_PAEZ_BUTTON":
BillShowParameter parameter = new BillShowParameter();
parameter.Status = OperationStatus.EDIT;
parameter.FormId = "PAEZ_YNCS_DirectCostAdjust";//直接成本调整单
parameter.PKey = directId.ToString();
parameter.OpenStyle.ShowType = Kingdee.BOS.Core.DynamicForm.ShowType.MainNewTabPage;//打开方式,到主界面一个新的页签
//param.ParentPageId = this.View.PageId;//指定ParentPageId,可以实现打开的界面直接拿到父界面的数据 如this.View.ParentFormView.Model.DataObject
this.View.ShowForm(parameter);
break;
case "F_PAEZ_BUTTONADJUST":
BillShowParameter param = new BillShowParameter();
param.Status = OperationStatus.EDIT;
param.FormId = "PAEZ_YNCS_GCBGSQD";//工程量调整单
param.PKey = adjustId.ToString();
param.OpenStyle.ShowType = Kingdee.BOS.Core.DynamicForm.ShowType.MainNewTabPage;//打开方式,到主界面一个新的页签
//param.ParentPageId = this.View.PageId;//指定ParentPageId,可以实现打开的界面直接拿到父界面的数据 如this.View.ParentFormView.Model.DataObject
this.View.ShowForm(param);
break;
default:
break;
}
}
/// <summary>
/// 数据加载之后,需要处理的功能,这里主要对界面样式进行处理,尽量不要对Datamodel进行处理
/// </summary>
/// <param name="e"></param>
public override void AfterBindData(EventArgs e)
{
}
/// <summary>
/// 在根据编码检索数据之前调用;
/// 通过重载本事件,可以设置必要的过滤条件,以限定检索范围;
/// 还可以控制当前过滤是否启用组织隔离,数据状态隔离
/// </summary>
/// <param name="e"></param>
public override void BeforeSetItemValueByNumber(BeforeSetItemValueByNumberArgs e)
{
switch (e.BaseDataField.Key.ToUpperInvariant())
{
//case "FXXX":通过字段的Key[大写]来区分不同的基础资料
//e.Filter = "FXXX= AND fxxy=";过滤的字段使用对应基础资料的字段的Key,支持ksql语法
//break;
case "":
break;
default:
break;
}
}
/// <summary>
/// 显示基础资料列表之前调用
/// 通过重载本事件,可以设置必要的过滤条件,以限定检索范围;
/// </summary>
/// <param name="e"></param>
public override void BeforeF7Select(BeforeF7SelectEventArgs e)
{
switch (e.FieldKey.ToUpperInvariant())
{
//case "FXXX":通过字段的Key[大写]来区分不同的基础资料
// e.ListFilterParameter.Filter = "FXXX= AND fxxy=";过滤的字段使用对应基础资料的字段的Key,支持ksql语法
//break;
case "":
break;
default:
break;
}
}
/// <summary>
/// 界面数据发生变化之前,需要处理的功能
/// </summary>
/// <param name="e"></param>
public override void BeforeUpdateValue(BeforeUpdateValueEventArgs e)
{
switch (e.Key.ToUpperInvariant())
{
//case "FXXX":通过字段的Key[大写]来区分不同的控件的数据变化功能,如果要阻止该次变化,可以用e.Cancel = true;
// e.Cancel = true;
// break;
case "":
break;
default:
break;
}
}
/// <summary>
/// 界面数据发生变化之后,需要处理的功能
/// </summary>
/// <param name="e"></param>
public override void DataChanged(DataChangedEventArgs e)
{
switch (e.Field.Key.ToUpperInvariant())
{
case "":
break;
default:
break;
}
}
/// <summary>
/// 单据持有事件发生前需要完成的功能
/// </summary>
/// <param name="e"></param>
public override void BeforeDoOperation(BeforeDoOperationEventArgs e)
{
switch (e.Operation.FormOperation.Operation.ToUpperInvariant())
{
//case "SAVE": 表单定义的事件都可以在这里执行,需要通过事件的代码[大写]区分不同事件
//break;
case "":
break;
default:
break;
}
}
/// <summary>
/// 单据持有事件发生后需要完成的功能
/// </summary>
/// <param name="e"></param>
public override void AfterDoOperation(AfterDoOperationEventArgs e)
{
switch (e.Operation.Operation.ToUpperInvariant())
{
//case "SAVE": 表单定义的事件都可以在这里执行,需要通过事件的代码[大写]区分不同事件
//break;
case "":
break;
default:
break;
}
}
}
}
//通过插件实现,在插件中捕获按钮点击事件,事件中通过代码打开一个单据,参考如下写法:
//BillShowParameter parameter = new BillShowParameter();
//parameter.Status=OperationStatus.EDIT;
//parameter.FormId="你要打开单据的ID";
//this.View.ShowFrom(parameter);
//移动BOS开发技巧 -- 如何打开一个设计好的移动表单或者单据
//在K/3 Cloud的移动BOS,我们可以看到在设计器中我们区分为移动表单核移动单据
//下面我们就来看一下, 我们如何用代码打开他们, 我们以一个简单的场景为例:
// 我们在当前页面的一个按钮点击的时候,打开另外一个页面(移动表单和移动单据列表)
// 以下是打开移动表单的写法,如果要打开移动单据列表,只需要把 MobileShowParameter 换成 MobileListShowParameter即可
// MobileShowParameter param = new MobileShowParameter(); param.FormId = "你想打开的formid";
// //也可以添加自定义的参数
// param.CustomParams.Add("key名", “value”);
// //如果需要支持回调参考以下写法
// param.SyncCallBackAction = false;
// this.View.ShowForm(param, new Action<FormResult>((res) => {
// this.View.Refresh(); //刷新当前页面
// }));
//打开一个新增页面:网址https://www.cnblogs.com/zfangfang/p/9983109.html
//BillShowParameter parameter = new BillShowParameter();
////parameter.Status = OperationStatus.EDIT;
//parameter.FormId = "PAEZ_YNCS_DirectCostAdjust";
// parameter.OpenStyle.ShowType = Kingdee.BOS.Core.DynamicForm.ShowType.MainNewTabPage;//打开方式,到主界面一个新的页签
// //param.ParentPageId = this.View.PageId;//指定ParentPageId,可以实现打开的界面直接拿到父界面的数据 如this.View.ParentFormView.Model.DataObject
// this.View.ShowForm(parameter);
//K3/Cloud 用插件打开一张已存在的单据
//BillShowParameter billpara = new BillShowParameter();
//billpara.FormId = "SAL_SaleOrder";//单据唯一标识
////修改状态打开
//billpara.Status = OperationStatus.EDIT;
////打开已有的单据的内码
//billpara.PKey = "100003";
//this.View.ShowForm(billpara);