Camstar Matrix Setup

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

Designer建模

CDOs

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

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

3.在wzmParameterDistributionMatrixChanges中为ES_SelectionES_SelectionSpecific字段的SelectValuesEx绑定CLF方法wzmParameterDistributionSelection

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

CLFs

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

Queries

1.在AdvancedQuery中创建一个新的Query名为wzmParameterDistributionSelection,其中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
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
SELECT
Spec AS Spec
, Product AS Product
, Factory AS Factory
, "Resource" AS "Resource"
, BLBType AS BLBType
, ProductFamilyName AS ProductFamilyName
, JYContent AS JYContent
, Thickness AS Thickness
, Description AS Description
, Name AS Name
, RN AS RN
FROM
(
SELECT
CASE WHEN PD.wzmSpecId IS NULL THEN NULL ELSE SB.SpecName || ':' || S.SpecRevision END AS Spec
, CASE WHEN PD.wzmProductId IS NULL THEN NULL ELSE PB.ProductName || ':' || P.ProductRevision END AS Product
, CASE WHEN PD.wzmFactoryId IS NULL THEN NULL ELSE F.Factoryname END AS Factory
, CASE WHEN PD.Wzmblbtypeid IS NULL THEN NULL ELSE BT.Wzmblbtypename END AS BLBType
, CASE WHEN PD.Wzmjycontent IS NULL THEN NULL ELSE PD.Wzmjycontent END AS JYContent
, CASE WHEN PD.Wzmproductfamilyid IS NULL THEN NULL ELSE PF.Productfamilyname END AS ProductFamilyName
, CASE WHEN PD.Wzmthickness IS NULL THEN NULL ELSE PD.Wzmthickness END AS Thickness
, CASE WHEN PD.wzmResourceId IS NULL THEN NULL ELSE RD.Resourcename END AS "Resource"
, PD.Description AS Description
, PD.wzmParameterDistributionMaName AS Name
, CAST(ROW_NUMBER() OVER (ORDER BY CASE WHEN PD.wzmSpecId IS NULL THEN 0 ELSE 1 END DESC
, CASE WHEN PD.wzmProductId IS NULL THEN 0 ELSE 1 END DESC
, CASE WHEN PD.wzmResourceId IS NULL THEN 0 ELSE 1 END DESC
, CASE WHEN PD.Wzmblbtypeid IS NULL THEN 0 ELSE 1 END DESC
, CASE WHEN PD.Wzmproductfamilyid IS NULL THEN 0 ELSE 1 END DESC
, CASE WHEN PD.Wzmjycontent IS NULL THEN 0 ELSE 1 END DESC
, CASE WHEN PD.Wzmthickness IS NULL THEN 0 ELSE 1 END DESC
, CASE WHEN PD.wzmFactoryId IS NULL THEN 0 ELSE 1 END DESC) AS INT) RN
FROM
wzmParameterDistributionMatrix PD
LEFT OUTER JOIN Spec S ON PD.wzmSpecId = S.SpecId
LEFT OUTER JOIN SpecBase SB ON S.SpecBaseId = SB.SpecBaseId
LEFT OUTER JOIN Product P ON PD.wzmProductId = P.ProductId
LEFT OUTER JOIN ProductBase PB ON P.ProductBaseId = PB.ProductBaseId
LEFT OUTER JOIN Productfamily PF ON PD.wzmProductfamilyid = PF.Productfamilyid
LEFT OUTER JOIN Wzmblbtype BT ON BT.Wzmblbtypeid = PD.Wzmblbtypeid
LEFT OUTER JOIN Factory F ON F.FactoryId = PD.wzmFactoryId
LEFT OUTER JOIN Resourcedef RD ON RD.ResourceId = PD.wzmResourceId

WHERE
(S.Specid LIKE ?SpecId OR PD.wzmSpecId IS NULL)
AND (P.Productid LIKE ?ProductId OR PD.wzmProductId IS NULL)
AND (F.Factoryid LIKE ?FactoryId OR PD.wzmFactoryId IS NULL)
AND (RD.Resourceid LIKE ?ResourceId OR PD.wzmResourceId IS NULL)
AND (BT.Wzmblbtypeid LIKE ?BLBTypeId OR PD.Wzmblbtypeid IS NULL)
AND (PF.Productfamilyid LIKE ?ProductFamilyId OR PD.Wzmproductfamilyid IS NULL)
AND (PD.Wzmjycontent LIKE ?JYContent OR PD.Wzmjycontent IS NULL)
AND (PD.Wzmthickness LIKE ?Thickness OR PD.Wzmthickness IS NULL)
) DesignerAdvancedQuery
WHERE
RN BETWEEN ?STARTROWNUM AND ?STOPROWNUM

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

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
SELECT
Spec AS Spec
, Product AS Product
, Factory AS Factory
, "Resource" AS "Resource"
, BLBType AS BLBType
, ProductFamilyName AS ProductFamilyName
, JYContent AS JYContent
, Thickness AS Thickness
, Description AS Description
, Name AS Name
, RN AS RN
FROM
(
SELECT
CASE WHEN PD.wzmSpecId IS NULL THEN NULL ELSE SB.SpecName || ':' || S.SpecRevision END AS Spec
, CASE WHEN PD.wzmProductId IS NULL THEN NULL ELSE PB.ProductName || ':' || P.ProductRevision END AS Product
, CASE WHEN PD.wzmFactoryId IS NULL THEN NULL ELSE F.Factoryname END AS Factory
, CASE WHEN PD.Wzmblbtypeid IS NULL THEN NULL ELSE BT.Wzmblbtypename END AS BLBType
, CASE WHEN PD.Wzmjycontent IS NULL THEN NULL ELSE PD.Wzmjycontent END AS JYContent
, CASE WHEN PD.Wzmproductfamilyid IS NULL THEN NULL ELSE PF.Productfamilyname END AS ProductFamilyName
, CASE WHEN PD.Wzmthickness IS NULL THEN NULL ELSE PD.Wzmthickness END AS Thickness
, CASE WHEN PD.wzmResourceId IS NULL THEN NULL ELSE RD.Resourcename END AS "Resource"
, PD.Description AS Description
, PD.wzmParameterDistributionMaName AS Name
, CAST(ROW_NUMBER() OVER (ORDER BY CASE WHEN PD.wzmSpecId IS NULL THEN 0 ELSE 1 END DESC
, CASE WHEN PD.wzmProductId IS NULL THEN 0 ELSE 1 END DESC
, CASE WHEN PD.wzmResourceId IS NULL THEN 0 ELSE 1 END DESC
, CASE WHEN PD.Wzmblbtypeid IS NULL THEN 0 ELSE 1 END DESC
, CASE WHEN PD.Wzmproductfamilyid IS NULL THEN 0 ELSE 1 END DESC
, CASE WHEN PD.Wzmjycontent IS NULL THEN 0 ELSE 1 END DESC
, CASE WHEN PD.Wzmthickness IS NULL THEN 0 ELSE 1 END DESC
, CASE WHEN PD.wzmFactoryId IS NULL THEN 0 ELSE 1 END DESC) AS INT) RN
FROM
wzmParameterDistributionMatrix PD
LEFT OUTER JOIN Spec S ON PD.wzmSpecId = S.SpecId
LEFT OUTER JOIN SpecBase SB ON S.SpecBaseId = SB.SpecBaseId
LEFT OUTER JOIN Product P ON PD.wzmProductId = P.ProductId
LEFT OUTER JOIN ProductBase PB ON P.ProductBaseId = PB.ProductBaseId
LEFT OUTER JOIN Productfamily PF ON PD.wzmProductfamilyid = PF.Productfamilyid
LEFT OUTER JOIN Wzmblbtype BT ON BT.Wzmblbtypeid = PD.Wzmblbtypeid
LEFT OUTER JOIN Factory F ON F.FactoryId = PD.wzmFactoryId
LEFT OUTER JOIN Resourcedef RD ON RD.ResourceId = PD.wzmResourceId

WHERE
((?ResourceId<>'%' and RD.Resourceid = ?ResourceId) or (?ResourceId='%' and PD.WZMResourceid is null))
AND ((?SpecId<>'%' and S.Specid = ?SpecId) or (?SpecId='%' and PD.WZMSpecid is null))
AND ((?ProductId<>'%' and P.Productid = ?ProductId) or (?ProductId='%' and PD.WZMProductid is null))
AND ((?BLBTypeId<>'%' and BT.Wzmblbtypeid = ?BLBTypeId) or (?BLBTypeId='%' and PD.WZMBlbtypeid is null))
AND ((?ProductFamilyId<>'%' and PF.Productfamilyid = ?ProductFamilyId) or (?ProductFamilyId='%' and PD.WZMProductfamilyid is null))
AND ((?JYContent<>'%' and PD.Wzmjycontent = ?JYContent) or (?JYContent='%' and PD.WZMJycontent is null))
AND ((?Thickness<>'%' and PD.Wzmthickness = ?Thickness) or (?Thickness='%' and PD.WZMThickness is null))
AND ((?FactoryId<>'%' and F.Factoryid = ?FactoryId) or (?FactoryId='%' and PD.WZMFactoryid 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下编写wzmParameterDistributionMatrix代码,注册我们页面上使用到的所有控件,并使其继承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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/* © 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 wzmParameterDistributionMatrix : cpssetupbmodelingbase_QTime
{
protected CWC.RevisionedObject Selection_wzmProduct { get { return Page.FindCamstarControl("Selection_wzmProduct") as CWC.RevisionedObject; } }
protected CWC.RevisionedObject Selection_wzmSpec { get { return Page.FindCamstarControl("Selection_wzmSpec") as CWC.RevisionedObject; } }
protected CWC.NamedObject Selection_wzmResource { get { return Page.FindCamstarControl("Selection_wzmResource") as CWC.NamedObject; } }
protected CWC.NamedObject Selection_wzmFactory { get { return Page.FindCamstarControl("Selection_wzmFactory") as CWC.NamedObject; } }
protected CWC.NamedObject Selection_wzmBLBType { get { return Page.FindCamstarControl("Selection_wzmBLBType") as CWC.NamedObject; } }
protected CWC.NamedObject Selection_wzmProductFamily { get { return Page.FindCamstarControl("Selection_wzmProductFamily") as CWC.NamedObject; } }
protected CWC.TextBox Selection_wzmJYContent { get { return Page.FindCamstarControl("Selection_wzmJYContent") as CWC.TextBox; } }
protected CWC.TextBox Selection_wzmThickness { get { return Page.FindCamstarControl("Selection_wzmThickness") as CWC.TextBox; } }

protected CWC.RevisionedObject ObjectChanges_wzmProduct { get { return Page.FindCamstarControl("ObjectChanges_wzmProduct") as CWC.RevisionedObject; } }
protected CWC.RevisionedObject ObjectChanges_wzmSpec { get { return Page.FindCamstarControl("ObjectChanges_wzmSpec") as CWC.RevisionedObject; } }
protected CWC.NamedObject ObjectChanges_wzmResource { get { return Page.FindCamstarControl("ObjectChanges_wzmResource") as CWC.NamedObject; } }
protected CWC.NamedObject ObjectChanges_wzmFactory { get { return Page.FindCamstarControl("ObjectChanges_wzmFactory") as CWC.NamedObject; } }
protected CWC.NamedObject ObjectChanges_wzmBLBType { get { return Page.FindCamstarControl("ObjectChanges_wzmBLBType") as CWC.NamedObject; } }
protected CWC.NamedObject ObjectChanges_wzmProductFamily { get { return Page.FindCamstarControl("ObjectChanges_wzmProductFamily") as CWC.NamedObject; } }
protected CWC.TextBox ObjectChanges_wzmJYContent { get { return Page.FindCamstarControl("ObjectChanges_wzmJYContent") as CWC.TextBox; } }
protected CWC.TextBox ObjectChanges_wzmThickness { get { return Page.FindCamstarControl("ObjectChanges_wzmThickness") as CWC.TextBox; } }

protected CWC.RevisionedObject ObjectChanges_wzmRecipe { get { return Page.FindCamstarControl("ObjectChanges_wzmRecipe") as CWC.RevisionedObject; } }


protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
// add the selection WP controls to the control collection
_SelectionControls.Add(Selection_wzmProduct);
_SelectionControls.Add(Selection_wzmSpec);
_SelectionControls.Add(Selection_wzmResource);
_SelectionControls.Add(Selection_wzmFactory);
_SelectionControls.Add(Selection_wzmBLBType);
_SelectionControls.Add(Selection_wzmProductFamily);
_SelectionControls.Add(Selection_wzmJYContent);
_SelectionControls.Add(Selection_wzmThickness);


// add the criteria WP controls to the control collection
_CriteriaControls.Add(ObjectChanges_wzmProduct);
_CriteriaControls.Add(ObjectChanges_wzmSpec);
_CriteriaControls.Add(ObjectChanges_wzmResource);
_CriteriaControls.Add(ObjectChanges_wzmFactory);
_CriteriaControls.Add(ObjectChanges_wzmBLBType);
_CriteriaControls.Add(ObjectChanges_wzmProductFamily);
_CriteriaControls.Add(ObjectChanges_wzmJYContent);
_CriteriaControls.Add(ObjectChanges_wzmThickness);

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

}

}
}