
【场景】选单界面 默认过滤方案设置
目前系统不支持针对选单预设企业过滤方案
【原因】不同的业务对象,关联源单的实体不一样;
如采购订单,有些单据是跟明细关联,有些跟付款计划关联,不便于设置同一的选单过滤方案
【变通方案案例】
(a)针对选单对象,由管理员设置过滤方案,并共享给所有用户

(b)准备表结构,存储源单、目标单、单据类型和预设方案id
```ksql
IF NOT EXISTS (SELECT 1 FROM KSQL_USERTABLES WHERE KSQL_TABNAME = 'T_Custom_DrawDefaultScheme')
CREATE TABLE T_Custom_DrawDefaultScheme (
FID VARCHAR(36) NOT NULL,
FSrcFormId VARCHAR(36) DEFAULT ' ' NOT NULL,
FTgtFormId VARCHAR(36) DEFAULT ' ' NOT NULL,
FBillTypeId VARCHAR(36) DEFAULT ' ' NOT NULL,
FSchemeId VARCHAR(36) DEFAULT ' ' NOT NULL
);
EXEC P_ALTERPK 'PK_Custom_DrawDefaultScheme', 'T_Custom_DrawDefaultScheme', 'FID', '1'
IF NOT EXISTS (SELECT 1 FROM KSQL_INDEXES WHERE KSQL_INDNAME = 'IDX_Custom_DrawDefaultScheme')
CREATE INDEX IDX_Custom_DrawDefaultScheme ON T_Custom_DrawDefaultScheme ( FSrcFormId, FTgtFormId, FBillTypeId);
```
(c)通过表单插件,干预单据转换界面BOS_ConvertOpForm,干预源单修改时的值更新,设置过滤方案的值

```csharp
using Kingdee.BOS;
using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DynamicFormPlugIn.BillConvert
{
[Kingdee.BOS.Util.HotUpdate]
[System.ComponentModel.Description("选单界面, 过滤方案设置")]
public class FormPlugIn_DrawSetDefaultSchemePlugIn : AbstractDynamicFormPlugIn
{
/*
* 选单界面,根据源单、目标单、目标单据类型,自动跳转到设置的过滤方案上
*
* 表结构 ksql
IF NOT EXISTS (SELECT 1 FROM KSQL_USERTABLES WHERE KSQL_TABNAME = 'T_Custom_DrawDefaultScheme')
CREATE TABLE T_Custom_DrawDefaultScheme (
FID VARCHAR(36) NOT NULL,
FSrcFormId VARCHAR(36) DEFAULT ' ' NOT NULL,
FTgtFormId VARCHAR(36) DEFAULT ' ' NOT NULL,
FBillTypeId VARCHAR(36) DEFAULT ' ' NOT NULL,
FSchemeId VARCHAR(36) DEFAULT ' ' NOT NULL
);
EXEC P_ALTERPK 'PK_Custom_DrawDefaultScheme', 'T_Custom_DrawDefaultScheme', 'FID', '1'
IF NOT EXISTS (SELECT 1 FROM KSQL_INDEXES WHERE KSQL_INDNAME = 'IDX_Custom_DrawDefaultScheme')
CREATE INDEX IDX_Custom_DrawDefaultScheme ON T_Custom_DrawDefaultScheme ( FSrcFormId, FTgtFormId, FBillTypeId);
*
*/
private bool IsDraw = false;
private string BillTypeId = null;
private string TargetFormId = null;
/// <summary>
/// 初始化事件
/// </summary>
/// <param name="e"></param>
public override void OnInitialize(InitializeEventArgs e)
{
if (this.View.ParentFormView == null)
return;
var opNumber = this.View.OpenParameter.GetCustomParameter("OperationNumber");
if (opNumber != null && (FormOperationEnum)opNumber == FormOperationEnum.Draw)
{
IsDraw = true;
}
if (!IsDraw)
return;
var billModel = this.View.ParentFormView.Model as IBillModel;
if (billModel == null)
return;
TargetFormId = this.View.ParentFormView.BillBusinessInfo.GetForm().Id;
var billTypeField = this.View.ParentFormView.BillBusinessInfo.GetBillTypeField();
if (billTypeField == null)
return;
var billTypeObj = billModel.GetValue(billTypeField) as Kingdee.BOS.Orm.DataEntity.DynamicObject;
if (billTypeObj != null)
{
BillTypeId = Convert.ToString(billTypeObj[0]);
}
}
/// <summary>
/// 值更新事件
/// </summary>
/// <param name="e"></param>
public override void DataChanged(DataChangedEventArgs e)