#使用技巧# K3Cloud BOS 设计 Python & C# 表单、列表插件查看单据
@[TOC](K3Cloud BOS 设计 Python & C# 表单、列表插件查看单据)
> > ***强调:*** ==`C#`中使用`this`关键字的,在C#语法中,是可以省略的,但是在 `Python`中,`this`一定要加上!!!==
> >
>
>**知识点:**
> 1. 在表单中,查看源单、基础资料、或者其他单据
> 2. 在表单分录中,基础资料显示链接,只有在列表中可以显示链接
> 3. 在表单分录中,文本显示链接实现 [官方文章有说明](https://wenku.my7c.com/article/89775201851601408?productLineId=1&isKnowledge=2)
>
# 1.场景
> 1. 不喜欢用 【上查】【下查】功能,比较麻烦
> 2. 二开单据中,使用文本存储单据编号、物料编码等
> 3. 在表单分录中,物料无法直接查看内容(只能在列表点开链接、或者编辑时打开链接)
> 4. 在列表中,使用文本存储单据编号、物料编码等
# 2.方案
==方案中,我写的formId不符合开发规则,大家不要学我哈==
> 1. 单据头中:文本字段,附近增加按钮,可以点击查看单据或者资料信息
> 2. 单据体中:使用双击事件,查看信息
> 3. 列表界面:设置文本显示链接,点击链接查看表单
## 1.单据头,增加按钮 打开表单
![image.webp](/download/0100f5245cb3366d4e09acaedb854e57ef84.webp)![Alt text](./1669281009283.webp)
### C# 实现
```csharp
/// <summary>
/// 查看表单
/// </summary>
/// <param name="view">this.View</param>
/// <param name="form_id">单据唯一标识</param>
/// <param name="pkId">单据主键Id值</param>
public static void Show_BillFrm(IDynamicFormView view, string form_id, string pkId)
{
var showParam = new BillShowParameter()
{
Context = view.Context,
FormId = form_id,
Status = OperationStatus.VIEW, // VIEW 查看模式 EDIT 编辑模式
PermissionItemId = PermissionConst.View,
PKey = pkId,
PageId = Guid.NewGuid().ToString(),
ParentPageId = view.PageId
};
view.ShowForm(showParam);
}
public override void ButtonClick(ButtonClickEventArgs e)
{
base.ButtonClick(e);
if (e.Key == "F_VBMP_BUTTON")// F_VBMP_BUTTON,按钮标识
{
var billNo = this.Model.GetValue("FJFBILLNO");
if (!billNo.IsNullOrEmptyOrWhiteSpace())
{
var formId = "k50abce840fe94c8a853cb6787c071d99";// 单据标识,我这写的不标准。。
var requisitionMetadata = (FormMetadata)MetaDataServiceHelper.Load(this.Context, formId);
var select_Infos = new List<SelectorItemInfo>();
select_Infos.Add(new SelectorItemInfo("FID"));//
var oqFilter = OQLFilter.CreateHeadEntityFilter(string.Format("FBillNo = '{0}'", billNo));// 过滤器,按 sql 语法即可
var objs = BusinessDataServiceHelper.Load(this.Context, requisitionMetadata.BusinessInfo, select_Infos,oqFilter);
if (objs != null && objs.Count() > 0)
{
var pkId = objs[0]["Id"].ToString();
Show_BillFrm(this.View, formId, pkId.ToString());
}
}
}
}
```
### Python 实现
```Python
def Show_BillFrm(form_id, pkId):
showParam = BillShowParameter() # 打开表单
showParam.Context = this.Context
showParam.FormId = form_id
showParam.Status = OperationStatus.VIEW # VIEW 查看模式 EDIT 编辑模式
showParam.PKey = pkId
showParam.PageId = Guid.NewGuid().ToString()
showParam.ParentPageId = this.View.PageId
this.View.ShowForm(showParam)
def ButtonClick(e):
if (e.Key == "F_VBMP_BUTTON"):
billNo = this.Model.GetValue('FJFBILLNO')
if billNo != '':
formId = "k50abce840fe94c8a853cb6787c071d99"
requisitionMetadata = MetaDataServiceHelper.Load(this.Context, formId)
select_Infos = List[SelectorItemInfo]()
select_Infos.Add(SelectorItemInfo("FID"))
oqFilter = OQLFilter.CreateHeadEntityFilter("FBillNo='{0}'".format(billNo))
objs = BusinessDataServiceHelper.Load(this.Context, requisitionMetadata.BusinessInfo, select_Infos, oqFilter)
pkId = objs[0]["Id"].ToString()
Show_BillFrm(formId, pkId)
```
## 2.单据体,明细增加双击 打开表单
> 1. 基础资料,在表单分录中,无法显示链接
### C# 实现
```csharp
public override void EntityRowDoubleClick(EntityRowClickEventArgs e)
{
base.EntityRowDoubleClick(e);
if (Model.OpenParameter.Status != OperationStatus.EDIT) // 根据单据状态 设置允许双击
{
if (e.ColKey == "FMATID")
{
var formId = "PLM_PDM_1010000000000000000";
var requisitionMetadata = (FormMetadata)MetaDataServiceHelper.Load(this.Context, formId);
var pkId = (this.Model.GetValue(e.ColKey, 0) as Kingdee.BOS.Orm.DataEntity.DynamicObject)["Id"];// 获取基础资料Id
Show_BillFrm(this.View, formId, pkId.ToString());
}
}
}
```
### Python 实现
``` python
def EntityRowDoubleClick(e):
if (e.ColKey == "FMATID"):
formId = "PLM_PDM_1010000000000000000";
requisitionMetadata = MetaDataServiceHelper.Load(this.Context, formId)
mt = this.Model.GetValue(e.ColKey, e.Row)
if mt is not None:
pkId = mt["Id"]
Show_BillFrm(formId, pkId.ToString())
```
## 3.列表界面 点击查看表单
### C# 实现
```csharp
public override void EntryButtonCellClick(EntryButtonCellClickEventArgs e)
{
base.EntryButtonCellClick(e);
if (e.FieldKey == "FJFBILLNO")
{
var formId = "k50abce840fe94c8a853cb6787c071d99";// 单据唯一标识
var metadata = (FormMetadata)MetaDataServiceHelper.Load(this.Context, formId);
var billNo = ListView.SelectedRowsInfo[0].DataRow[e.FieldKey].ToString();
var objs = BusinessDataServiceHelper.Load(this.Context, metadata.BusinessInfo,
new List<SelectorItemInfo>(new[] { new SelectorItemInfo("FID") }),
OQLFilter.CreateHeadEntityFilter($"FBillNo='{billNo}'"));
if (objs == null || objs.Length == 0)
{
return;
}
var pkId = objs[0]["Id"].ToString();
Show_BillFrm(this.View, formId, pkId);
}
}
```
### Python 实现
```python
def EntryButtonCellClick(e):
if (e.FieldKey == "FJFBILLNO"):
formId = "k50abce840fe94c8a853cb6787c071d99";
requisitionMetadata = MetaDataServiceHelper.Load(this.Context, formId);
billNo = this.ListView.SelectedRowsInfo[0].DataRow[e.FieldKey].ToString();
select_Infos = List[SelectorItemInfo]()
select_Infos.Add(SelectorItemInfo("FID"))
qq_filter = OQLFilter.CreateHeadEntityFilter("FBillNo='{0}'".format(billNo))
objs = BusinessDataServiceHelper.Load(this.Context, requisitionMetadata.BusinessInfo, select_Infos, qq_filter);
pkId = objs[0]["Id"].ToString()
Show_BillFrm(formId, pkId)
```
> **本文知识点:**
> 根据编号,获取基础资料包、或者单据包,
> ==本文方案 是已知编码,根据编码查看单据,如果有FID,就无需根据编码获取数据包,直接使用FID和FormId即可==
> ```python
> requisitionMetadata = MetaDataServiceHelper.Load(this.Context, formId);
> billNo = this.ListView.SelectedRowsInfo[0].DataRow[e.FieldKey].ToString();
> select_Infos = List[SelectorItemInfo]()
> select_Infos.Add(SelectorItemInfo("FID"))
> qq_filter = OQLFilter.CreateHeadEntityFilter("FBillNo='{0}'".format(billNo))
> objs = BusinessDataServiceHelper.Load(this.Context, requisitionMetadata.BusinessInfo, select_Infos, qq_filter);
> ```
Show_BillFrm 大神这个是个类还是个啥,需要引用?
MetaDataServiceHelper 和BusinessDataServiceHelper 这个报错了怎么办
明天研究看,这个 可以用的吗
感谢大神
#使用技巧# K3Cloud BOS 设计 Python & C# 表单、列表插件查看单据
@[TOC](K3Cloud BOS 设计 Python & C# 表单、列表插件查看单据)> > ***强调:*** ==`C#`中使用`this`关键字的,在C#语法中,...
点击下载文档
本文2024-09-16 18:34:38发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-23050.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章