ABAP DOI详解(2)
我们之所以用Excel输出,主要是想用Excel在显示中的优势,所以最常见的做法,往往调用Excel模板文件来实现。这一篇,我们就来操作Excel模板文件,另外,excel文档放在dialog screen中显示。
创建Dialog Screen
新建一个screen, scren number为100,在screen中添加一个custom control, name属性为CONTAINER1,界面如下:
新建一个GUI Status,编号为100,在gui status中定义function code为EXIT
,functional type为E
的功能码(function key)。
切换到screen的flow logic,增加一个PAI事件,然后编写代码,用于处理屏幕的退出:
module exit_program input.save_ok = ok_code.clear ok_code.if save_ok = 'EXIT'.leave program.endif.endmodule.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
上传Excel文档
用事务码OAOR
将Excel文档上传。输入OAOR,进入下面的界面,输入后面程序需要使用的几个重要标识:class name, class type和object key。class name选择SAP提供的HRFPM_EXCEL_STANDARD就可以了。如果没有,请用事物码SBDSV1进行定于。object key建议使用excel文档的文件名,以便查找。
点击“执行”(F8)按钮,进入下面的界面
从左下部分的doc type中,选择table template,右键菜单,导入文档。导入模板文档doitest.xls。
OK,现在文档已经导入了。我们可以在OAOR界面中,显示文档、文档的详细信息(detail info.)等。
获取模板文档的信息
操作excel模板文档,使用cl_bds_document_set
类,这个类的get_with_url
方法获取文档的url。首先定义一些global变量:
* business document system
data: gr_bds_documents type ref to cl_bds_document_set,g_classname type sbdst_classname,g_classtype type sbdst_classtype,g_objectkey type sbdst_object_key,g_doc_components type sbdst_components,g_doc_signature type sbdst_signature.* template url
data: gt_bds_uris type sbdst_uri,gs_bds_url like line of gt_bds_uris,g_template_url(256) type c.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
获取excel template文档的url:
form get_template_url.create object gr_bds_documents.call method cl_bds_document_set=>get_infoexportingclassname = g_classnameclasstype = g_classtypeobject_key = g_objectkeychangingcomponents = g_doc_componentssignature = g_doc_signature.call method cl_bds_document_set=>get_with_urlexportingclassname = g_classnameclasstype = g_classtypeobject_key = g_objectkeychanginguris = gt_bds_urissignature = g_doc_signature.free gr_bds_documents.read table gt_bds_uris into gs_bds_url index 1.g_template_url = gs_bds_url-uri.
endform. "get_template_url
- 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
- 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
cl_bds_document_set
的静态方法get_with_url
获取excel template的url。数据存放在内表中,读取后放在global变量g_template_url里面。
打开Excel文档
根据获取的excel template的url,打开excel文档:
form open_excel_doc.call method gr_control->get_document_proxyexportingdocument_type = 'Excel.Sheet'no_flush = 'X'register_container = 'X'importingdocument_proxy = gr_document.call method gr_document->open_documentexportingopen_inplace = 'X'document_url = g_template_url.data: available type i.call method gr_document->has_spreadsheet_interfaceexportingno_flush = 'X'importingis_available = available.call method gr_document->get_spreadsheet_interfaceexportingno_flush = 'X'importingsheet_interface = gr_spreadsheet.call method gr_spreadsheet->select_sheetexportingname = 'Sheet1'no_flush = 'X'.
endform.
- 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
- 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
将数据写入Excel
我们从spfli表中获取所有航班的信息:
* output internale table
data: begin of gs_spfli,carrid like spfli-carrid,connid like spfli-connid,cityfrom like spfli-cityfrom,cityto like spfli-cityto,end of gs_spfli.
data: gt_spfli like standard table of gs_spfli.form get_data.select * from spfliinto corresponding fields of table gt_spfli.
endform.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
数据写入Excel,可以使用批量的方式或者逐个单元格写入的方式。批量写入的方式效率高,逐个单元格写入的方式比较灵活,在程序中都能用到。将数据写入excel需要使用i_oi_spreadsheet
接口实例的两个方法:
- insert_range_dim方法,定义一个范围(range),设定range的名称、位置和大小。比如下面的代码,定义一个名称为cell, 共line_count行、4列的range,从第2行第1列开始。
call method gr_spreadsheet->insert_range_dimexportingname = 'cell'no_flush = 'X'top = 2left = 1rows = line_countcolumns = 4.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- set_range_data方法,写入数据到range,写入的时候,ranges参数设定range的名称和大小, contents参数设定写入的内容。OK,假设我们将要输出的数据在内表gt_spfli中是这样的:
我们想要在excel中按同样的方式输出。我们定义ranges参数的内表如下:
上图表示我们将要输出的数据,名称为cell,4列5行。
定义contents参数的内表如下,确定每一个单元个的内容:
set_range_data方法:
call method gr_spreadsheet->set_ranges_dataexportingranges = gt_rangescontents = gt_contentsno_flush = 'X'.
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
对象销毁
在PAI的exit-command事件中处理对spreadsheet, control和Container等对象的销毁。网上有博客认为DOI没有必要创建screen,而我觉得screen的好处就是可以很好地处理对象销毁。
form release_objects.if not gr_document is initial.call method gr_document->close_document.free gr_document.endif.if not gr_control is initial.call method gr_control->destroy_control.free gr_control.endif.if gr_container is not initial.call method gr_container->free.endif.
endform.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
exit-command事件的代码变成这个样子
module exit_program input.save_ok = ok_code.clear ok_code.if save_ok = 'EXIT'.perform release_objects.leave program.endif.
endmodule.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
完整代码
*&---------------------------------------------------------------------*
*& Report ZDOI_DOC_TEMPLATE
*&
*&---------------------------------------------------------------------*
*&
*& Written by Stone Wang
*& Version 1.0 on Dec 16, 2016
*&---------------------------------------------------------------------*report zdoi_doc_template.data: gr_custom_container type ref to cl_gui_custom_container.
data: gr_container type ref to cl_gui_container,gr_control type ref to i_oi_container_control,gr_document type ref to i_oi_document_proxy,gr_spreadsheet type ref to i_oi_spreadsheet.* business document system
data: gr_bds_documents type ref to cl_bds_document_set,g_classname type sbdst_classname,g_classtype type sbdst_classtype,g_objectkey type sbdst_object_key,g_doc_components type sbdst_components,g_doc_signature type sbdst_signature.* template url
data: gt_bds_uris type sbdst_uri,gs_bds_url like line of gt_bds_uris,g_template_url(256) type c.data: ok_code type sy-ucomm,save_ok like ok_code.* output internale table
data: begin of gs_spfli,carrid like spfli-carrid,connid like spfli-connid,cityfrom like spfli-cityfrom,cityto like spfli-cityto,end of gs_spfli.
data: gt_spfli like standard table of gs_spfli.* Required for writing data to Excel
data: gt_ranges type soi_range_list,gs_range type soi_range_item,gt_contents type soi_generic_table,gs_content type soi_generic_item.initialization.g_classname = 'HRFPM_EXCEL_STANDARD'.g_classtype = 'OT'.g_objectkey = 'DOITEST'.start-of-selection.perform get_data.call screen 100.define write_content_cell.gs_content-row = &1.gs_content-column = &2.gs_content-value = &3.append gs_content to gt_contents.clear gs_content.end-of-definition.*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form get_data.select * from spfliinto corresponding fields of table gt_spfli up to 5 rows.
endform. "get_data*&---------------------------------------------------------------------*
*& Form get_container
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form get_container.create object gr_custom_containerexportingcontainer_name = 'CONTAINER1'.
endform. "get_container*&---------------------------------------------------------------------*
*& Form create_container_control
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form create_container_control.
* create container controlcall method c_oi_container_control_creator=>get_container_controlimportingcontrol = gr_control.* initialize controlcall method gr_control->init_controlexportinginplace_enabled = 'X 'inplace_scroll_documents = 'X'register_on_close_event = 'X'register_on_custom_event = 'X'r3_application_name = 'DOI demo by Stone Wang'parent = gr_custom_container.
endform. "create_container_control*&---------------------------------------------------------------------*
*& Form get_template_url
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form get_template_url.create object gr_bds_documents.call method cl_bds_document_set=>get_infoexportingclassname = g_classnameclasstype = g_classtypeobject_key = g_objectkeychangingcomponents = g_doc_componentssignature = g_doc_signature.call method cl_bds_document_set=>get_with_urlexportingclassname = g_classnameclasstype = g_classtypeobject_key = g_objectkeychanginguris = gt_bds_urissignature = g_doc_signature.free gr_bds_documents.read table gt_bds_uris into gs_bds_url index 1.g_template_url = gs_bds_url-uri.
endform. "get_template_url*&---------------------------------------------------------------------*
*& Form open_excel_doc
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form open_excel_doc.call method gr_control->get_document_proxyexportingdocument_type = 'Excel.Sheet'no_flush = 'X'register_container = 'X'importingdocument_proxy = gr_document.call method gr_document->open_documentexportingopen_inplace = 'X'document_url = g_template_url.data: available type i.call method gr_document->has_spreadsheet_interfaceexportingno_flush = 'X'importingis_available = available.call method gr_document->get_spreadsheet_interfaceexportingno_flush = 'X'importingsheet_interface = gr_spreadsheet.call method gr_spreadsheet->select_sheetexportingname = 'Sheet1'no_flush = 'X'.
endform. "open_excel_doc*&---------------------------------------------------------------------*
*& Form fill_ranges
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form fill_ranges.data: line_count type i value 0,col_count type i value 0.* 获取内表的行列数perform read_itab_structure using 'GT_SPFLI' line_count col_count.* fill gt_ranges[]clear gs_range.clear gt_ranges[].gs_range-name = 'cell'.gs_range-rows = line_count.gs_range-columns = col_count.gs_range-code = 4.append gs_range to gt_ranges.
endform. "fill_ranges*&---------------------------------------------------------------------*
*& Form fill_contents
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form fill_contents.data: row_index type i.row_index = 1.loop at gt_spfli into gs_spfli.clear gs_content.write_content_cell row_index 1 gs_spfli-carrid.write_content_cell row_index 2 gs_spfli-connid.write_content_cell row_index 3 gs_spfli-cityfrom.write_content_cell row_index 4 gs_spfli-cityto.row_index = row_index + 1.endloop.
endform. "fill_contents*&---------------------------------------------------------------------*
*& Form read_itab_structure
*&---------------------------------------------------------------------*
* get internal number of rows and number of columns of itab
*----------------------------------------------------------------------*
form read_itab_structure using p_tabname p_rowcount p_colcount.data: l_rowcount type i,l_colcount type i.field-symbols: <fs1>.data: ls_spfli like line of gt_spfli.* Line countdescribe table gt_spfli lines l_rowcount.* Row countdo.assign component sy-index of structure ls_spfli to <fs1>.if sy-subrc is initial.l_colcount = l_colcount + 1.else.exit.endif.enddo.p_rowcount = l_rowcount.p_colcount = l_colcount.endform. "read_itab_structure*&---------------------------------------------------------------------*
*& Form write_data_to_excel
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form write_data_to_excel.data: line_count type i value 0,col_count type i value 0.check not gt_spfli is initial.* 获取内表的行列数perform read_itab_structure using 'GT_SPFLI' line_count col_count.call method gr_spreadsheet->insert_range_dimexportingname = 'cell'no_flush = 'X'top = 2left = 1rows = line_countcolumns = col_count.* populate tow internal tables required for 'set_range_data'perform fill_ranges.perform fill_contents.call method gr_spreadsheet->set_ranges_dataexportingranges = gt_rangescontents = gt_contentsno_flush = 'X'.endform. "write_data_to_excel*&---------------------------------------------------------------------*
*& Form release_objects
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form release_objects.if not gr_document is initial.call method gr_document->close_document.free gr_document.endif.if not gr_control is initial.call method gr_control->destroy_control.free gr_control.endif.if gr_container is not initial.call method gr_container->free.endif.
endform. "release_objects*&---------------------------------------------------------------------*
*& Form main
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form main.perform get_container.perform create_container_control.perform get_template_url..perform open_excel_doc.perform write_data_to_excel.
endform. "main*&---------------------------------------------------------------------*
*& Module exit_program INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module exit_program input.save_ok = ok_code.clear ok_code.if save_ok = 'EXIT'.perform release_objects.leave program.endif.
endmodule. " exit_program INPUT
*&---------------------------------------------------------------------*
*& Module status_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module status_0100 output.set pf-status '100'.perform main.
endmodule. " status_0100 OUTPUT
- 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
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 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
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
程序的界面如下。最主要的缺点是container的大小是固定的,后面我们看看怎么解决这个问题。
ABAP DOI详解(2)相关推荐
- ABAP DOI详解(3)
这一篇解决上一篇的几个遗留问题: 如何根据屏幕大小让Excel自适应 Excel单个单元格写入 设置Excel属性 错误处理 如何根据屏幕大小让Excel自适应 Dialog screen中的cust ...
- 详解ABAP Selection Screens
转载自大神 jevinxu:详解ABAP Selection Screens: http://www.sapjx.com/abap-selection-screen.html ABAP Sele ...
- 【SAP Abap】BOM多级展开函数 CS_BOM_EXPL_MAT_V2 使用详解
SAP ABAP BOM多级展开函数 CS_BOM_EXPL_MAT_V2 使用详解 1.函数入参说明 2.函数出参说明 1.函数入参说明 CALL FUNCTION 'CS_BOM_EXPL_MAT ...
- 一文弄懂元学习 (Meta Learing)(附代码实战)《繁凡的深度学习笔记》第 15 章 元学习详解 (上)万字中文综述
<繁凡的深度学习笔记>第 15 章 元学习详解 (上)万字中文综述(DL笔记整理系列) 3043331995@qq.com https://fanfansann.blog.csdn.net ...
- endnotex7怎么导入中文文献_EndNote X7自动导入PDF功能详解 | 科研动力
在Endnote X7 新功能简介一文中对于EndNote X7的自动导入PDF功能作了一简要介绍,但是有些人对于EndNote自动导入PDF的功能还是有疑问,本文就EndNote如何自动导入PDF功 ...
- SAP UI5 初学者教程之二十六 - OData 服务配合 Mock 服务器的使用步骤详解试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 初学者教程之一:Hello World SAP UI5 初学者教程之二:SAP UI5 ...
- 一文详解宏基因组组装工具Megahit安装及应用
要点 Megahit简介 Megahit的基本组装原理 Megahit的安装和使用 Megahit实战 hello,大家好,今天为大家带来关于宏基因组组装工具Megahit的超详细安装及应用教程. 我 ...
- NEXT社区小课堂 | 第四课:dBFT 2.0详解 | 委托拜占庭容错:技术细节、挑战和前景...
NEXT社区 | 小课堂 由于近期NEXT社区加入很多新的小伙伴,有在校大学生,有对区块链感兴趣的传统企业从业者.为了更方便.更系统的让NEXT社区的伙伴们了解NEO的技术知识,因此我们开设了小课堂, ...
- R统计绘图-PCA详解1(princomp/principal/prcomp/rda等)
此文为<精通机器学习:基于R>的学习笔记,书中第九章详细介绍了无监督学习-主成分分析(PCA)的分析过程和结果解读. PCA可以对相关变量进行归类,从而降低数据维度,提高对数据的理解.分析 ...
最新文章
- 机器学习和计算机视觉的前20个图像数据集
- 一起来踩踩 Spring 中这个循环依赖的坑!
- VS2010+OpenCV2.4.3配置(一次设置,永久生效)
- volatile类型的数据
- 数据段、代码段、堆栈段、BSS段
- gcc编译ceres-solver报错‘is_trivially_default_constructible’ is not a member of ‘std’
- ansible-playbook 单个yml文件部署tomcat简单示例
- Java基础:常用的API
- mysql索引冲突_mysql 锁问题 (相同索引键值或同一行或间隙锁的冲突)
- 只安装mysql客户端_单独安装mysql客户端
- Hadoop安装教程_单机/伪分布式配置
- 安装docker 17.03.2.ce教程
- 数据库sql对象名无效问题
- NDK OpenGL ES 3.0 开发(五):FBO 离屏渲染
- 微信小程序—写字板、手写签名(高仿毛笔效果)让汉字引领世界
- vue项目无法在IE打开
- git clone出现 fatal: unable to access ‘https://github.com/...‘的解决办法(亲测有效)
- PyCharm - 码云(Gitee)
- 期末大作业——许愿墙
- MVC之Identity身份验证