高章伟
2022-02-18 8b5f4c6c281cfa548f92de52c8021e37aa81901e
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
/**
 * 一覧共通component用
 * 
 */
public with sharing abstract class CreateRelationListPagingCtrlBase {
 
    // 打勾后要不要trigger一个Event
    public Boolean isNeedCheckEvent {
        get {
            if (isNeedCheckEvent == null) { return false; }
            return isNeedCheckEvent;
        }
        set;
    }
    public Boolean isNeedSearchFirst {
        get {
            if (isNeedSearchFirst == null) { return false; }
            return isNeedSearchFirst;
        }
        set;
    }
    // checkEventより、遷移先のurlを返す
    // assignTo="{!clickLineNo}" より url を組み立てる
    public virtual void checkEvent() { }
 
    // 検索条件なしで、検索を行わない
    public Boolean isNeedRunSearch { get; set; }
    public abstract Boolean getIsNeedRunSearch();
 
    // 画面パラメータ:親Id
    public String parentId { get; set; }
    // 親オブジェクトAPI名
    public String selectedDataSql;
    public abstract String getSelectedDataSql();
 
    // 検索元対象オブジェクトAPI名
    public String originObjName;
    public abstract String getOriginObjName();
    // 検索元対象項目セット
    public String originObjColumns;
    public abstract String getOriginObjColumns();
 
    // 選択されたデータリスト
    public List<SObject> selectedData { get; set; }
    // 選択されたデータの連絡先のIdリスト
    public List<Id> selectedFKIdList { get; set; }
    // 選択されたデータIdのSet
    public Set<Id> selectedIdSet { get; set; }
 
    // 画面件数毎ページ
    public String pageSize { get; set; }
    // ソートキー
    public String sortKey { get; set; }
    // ソートキー(前回)
    public String preSortKey { get; set; }
 
    // システムのOFFSET_LIMIT より小さい検索Limitにしたい場合、定義する
    public Integer searchNumMax;
    public abstract Integer getSearchNumMax();      // 定义 > 2000 的话, 不能用offset来翻页
    // オブジェクトAPI名
    public String objName;
    public abstract String getObjName();
    // Where文
    public String sqlWhereStr;
    public abstract String getSqlWhereStr();
    public virtual String getOrderbyStr() {
        return null;
    }
    // 左の項目セット
    public String columnLeftFieldSetName;
    public abstract String getColumnLeftFieldSetName();
    // 右の項目セット
    public String columnRightFieldSetName;
    public abstract String getColumnRightFieldSetName();
    // Select 里加直接加的項目 List
    public abstract List<String> getColumnFieldList();
    // Hidden項目 List
    public virtual List<String> getHiddenFieldList() {
        return new List<String>();
    }
    // 宽度是0的項目
    public virtual String getWidth0Field() {
        return '';
    }
    // 画面里直接可以输入的項目 List
    public virtual List<String> getWritableColumnFieldList() {
        return new List<String>();
    }
    // getObjName 连 getOriginObjName 的 FK
    public abstract String getFKColumnField();
 
    public Integer clickLineNo  { get; set; }
 
    // 検索結果メッセージ表示
    public Boolean showRecordCountMSG { get; set; }
    public virtual Boolean getShowRecordCountMSG() {
        return true;
    }
 
    // ページレイアウトを収得するのレコードタイプ
    public String recordTypeId;
    public abstract String getRecordTypeId();
    // 共通コンポーネントにも参照できるwrapperリスト
    public List<WrapperInfo> viewList;
    public List<WrapperInfo> getViewList(){return viewList;}
    public abstract void setViewList(List<SObject> rSObject);
 
    public CreateRelationListPagingCmpCtrl myComponentController;
 
    public CreateRelationListPagingCmpCtrl getMyComponentController() {
        return myComponentController;
    }
 
    public void setComponentController(CreateRelationListPagingCmpCtrl compController) {
        System.debug('SSSSSSSSSSSSSSSSS: setComponentController start');
        myComponentController = compController;
    }
 
    public CreateRelationListPagingCtrlBase getThis() {
        return this;
    }
    public CreateRelationListPagingCtrlBase(){
    }
 
    public void makeSelectedDataInfo() {
        selectedFKIdList = new List<Id>();
        selectedIdSet = new Set<Id>();
        for (Sobject mf : selectedData) {
            if (!String.isBlank(getFKColumnField())
                    && mf.get(getFKColumnField()) != null) {
                selectedFKIdList.add((Id) mf.get(getFKColumnField()));
            }
            selectedIdSet.add(mf.Id);
        }
    }
 
    public class WrapperInfo implements Comparable {
        public SObject sobj { get; set; }
        // public Map<String, Object> sobjMap { get; set; }
        public Boolean canEdit { get;  set; }
        public Boolean hasError { get;  set; }
        public Boolean hasFieldError { get;  set; }
        public Integer lineNo { get;  set; }
        public Integer orderNo { get;  set; }
        public String changeFlg { get; set; }
        public Boolean check { get; set; } // 是否选择
        public Boolean oldCheck { get; set; }
        public Integer inputInt {get; set;}  // 数量
 
        public Map<String, String> additionalInfoMap {get; set;}  // 追加信息
 
        public WrapperInfo(SObject record, CreateRelationListPagingCmpCtrl myComponentController) {
            if (record == null) {
                throw new ControllerUtil.myException('new WrapperInfo with null record.');
            }
            sobj = record;
            check = false;
            oldCheck = false;
            canEdit = true;
            // For JS index
            lineNo = 0;
            // For JS index
            orderNo = 0;
            changeFlg = '0';
            additionalInfoMap = new Map<String, String>();
            // // field name の階層を一階層にする
            // sobjMap = new Map<String, Object>();
            // for (List<String> splitFieldPath : myComponentController.columnsLeftApi) {
            //     if (splitFieldPath.size() == 2) {
            //         if (record.getSObject(splitFieldPath[0]) == null) {
            //             sobjMap.put(splitFieldPath[0] + '.' + splitFieldPath[1], '');
            //         } else {
            //             sobjMap.put(splitFieldPath[0] + '.' + splitFieldPath[1],
            //                     record.getSObject(splitFieldPath[0]).get(splitFieldPath[1]));
            //         }
            //     }
            // }
            // for (List<String> splitFieldPath : myComponentController.columnsRightApi) {
            //     if (splitFieldPath.size() == 2) {
            //         if (record.getSObject(splitFieldPath[0]) == null) {
            //             sobjMap.put(splitFieldPath[0] + '.' + splitFieldPath[1], '');
            //         } else {
            //             sobjMap.put(splitFieldPath[0] + '.' + splitFieldPath[1],
            //                     record.getSObject(splitFieldPath[0]).get(splitFieldPath[1]));
            //         }
            //     }
            // }
        }
 
        // 排序
        public Integer compareTo(Object compareTo) {
            WrapperInfo compareToWrap = (WrapperInfo) compareTo;
            if (orderNo == null && compareToWrap.orderNo != null) {
                return 1;
            }
            if (orderNo == compareToWrap.orderNo) {
                return 0;
            }
            if (orderNo > compareToWrap.orderNo) {
                return 1;
            }
            return -1;
        }
    }
}