Monthly Archives: September 2007
ABAP动态生成程序的例子
主要的两个语句: INSERT REPORT GENERATE SUBROUTING POOL 下面是一个简单的例子: REPORT z_xam_test1.DATA: line(72) TYPE c.DATA: itab LIKE TABLE OF line WITH HEADER LINE, form_name(30) TYPE c, msg(72) TYPE c, prog(72) type c. form_name = ‘TEST’. itab = ‘PROGRAM SUBPOOL.’.APPEND itab. CONCATENATE ‘FORM ‘ form_name ‘.’INTO itabSEPARATED BY space.APPEND itab. itab = ‘WRITE: AT /1 SY-DATUM.’.APPEND itab. itab = [...]
解决Ajax跨域的取巧办法
在IE里面,有一个比较取巧的办法,就是把当前域和目标域都放到受信任站点就可以了,下面是一些更加全面和彻底的解决方法: 1、Server Proxy 2、Dynamic Script标签 3、Apahce的mod_rewrite模块 4、借助IFrame模拟 5、借助于Flash JavaEye上的一个相关讨论:求XmlHttp 跨域的解决方案 另外一个BLOG是使用Flash达到跨域访问数据的目的:Ajax跨域访问的替代方案
使用Javascript操作剪贴板和Excel
操作剪切板使用了window.clipboardData对象 操作Excel使用了ActiveX对象,创建时候有一个警告信息,点击“是”就可以了 <html> <head> <title>test page</title> <script type="text/javascript"> <!– function exportToExcel() { var dataArray = new Array(); var table1 = document.getElementById(‘table1′); var rows = table1.rows for (var i = 0; i < rows.length; i++) { var cells = rows[i].cells; for (var j = 0; j < cells.length; j++) { dataArray.push(cells[j].innerText); dataArray.push(‘t’); } dataArray.pop(); dataArray.push(‘n’); } [...]
A BAPI corresponding to transaction code CO15
BAPI Name: BAPI_PRODORDCONF_CREATE_HDR To use this bapi, just input the following fields in table parameter ATHDRLEVELS: ORDERID: Product order number FIN_CONF: Partial/final confirmation YIELD: Yield currently to be confirmed Don’t forget call function BAPI_TRANSACTION_COMMIT to save what have changed in the database. With partial confirmation, the status of production order’s header is PCNF, After final [...]
HTTP Cookies的一点知识
Cookies的作用是用来保存浏览器客户端的状态,会以文件的形式存放在浏览器的临时文件目录中;在HTTP的请求和应答过程中Cookie都放在Header段中,有两个格式的Header设置 1、服务器相应客户端的请求:使用Set-Cookie Header 2、客户端向服务器发送请求:使用Cookie Header 一般情况下Cookie传递如下:服务器端在响应中利用Set-Cookie header来创建一个Cookie,然后,浏览器在它的请求中通过Cookie header包含这个已经创建的Cookie,并且反它返回至服务器,从而完成浏览器的论证。 Cookie的格式: 基本格式:<name>=<value>[; <name>=<value>]… Set-Cookie Header可以有一些对Cookie的附属说明: [; expires=<date>][; domain=<domain_name>] [; path=<some_path>][; secure][; httponly] 在客户端可以使用Javascript直接读写Cookie,使用的对象是document.cookie 详细的信息可以参考下面的链接: HTTP Cookies (Windows) HOWTO:防止在 Internet Explorer 中进行缓存 php中Cookie介绍及其使用
SQL排序还是Fetch Data后使用Intertal Table排序?
对SQL排序还是取出数据后使用Intertal Table排序两种方法,一般的意见认为是后者较好,下面是一个实际的测试数据,执行时间的单位是ms。 从实际效果看,确实是取出数据后使用Intertal Table排序的效率较高,不过我比较疑惑的是,为什么在数据库端排序反而慢呢? 是因为排序语句影响了数据按照物理存储顺序大量读取吗?Oracle不至于那么傻吧,它完全可以先取出所有的数据,然后在内存中进行排序,就像我们刻意先取到Internal Table然后再排序一样,难道是担心取出的数据太多乃至于内存空间不够吗? 看来有时间还需要找一下资料,看一下Oracle内部对排序是怎么处理的。
关于加密的一些基础知识
下面的表格引用于:.NET Cryptography 命名空间概览 自己主要琢磨了一下非对称加密过程中信息传递的顺序,假设A向B发送信息,大致过程是这样的: 1、A向B发起一个获取公匙的请求 2、B生成一对公匙和私匙,同时将公匙发送给A 3、A使用接收到的公匙对传递信息进行加密后发送 4、B接收信息,使用保存的私匙进行解密 考虑到非对称加密速度较慢,一种比较折衷的办法是需要传递的信息采用对称加密,但是公匙采用非对称加密传递,整个过程变成这样: 1、A生成一对公匙和私匙,然后向B发起一个获取对称加密钥匙的请求,同时发送公匙 2、B生成对称加密钥匙,并使用接收到的公匙进行加密后发送给A 3、A对接收到的信息使用私匙进行解密,获取对称加密钥匙;据此对传递信息进行加密后发送 4、B接收信息,使用保存的对称加密钥匙进行解密 参考资料:网络安全之密码学基础
在ABAP的SQL语句中写Oracle Hints
用过的两个写法: 1、指定使用全表扫描:%_HINTS ORACLE ‘FULL(table_name)’ 2、指定索引:%_HINTS ORACLE ‘INDEX(table_name index_name)‘ 其他Oracle Hints的写法可以参见这篇文章:Oracle Hint的用法
使用ABAP向EXCEL单元格内写入回车符的方法
REPORT z_xam_test1. INCLUDE z_excel_header. DATA: g_str1(20) TYPE c VALUE ‘hello’, g_str2 TYPE x VALUE ’0A’, g_str3(20) TYPE c VALUE ‘world’, g_str(50) TYPE c. START-OF-SELECTION. CONCATENATE g_str1 g_str2 g_str3 INTO g_str. PERFORM open_blank_books. PERFORM fill_cell USING 1 1 g_str.
使用Javascript动态创建表格,不同的方法,巨大的运行时间差异!
本来是想测试一下使用Javascript生成一个比较大的表格,大概需要多长时间,一直认为这会是一个比较固定的时间。期间用了几种不同的方法,发现效率相差太大了。下面是测试的具体说明: 目标:生成一个2000*5的表格,每个单元格的内容是行号+逗号+列号 方法一:使用createElement生成表格,使用insertRow和insertCell方法生成行列,单元格的内容使用innerHTML属性进行填充。 方法二:使用createElement生成表格,使用CreateElement方法生成行列,单元格的内容使用了createTextNode方法填充。 方法三:拼接表格innerHTML属性的字符串,使用字符串 += 操作符链接字符串 方法四:拼接表格innerHTML属性的字符串,各个字符串追加数组里面,最后调用数组的join方法生成目标字符串。 运行时间比较: 方法 运行时间(ms) 方法一 93037 方法二 3341 方法三 2795 方法四 500 具体的程序如下: <html> <head> <title>test page</title> <script type=’text/javascript’> <!– function createTable() { var t = document.createElement(‘table’); for (var i = 0; i < 2000; i++) { var r = t.insertRow(0); for (var j = 0; j < [...]