Camstar Matrix Setup

本文内容仅做参考并不完全通用,测试环境为OpcenterEXCR2410,其中数据均为演示所用无实际意义

Designer建模

CDOs

1.在NamedDataObject下创建矩阵建模wzmGlueDopingMatrix

2.在wzmGlueDopingMatrix中加入我们需要的字段

3.在wzmGlueDopingMatrixChanges中为ES_SelectionES_SelectionSpecific字段的SelectValuesEx绑定CLF方法wzmGlueDopingSelection

4.接着为SelectionQueryName字段的Current Value Expression填写表达式”wzmGlueDopingSelection”

CLFs

1.在UserFunctions中创建一个新的CLF名为wzmGlueDopingSelection,使用InitQueryParametersEx方法进行参数初始化(注意参数顺序要对应)

Queries

1.在AdvancedQuery中创建一个新的Query名为wzmGlueDopingSelection,其中WHERE中的条件即为该矩阵的匹配条件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
SELECT
NewGlueFamily AS NewGlueFamily
, DopingFamily AS DopingFamily
, Factory AS Factory
, Description AS Description
, Name AS Name
, RN AS RN
FROM
(
SELECT
CASE WHEN DP.wzmNewGlueFamilyId IS NULL THEN NULL ELSE npf.productfamilyname END AS NewGlueFamily
, CASE WHEN DP.wzmDopingFamilyId IS NULL THEN NULL ELSE dpf.productfamilyname END AS DopingFamily
, CASE WHEN DP.wzmFactoryId IS NULL THEN NULL ELSE F.Factoryname END AS Factory
, DP.Description AS Description
, DP.wzmGlueDopingMatrixName AS Name
, CAST(ROW_NUMBER() OVER (ORDER BY CASE WHEN DP.wzmNewGlueFamilyId IS NULL THEN 0 ELSE 1 END DESC
, CASE WHEN DP.wzmDopingFamilyId IS NULL THEN 0 ELSE 1 END DESC
, CASE WHEN DP.wzmFactoryId IS NULL THEN 0 ELSE 1 END DESC) AS INT) RN
FROM
wzmGlueDopingMatrix DP
LEFT JOIN Productfamily npf ON DP.wzmNewGlueFamilyId = npf.productfamilyid
LEFT JOIN Productfamily dpf ON DP.wzmDopingFamilyId = dpf.productfamilyid
LEFT OUTER JOIN Factory F ON F.FactoryId = DP.wzmFactoryId

WHERE
(npf.productfamilyname LIKE ?NewGlueFamilyId OR DP.wzmNewGlueFamilyId IS NULL)
AND (dpf.productfamilyname LIKE ?DopingFamilyId OR DP.wzmDopingFamilyId IS NULL)
AND (F.Factoryname LIKE ?FactoryId OR DP.wzmFactoryId IS NULL)
) DesignerAdvancedQuery
WHERE
RN BETWEEN ?STARTROWNUM AND ?STOPROWNUM

2.接着创建一个新的Query名为wzmGlueDopingSelectionSpecific,区别为这是精准查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
SELECT
NewGlueFamily AS NewGlueFamily
, DopingFamily AS DopingFamily
, Factory AS Factory
, Description AS Description
, Name AS Name
, RN AS RN
FROM
(
SELECT
CASE WHEN DP.wzmNewGlueFamilyId IS NULL THEN NULL ELSE npf.productfamilyname END AS NewGlueFamily
, CASE WHEN DP.wzmDopingFamilyId IS NULL THEN NULL ELSE dpf.productfamilyname END AS DopingFamily
, CASE WHEN DP.wzmFactoryId IS NULL THEN NULL ELSE F.Factoryname END AS Factory
, DP.Description AS Description
, DP.wzmGlueDopingMatrixName AS Name
, CAST(ROW_NUMBER() OVER (ORDER BY CASE WHEN DP.wzmNewGlueFamilyId IS NULL THEN 0 ELSE 1 END DESC
, CASE WHEN DP.wzmDopingFamilyId IS NULL THEN 0 ELSE 1 END DESC
, CASE WHEN DP.wzmFactoryId IS NULL THEN 0 ELSE 1 END DESC) AS INT) RN
FROM
wzmGlueDopingMatrix DP
LEFT JOIN Productfamily npf ON DP.wzmNewGlueFamilyId = npf.productfamilyid
LEFT JOIN Productfamily dpf ON DP.wzmDopingFamilyId = dpf.productfamilyid
LEFT OUTER JOIN Factory F ON F.FactoryId = DP.wzmFactoryId

WHERE
((?NewGlueFamilyId<>'%' and npf.productfamilyname = ?NewGlueFamilyId) or (?NewGlueFamilyId='%' and npf.productfamilyname is null))
AND ((?DopingFamilyId<>'%' and dpf.productfamilyname = ?DopingFamilyId) or (?DopingFamilyId='%' and dpf.productfamilyname is null))
AND ((?FactoryId<>'%' and F.Factoryname = ?FactoryId) or (?FactoryId='%' and F.Factoryname is null))
) DesignerAdvancedQuery
WHERE
RN BETWEEN ?STARTROWNUM AND ?STOPROWNUM

VP页面

1.进入Portal Studio复制一份已有的矩阵VP作为模板,修改SelectionControlsWP属性中的PrimaryServiceTypeTypeName为我们自己的服务名和代码路径

2.修改页面属性中的PrimaryServiceType为我们自己的服务名

3.从左侧进入到我们服务的ObjectChanges中,将筛选条件拖入SelectionControlsWP中,并将控件前缀改为Selection,在CriteriaWP的黄色部分拖入筛选条件,下方拖入匹配到的矩阵信息

CS代码

1.在Camstar.WebPortal.WebPortlets.Shopfloor下编写wzmGlueDopingMatrix代码,注册我们页面上使用到的所有控件,并使其继承cpssetupbmodelingbase(尽量不要对base文件做客制化修改)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/* © 2017 Siemens Product Lifecycle Management Software Inc. */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Text;
using System.Web;
using System.Web.UI;

using Camstar.WCF.ObjectStack;
using Camstar.WCF.Services;
using Camstar.WebPortal.Utilities;
using Camstar.WebPortal.FormsFramework.WebGridControls;
using CWC = Camstar.WebPortal.FormsFramework.WebControls;
using OM = Camstar.WCF.ObjectStack;
using Camstar.WebPortal.FormsFramework;
using Camstar.WebPortal.FormsFramework.Utilities;
using Camstar.WebPortal.Constants;
using Camstar.WebPortal.WCFUtilities;
using Camstar.WebPortal.Personalization;
using Camstar.WebPortal.PortalFramework;

namespace Camstar.WebPortal.WebPortlets.Shopfloor
{
public class wzmGlueDopingMatrix : cpssetupbmodelingbase_QTime
{
protected CWC.NamedObject Selection_wzmFactory { get { return Page.FindCamstarControl("Selection_wzmFactory") as CWC.NamedObject; } }
protected CWC.NamedObject Selection_wzmNewGlueFamily { get { return Page.FindCamstarControl("Selection_wzmNewGlueFamily") as CWC.NamedObject; } }
protected CWC.NamedObject Selection_wzmDopingFamily { get { return Page.FindCamstarControl("Selection_wzmDopingFamily") as CWC.NamedObject; } }

protected CWC.NamedObject ObjectChanges_wzmFactory { get { return Page.FindCamstarControl("ObjectChanges_wzmFactory") as CWC.NamedObject; } }
protected CWC.NamedObject ObjectChanges_wzmNewGlueFamily { get { return Page.FindCamstarControl("ObjectChanges_wzmNewGlueFamily") as CWC.NamedObject; } }
protected CWC.NamedObject ObjectChanges_wzmDopingFamily { get { return Page.FindCamstarControl("ObjectChanges_wzmDopingFamily") as CWC.NamedObject; } }

protected CWC.TextBox ObjectChanges_wzmDopingType { get { return Page.FindCamstarControl("ObjectChanges_wzmDopingType") as CWC.TextBox; } }
protected CWC.TextBox ObjectChanges_wzmLowerDopNum { get { return Page.FindCamstarControl("ObjectChanges_wzmLowerDopNum") as CWC.TextBox; } }
protected CWC.TextBox ObjectChanges_wzmUpperDopNum { get { return Page.FindCamstarControl("ObjectChanges_wzmUpperDopNum") as CWC.TextBox; } }
protected CWC.CheckBox ObjectChanges_wzmIsCanDoping { get { return Page.FindCamstarControl("ObjectChanges_wzmIsCanDoping") as CWC.CheckBox; } }
protected CWC.CheckBox ObjectChanges_wzmIsRataDoping { get { return Page.FindCamstarControl("ObjectChanges_wzmIsRataDoping") as CWC.CheckBox; } }
protected CWC.CheckBox ObjectChanges_wzmIsWeightDoping { get { return Page.FindCamstarControl("ObjectChanges_wzmIsWeightDoping") as CWC.CheckBox; } }

protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
// add the selection WP controls to the control collection
_SelectionControls.Add(Selection_wzmFactory);
_SelectionControls.Add(Selection_wzmNewGlueFamily);
_SelectionControls.Add(Selection_wzmDopingFamily);

// add the criteria WP controls to the control collection
_CriteriaControls.Add(ObjectChanges_wzmFactory);
_CriteriaControls.Add(ObjectChanges_wzmNewGlueFamily);
_CriteriaControls.Add(ObjectChanges_wzmDopingFamily);

// ObjectChanges_Workflow.DataChanged += ObjectChanges_WIPStepWorkflow_DataChanged;
// specify the hidden colums for the selection grid.
_HiddenGridColumns.Add("RN");
}
}
}