<?xml version="1.0" encoding="UTF-8" ?>
  <rss version="2.0">
    <channel>

<title>月影 Rocky 的笔记</title>
      <link>http://rocktech.ycool.com/</link>
      <description><![CDATA[]]></description>
      <pubDate>Thu, 19 Jun 2008 16:06:28 GMT</pubDate>
      <lastBuildDate>Thu, 19 Jun 2008 16:06:28 GMT</lastBuildDate>
      <image>
        <url>http://sta.yculblog.com/images/logo/general-88x31.gif</url>
        <title>月影 Rocky 的笔记</title>
        <link>http://rocktech.ycool.com/</link>
      </image>
<item>
        <title>Jimmy Graphic 招聘</title>
        <link>http://rocktech.ycool.com/post.1952593.html</link>
        <description><![CDATA[职位描述(点击原文查看详情)...
]]></description>
        <guid isPermaLink="true">http://rocktech.ycool.com/post.1952593.html</guid>
        <pubDate>Thu, 19 Jun 2008 14:06:53 GMT</pubDate>

      </item>

      <item>
        <title>关于SAP的一些概念</title>
        <link>http://rocktech.ycool.com/post.1851392.html</link>
        <description><![CDATA[SAP Business Suite <br />
当前SAP公司的主力产品包，里面包含了mySAP ERP, mySAP CRM, mySAP SCM .... 几乎是SAP的所有东东。如果购买的是此种许可证，就意味着几乎可以用SAP的所有产品的功能－－某些特定行业的特定引擎（Engine）除外。 <br />
<br />
mySAP ERP <br />
主要就是以前的SAP R/3加上SAP最新的集成平台SAP Netweaver。 <br />
<br />
mySAP CRM <br />
之所以叫mySAP CRM而不是SAP CRM，就是为了突出SAP的CRM产品是以客户为中心的、灵活可配置的&hellip;&hellip;所以叫&rdquo;my***&ldquo;，mySAP CRM主要就是包括SAP的CRM产品功能包（Logic Box）再加上SAP最新的集成平台SAP Netweaver。 <br />
<br />
SAP Netweaver <br />
是SAP 最新的集成应用平台，一方面SAP用这么一个平台来集成SAP与非SAP（Oracle, Siebel, ...）应用系统；另一方面SAP把一些各个系统都可以通用的功能放入此平台中，如SAP门户（ SAP Portal）可以访问各种SAP应用系统（ERP, CRM...）及非SAP系统、SAP商务智能（SAP BI）可以对来自各种系统的数据进行分析&hellip;&hellip; <br />
<br />
mySAP.com <br />
这是前几年SAP为了迎合网络风潮而给自己的产品包改的名字，它跟www.mySAP.com这个网站没有任何实质关...它就是现在的SAP Business Suite。 <br />
<br />
SAP R/3 <br />
以前SAP公司的主力产品，包括大家非常熟悉的SD, MM, FI, CO, PP..等模块。但从今年起SAP已经不再单独出售R/3的许可证，代之以mySAP ERP。也就意味着客户无论选择SAP的何种产品（mySAP ERP, mySAP CRM...）都会得到SAP Netweaver，其中包括了SAP Portal 与SAP BW的使用许可。 <br />
<br />
SAP All-in One (SAP A1) <br />
在SAP R/3的基础上，SAP做了一些预配置，然后按不同行业交给咨询合作伙伴，由他们再加一些预配置，然后以咨询合作伙伴的名义将加了预配置的系统销售给用户。内含mySAP CRM的部分功能。 <br />
<br />
SAP Business One (SAP B1) <br />
在SAP收购的另一家公司的产品基础上改造而成，优点是价格低廉，并且由于数据结构相同可以无缝地将系统升级至SAP A1, SAP Business Suite。SAP B1中有CRM功能，但远不及mySAP CRM系统中的那么强大。 <br />
<br />
SAP Release版本之间的差异和关系： <br />
版本4.6C以前是所谓传统的R3系统，建立在SAP Basis的基础上； <br />
<br />
版本4.70以后，改为R3 Enterprise,最大的变化是SAP WEB AS取代了传统的Basis，核心业务功能模块也作了划分； <br />
<br />
R3 Enterprise之后改称为mySAP ERP2004,基础平台演变成SAP NetWeaver,并产生SAP ECC (ECC = ERP Central Component) ，作为Enterprise的替代，并集成了BW,SEM和ITS； <br />
<br />
2005第4季度开始mySAP ERP2005的准备，最大的变化将是全面转向ESA体系（基于消息机制的企业应用体系），并引入了新的功能模块，比如PLM和SRM....
]]></description>
        <guid isPermaLink="true">http://rocktech.ycool.com/post.1851392.html</guid>
        <pubDate>Tue, 05 Feb 2008 05:02:16 GMT</pubDate>

      </item>

      <item>
        <title>SPAM SAINT升级Patch/Addon失败了怎么办？</title>
        <link>http://rocktech.ycool.com/post.1845305.html</link>
        <description><![CDATA[<p>昨天安装BI 3.5 Business Content 的Addon补丁包，升级前系统自检所有依赖的补丁包都已经安装，结果升到一半显示错误，错误提示是&ldquo;<font face="Arial">GETWA_NOT_ASSIGNED</font>&rdquo;，查了下资料，说要打SAP BW Patch 13补丁(怎么升级前不说清楚！)。</p>
<p>于是下了BW Patch 13的文件下来，发现Saint/Spam被锁住了。提示：&ldquo;OCS locked by user&nbsp;XXX with transaction SAINT&rdquo;，并且在SAINT里面不能Reset那个安装任务，无奈，这下SAINT和SPAM都不能用了。</p>
<p>记得sydongsun在他的一片博文中说过如何升级BI Addon(<a target="_blank" href="http://www.askguoyu.net/weblog/2007/09/sap_ecc60.html">详见这里</a>)，里面详细说道如果碰到升级补丁、插件包发生错误后进退两难如何解决，用他的办法，在SE37中运行SPAM_RESET_STATUS，IV_FORCE设置为X，运行后，发现还是提示&ldquo;OCS locked by user&nbsp;XXX with transaction SAINT&rdquo;，于是从这个提示入手，Google了一下，终于找到解决方法：<br />
原文如下：<br />
In Se37,Use the function module OCS_RESET_QUEUE -&gt; Single Test <br />
with the parameters <br />
IV_TOOL=SAINT, IV_FORCE=X </p>
<p>用这种方法，终于Reset了所有的OCS队列。</p>
<p>还有人提出另外一种解决方案，如下所示，我没有试过，不知道是否可以，大意就是删掉PAT01、PAT03、PAT10三个表里的和那个Patch相关的数据即可：</p>
<p>We were facing a problem in(Test Server) due to wrongly defined <br />
queu. Basis Patches 32 and 33 were supposed to be applied <br />
separately, but by mistake we defined a queue for Basis 32 to <br />
Basis 41 and HR26 to HR40. Due to this que was stuck in <br />
DDIC_IMPORT phase. <br />
<br />
We solved this problem by deleting entries with status ='?' in <br />
PAT01, PAT03 and PAT10 tables. <br />
This way we were able to delete the particular queue and spam was <br />
reset. This can be a last option to solve this problem..</p>...
]]></description>
        <guid isPermaLink="true">http://rocktech.ycool.com/post.1845305.html</guid>
        <pubDate>Thu, 24 Jan 2008 16:01:52 GMT</pubDate>
<category>sap</category>

        <category>升级失败</category>
      </item>

      <item>
        <title>SAP DOI调用Excel例子</title>
        <link>http://rocktech.ycool.com/post.1843783.html</link>
        <description><![CDATA[DOI功能很强大，可以做到很多功能，而且可以使用VBA扩展新功能，可以做出如下效果：<br />
<img alt="DOI效果图" border="0" src="http://node0.foto.ycstatic.com/200801/22/3/20426963.jpg" /><br />
<br />
一个简单的DOI模板代码如下：<br />
<br />
<p><font face="Arial">*&amp;---------------------------------------------------------------------*<br />
*&amp; Report&nbsp; Z_Rocky_TEST<br />
*&amp;<br />
*&amp;---------------------------------------------------------------------*<br />
*&amp;&nbsp;Rocky Wang<br />
*&amp;&nbsp;RockyTech&nbsp;(AT) 126.com<br />
*&amp; Blog : RockTech.yculblog.com<br />
*&amp;---------------------------------------------------------------------*</font></p>
<p><font face="Arial">REPORT&nbsp; z_rocky_test.<br />
TABLES: makt.<br />
***-----------------------------------***<br />
***&nbsp; excel related declaring<br />
***-----------------------------------***<br />
TYPE-POOLS: slis,vrm, sbdst, soi.<br />
CONSTANTS document_name(30) VALUE 'TEST'.<br />
CONSTANTS inplace VALUE 'X'.<br />
DATA: flag .</font></p>
<p><font face="Arial">DATA: container&nbsp;&nbsp; TYPE REF TO cl_gui_custom_container,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; control&nbsp;&nbsp;&nbsp;&nbsp; TYPE REF TO i_oi_container_control,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document&nbsp;&nbsp;&nbsp; TYPE REF TO i_oi_document_proxy,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; spreadsheet TYPE REF TO i_oi_spreadsheet,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TYPE REF TO i_oi_error,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; errors TYPE REF TO i_oi_error OCCURS 0 WITH HEADER LINE.</font></p>
<p><font face="Arial">CONTROLS:&nbsp;&nbsp; exceldata TYPE TABLEVIEW USING SCREEN 0100.<br />
DATA:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tablename(10), okcode(15),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; row(4), column(4), data(39).</font></p>
<p><font face="Arial">* spreadsheet interface structures for Excel data input<br />
DATA: rangeitem TYPE soi_range_item.<br />
DATA: ranges TYPE soi_range_list.<br />
DATA: excel_input TYPE soi_generic_table.<br />
DATA: excel_input_wa TYPE soi_generic_item.<br />
DATA: initialized(1), retcode TYPE soi_ret_string.<br />
DATA: item_url(256), already_done, newname(40).<br />
DATA&nbsp; document_type(80).<br />
DATA: app TYPE vrm_id, applist TYPE vrm_values.<br />
DATA: excel(80) VALUE 'Excel.Sheet'.<br />
DATA: line_count TYPE i,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; column_count TYPE i.</font></p>
<p><font face="Arial">DATA: ok_code TYPE sy-ucomm,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; save_ok TYPE sy-ucomm.</font></p>
<p><font face="Arial">CLASS c_oi_errors DEFINITION LOAD.</font></p>
<p><font face="Arial">DATA: BEGIN OF itab OCCURS 0.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INCLUDE STRUCTURE makt.<br />
DATA: END&nbsp;&nbsp; OF itab.</font></p>
<p><font face="Arial">SELECT-OPTIONS matnr FOR makt-matnr.</font></p>
<p><font face="Arial">START-OF-SELECTION.<br />
&nbsp; PERFORM getdata.</font></p>
<p><font face="Arial">&nbsp; CALL SCREEN 100.</font></p>
<font face="Arial">
<p><br />
*&amp;---------------------------------------------------------------------*<br />
*&amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Form&nbsp; getdata<br />
*&amp;---------------------------------------------------------------------*<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text<br />
*----------------------------------------------------------------------*<br />
*&nbsp; --&gt;&nbsp; p1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text<br />
*&nbsp; &lt;--&nbsp; p2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text<br />
*----------------------------------------------------------------------*<br />
FORM getdata .<br />
&nbsp; SELECT *<br />
&nbsp;&nbsp;&nbsp; FROM makt<br />
&nbsp;&nbsp;&nbsp; INTO TABLE itab<br />
&nbsp;&nbsp; WHERE makt~matnr IN matnr.<br />
ENDFORM.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot; getdata<br />
*&amp;---------------------------------------------------------------------*<br />
*&amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Module&nbsp; STATUS_0100&nbsp; OUTPUT<br />
*&amp;---------------------------------------------------------------------*<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text<br />
*----------------------------------------------------------------------*<br />
MODULE status_0100 OUTPUT.<br />
&nbsp; SET PF-STATUS 'SA1'.<br />
&nbsp; IF flag = space .<br />
&nbsp;&nbsp;&nbsp; PERFORM create_basic_objects USING ''&nbsp; '' '' '' document_name.<br />
&nbsp;&nbsp;&nbsp; PERFORM output_to_excel.<br />
&nbsp; ENDIF.<br />
ENDMODULE.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;STATUS_0100 OUTPUT</p>
<p>*&amp;---------------------------------------------------------------------*<br />
*&amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Module&nbsp; USER_COMMAND_0100&nbsp; INPUT<br />
*&amp;---------------------------------------------------------------------*<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text<br />
*----------------------------------------------------------------------*<br />
MODULE user_command_0100 INPUT.<br />
&nbsp; flag = 'X'.<br />
&nbsp; save_ok = ok_code.<br />
&nbsp; CLEAR ok_code.<br />
&nbsp; CASE save_ok.<br />
&nbsp;&nbsp;&nbsp; WHEN 'STOP' .<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF NOT document IS INITIAL.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CALL METHOD document-&gt;close_document.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FREE document.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ENDIF.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF NOT control IS INITIAL.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CALL METHOD control-&gt;destroy_control.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FREE control.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ENDIF.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LEAVE PROGRAM.<br />
&nbsp;&nbsp;&nbsp; WHEN 'BACK' .<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF NOT document IS INITIAL.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CALL METHOD document-&gt;close_document.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FREE document.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ENDIF.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF NOT control IS INITIAL.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CALL METHOD control-&gt;destroy_control.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FREE control.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ENDIF.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SET SCREEN 0.&nbsp; &quot; quit the program<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;set screen 1000.<br />
&nbsp; ENDCASE.</p>
<p>ENDMODULE.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot; USER_COMMAND_0100&nbsp; INPUT<br />
*&amp;---------------------------------------------------------------------*<br />
*&amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Form&nbsp; CREATE_BASIC_OBJECTS<br />
*&amp;---------------------------------------------------------------------*<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text<br />
*----------------------------------------------------------------------*<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;P_APP_NAME&nbsp;&nbsp; text<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;P_CLASSNAME&nbsp; text<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;P_CLASSTYPE&nbsp; text<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;P_OBJ_KEY&nbsp;&nbsp;&nbsp; text<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;P_DOCNAME&nbsp;&nbsp;&nbsp; text<br />
*----------------------------------------------------------------------*<br />
FORM&nbsp; create_basic_objects USING p_app_name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p_classname<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p_classtype<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p_obj_key<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p_docname.</p>
<p>&nbsp; CHECK initialized IS INITIAL.<br />
* first get the SAP DOI i_oi_container_control interface<br />
&nbsp; CALL METHOD<br />
&nbsp;&nbsp;&nbsp; c_oi_container_control_creator=&gt;get_container_control<br />
&nbsp;&nbsp;&nbsp; IMPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; control = control<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error&nbsp;&nbsp; = error.<br />
* check no errors occured<br />
&nbsp; CALL METHOD error-&gt;raise_message<br />
&nbsp;&nbsp;&nbsp; EXPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type = 'E'.<br />
&nbsp; CREATE OBJECT container<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXPORTING container_name = 'CONTAINER'.<br />
&nbsp; DATA l_app_name(200).<br />
&nbsp; IF p_app_name IS INITIAL.<br />
&nbsp;&nbsp;&nbsp; l_app_name = 'TEST'.<br />
&nbsp; ELSE.<br />
&nbsp;&nbsp;&nbsp; l_app_name = p_app_name.<br />
&nbsp; ENDIF.<br />
&nbsp; CALL METHOD control-&gt;init_control<br />
&nbsp;&nbsp;&nbsp; EXPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r3_application_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = l_app_name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inplace_enabled&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = inplace<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inplace_scroll_documents = 'X'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = container<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; register_on_close_event&nbsp; = 'X'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; register_on_custom_event = 'X'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no_flush&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 'X'<br />
&nbsp;&nbsp;&nbsp; IMPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = errors.<br />
* save error object in collection<br />
&nbsp; APPEND errors.<br />
&nbsp; CLEAR item_url.<br />
&nbsp; DATA: bds_instance TYPE REF TO cl_bds_document_set.<br />
&nbsp; DATA: doc_signature TYPE sbdst_signature,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wa_doc_signature LIKE LINE OF doc_signature,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc_components TYPE sbdst_components,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc_uris TYPE sbdst_uri,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wa_doc_uris LIKE LINE OF doc_uris.<br />
<br />
*以下三个值为Tcode:OAOR里面新建模板文件的参数<br />
<br />
&nbsp; DATA: doc_classname TYPE sbdst_classname VALUE 'PICTURES',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc_classtype TYPE sbdst_classtype VALUE 'OT',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc_object_key TYPE sbdst_object_key VALUE 'ZEXCEL'.</p>
<p>&nbsp; wa_doc_signature-prop_name = 'DESCRIPTION'.<br />
&nbsp; app = 'excel'.<br />
&nbsp; IF app = 'excel'.<br />
&nbsp;&nbsp;&nbsp; document_type = excel.<br />
&nbsp;&nbsp;&nbsp; wa_doc_signature-prop_value = p_docname.<br />
&nbsp; ELSE.<br />
&nbsp; ENDIF.<br />
&nbsp; APPEND wa_doc_signature TO doc_signature.<br />
&nbsp; CREATE OBJECT bds_instance.<br />
&nbsp; CALL METHOD bds_instance-&gt;get_info<br />
&nbsp;&nbsp;&nbsp; EXPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; classname&nbsp; = doc_classname<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; classtype&nbsp; = doc_classtype<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; object_key = doc_object_key<br />
&nbsp;&nbsp;&nbsp; CHANGING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; components = doc_components<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; signature&nbsp; = doc_signature.</p>
<p>&nbsp; CALL METHOD bds_instance-&gt;get_with_url<br />
&nbsp;&nbsp;&nbsp; EXPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; classname&nbsp; = doc_classname<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; classtype&nbsp; = doc_classtype<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; object_key = doc_object_key<br />
&nbsp;&nbsp;&nbsp; CHANGING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uris&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = doc_uris<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; signature&nbsp; = doc_signature.</p>
<p>&nbsp; FREE bds_instance.</p>
<p>&nbsp; READ TABLE doc_uris INTO wa_doc_uris INDEX 1.</p>
<p>&nbsp; item_url = wa_doc_uris-uri.</p>
<p>* ask the SAP DOI container for a i_oi_document_proxy for Excel<br />
&nbsp; CALL METHOD control-&gt;get_document_proxy<br />
&nbsp;&nbsp;&nbsp; EXPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document_type&nbsp; = 'Excel.Sheet'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no_flush&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 'X'<br />
&nbsp;&nbsp;&nbsp; IMPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document_proxy = document<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = errors.<br />
&nbsp; APPEND errors.</p>
<p>* open a document saved in business document service.<br />
&nbsp; CALL METHOD document-&gt;open_document<br />
&nbsp;&nbsp;&nbsp; EXPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; open_inplace = inplace<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document_url = item_url.</p>
<p>&nbsp; DATA: has TYPE i.<br />
&nbsp; CALL METHOD document-&gt;has_spreadsheet_interface<br />
&nbsp;&nbsp;&nbsp; EXPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no_flush&nbsp;&nbsp;&nbsp;&nbsp; = ''<br />
&nbsp;&nbsp;&nbsp; IMPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; is_available = has<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = errors.<br />
&nbsp; APPEND errors.</p>
<p>&nbsp; CALL METHOD document-&gt;get_spreadsheet_interface<br />
&nbsp;&nbsp;&nbsp; EXPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no_flush&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = ' '<br />
&nbsp;&nbsp;&nbsp; IMPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sheet_interface = spreadsheet<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = errors.<br />
&nbsp; APPEND errors.<br />
* Activate&nbsp; sheet 1<br />
&nbsp; CALL METHOD spreadsheet-&gt;select_sheet<br />
&nbsp;&nbsp;&nbsp; EXPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp; '表整理'<br />
*&nbsp;&nbsp;&nbsp; NO_FLUSH = ' '<br />
&nbsp;&nbsp;&nbsp; IMPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error&nbsp;&nbsp;&nbsp; = errors.<br />
*&nbsp;&nbsp;&nbsp; RETCODE&nbsp; =<br />
&nbsp; .<br />
&nbsp; APPEND errors.</p>
<p>&nbsp; LOOP AT errors.<br />
&nbsp;&nbsp;&nbsp; CALL METHOD errors-&gt;raise_message<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type = 'E'.<br />
&nbsp; ENDLOOP.<br />
&nbsp; FREE errors.<br />
&nbsp; initialized = 'X'.<br />
ENDFORM.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;CREATE_BASIC_OBJECTS</p>
<p>*&amp;---------------------------------------------------------------------*<br />
*&amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Form&nbsp; output_to_excel<br />
*&amp;---------------------------------------------------------------------*<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fill the EXCEL sheet<br />
*----------------------------------------------------------------------*<br />
FORM output_to_excel.<br />
&nbsp; DATA num TYPE i VALUE 1.<br />
&nbsp; LOOP AT itab.<br />
&nbsp;&nbsp;&nbsp; num = num + sy-tabix.<br />
&nbsp;&nbsp;&nbsp; PERFORM fill_cell USING num 1 itab-matnr.<br />
&nbsp;&nbsp;&nbsp; PERFORM fill_cell USING num 2 itab-spras.<br />
&nbsp;&nbsp;&nbsp; PERFORM fill_cell USING num 3 itab-maktx.<br />
&nbsp;&nbsp;&nbsp; PERFORM fill_cell USING num 4 itab-maktg.<br />
&nbsp;&nbsp;&nbsp; num = 1.<br />
&nbsp; ENDLOOP.<br />
ENDFORM.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;output_to_excel</p>
<p>*&amp;---------------------------------------------------------------------*<br />
*&amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Form&nbsp; FILL_CELL<br />
*&amp;---------------------------------------------------------------------*<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text<br />
*----------------------------------------------------------------------*<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;I&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;J&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;VAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text<br />
*----------------------------------------------------------------------*<br />
FORM fill_cell&nbsp; USING i j val.<br />
&nbsp; DATA: columns_number TYPE i,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rows_number&nbsp;&nbsp;&nbsp; TYPE i.</p>
<p>&nbsp; columns_number = 1.<br />
&nbsp; rows_number = 1.</p>
<p>&nbsp; CALL METHOD spreadsheet-&gt;insert_range_dim<br />
&nbsp;&nbsp;&nbsp; EXPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name&nbsp;&nbsp;&nbsp;&nbsp; = 'cell'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no_flush = 'X'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; top&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = i<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; left&nbsp;&nbsp;&nbsp;&nbsp; = j<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rows&nbsp;&nbsp;&nbsp;&nbsp; = rows_number<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; columns&nbsp; = columns_number<br />
&nbsp;&nbsp;&nbsp; IMPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error&nbsp;&nbsp;&nbsp; = errors.<br />
&nbsp; APPEND errors.</p>
<p>&nbsp; REFRESH: ranges, excel_input.<br />
&nbsp; rangeitem-name = 'cell'.<br />
&nbsp; rangeitem-columns = 1.<br />
&nbsp; rangeitem-rows = 1.<br />
&nbsp; APPEND rangeitem TO ranges.</p>
<p>&nbsp; excel_input_wa-column = 1.<br />
&nbsp; excel_input_wa-row = 1.<br />
&nbsp; excel_input_wa-value = val.<br />
&nbsp; APPEND excel_input_wa TO excel_input.</p>
<p>* set data<br />
&nbsp; CALL METHOD spreadsheet-&gt;set_ranges_data<br />
&nbsp;&nbsp;&nbsp; EXPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ranges&nbsp;&nbsp; = ranges<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; contents = excel_input<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no_flush = 'X'<br />
&nbsp;&nbsp;&nbsp; IMPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error&nbsp;&nbsp;&nbsp; = errors.<br />
&nbsp; APPEND errors.</p>
<p>&nbsp; CALL METHOD spreadsheet-&gt;fit_widest<br />
&nbsp;&nbsp;&nbsp; EXPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name&nbsp;&nbsp;&nbsp;&nbsp; = space<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no_flush = 'X'.</p>
<p>&nbsp; REFRESH: ranges, excel_input.</p>
<p>ENDFORM.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;fill_cell</p>
</font>...
]]></description>
        <guid isPermaLink="true">http://rocktech.ycool.com/post.1843783.html</guid>
        <pubDate>Mon, 21 Jan 2008 19:01:09 GMT</pubDate>
<category>abap</category>

        <category>doi</category>
      </item>

      <item>
        <title>Component 0DAT (version A) does not exist in the database</title>
        <link>http://rocktech.ycool.com/post.1834535.html</link>
        <description><![CDATA[<font color="#ff0000">注意：本文内容已过时，经后来查证，出现该错误是由于BW的BI Content没有安装。</font><br />
<br />
我在新安装好的BW服务器(BW3.5)上做了一个Query，运行时却发现出错，提示如下： <br />
Component 0DAT (version A) does not exist in the database <br />
<br />
如下图所示： <br />
<img alt="Component 0DAT (version A) does not exist in the database  " border="0" src="http://www.rockywang.net/pic/0dat1.jpg" /><br />
<br />
看描述应该是是0DAT这个变量没有激活或者不存在。查了下资料说0DAT是Calendar Day(0CALDAY)的变量。 <br />
<br />
一开始觉得可能是Business Content没有安装，于是到RSA1里面去找0DAT。在Business Content-&gt;Object Types-&gt;Query Elements-&gt;Variable-&gt;Select Objects 里面，找了半天，没有找到0DAT，可能我这个BW安装的有问题，SDN上有人说在这里有的，我到另一个BI 7.0系统里0DAT就在这里面，直接安装即可，可是我的BW 3.5 这里就是没0DAT这个变量。 <br />
<br />
没办法，在Query Designer里面想自己建一个0DAT，却发现不能新建以0开头的变量。于是Google了一下，发现一个Notes就是讲这个的，Notes编号828033。Notes里面讲到： <br />
<br />
The variable 0DAT must be created in the system. <br />
1) Switch transport/systemtype from CUSTOMER to SAP to access namespace <br />
starting with 0. <br />
2) Create variable 0DAT as time variable via BEx query analyzer. <br />
<br />
要改系统参数了！这不是要重启SAP了嘛，还好我这个SAP是个IDES，无所谓了，于是到RZ11里面查看transport/systemtype这个参数，默认是Customer，再进RZ10，Profile选当前实例的配置文件，再选中Extended maintenance，进去修改。新建一个参数transport/systemtype，值为SAP，检查后报错，说这个参数不能手工改&hellip;...郁闷了。 <br />
<br />
没办法，既然在业务界面里面不能手工改，只能直接改服务器上的配置文件了。在RZ10里面选当前配置文件后，点Administration Data，再点Display进去后找到了配置文件的路径，于是远程桌面登录到IDES安装的系统，找到那个配置文件后，添加一句话： <br />
transport/systemtype = SAP <br />
<br />
然后重启SAP服务器，再进RZ11里面查看，transport/systemtype参数的值变成SAP了 ：）<br />
在Query Designer里面新建一个0DAT，参照BI 7.0下0DAT的属性新建一个，具体属性如下：&nbsp;<br />
<br />
<img alt="" border="0" src="http://www.rockywang.net/pic/0dat2.jpg" /><br />
<br />
有一点需要说明，Processing By 属性的SAP Exit 这个值是不会显示在下拉列表中供选择的，做成Customer Exit就可以了。(如果实在要做成SAP Exit，请继续看后文) <br />
<br />
新建完后，记得要删掉在配置文件里面添加的那句 &ldquo;transport/systemtype = SAP&rdquo; 再重启服务器。 <br />
<br />
后来上网有查了点资料，发现了个更简单的办法：Info Object使用的变量都是在RSZGLOBV这个表里面定义好的，如果要新建，直接把内容插入这个表里就好了&hellip;...就没必要改什么参数再重启SAP了(那个Notes是谁写的？！)。 <br />
<br />
修改办法如下：进入RSZGLOBV这个表，添加下面选中的两行内容即可，没有显示的列均为默认参数，Processing Type选择4表示SAP Exit，3表示Customer Exit。&nbsp;<br />
<br />
<img alt="" border="0" src="http://www.rockywang.net/pic/0dat3.jpg" /><br />
<br />
至此，此问题完美解决。&nbsp;<br />
<br />
参考资料：<font face="Arial"><a href="https://www.sdn.sap.com/irj/sdn/thread?messageID=966023">https://www.sdn.sap.com/irj/sdn/thread?messageID=966023</a></font><br />...
]]></description>
        <guid isPermaLink="true">http://rocktech.ycool.com/post.1834535.html</guid>
        <pubDate>Sat, 05 Jan 2008 17:01:07 GMT</pubDate>
<category>error</category>

        <category>sap</category>

        <category>bw</category>

        <category>0dat</category>
      </item>

      <item>
        <title>ABAP中如何获得URL地址对应网页的HTML代码</title>
        <link>http://rocktech.ycool.com/post.1796361.html</link>
        <description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最近有一个朋友问我，在ABAP中如何获取一个URL地址所对应网页HTML代码的内容。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在SAP R/3系统中有一个Function Module 叫 HTTP_GET ，使用该FM就能获得一个外网的URL内容<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需要注意的是，<font face="Arial">&nbsp;RFC_DESTINATION参数可以在SM59中定义，经常用的有SAPHTTPA和SAPHTTP。前者是从SAP服务器访问，后者是从客户端访问。如果SAP服务器不能访问外网，但是客户端可以，就要使用SAPHTTP。</font>...
]]></description>
        <guid isPermaLink="true">http://rocktech.ycool.com/post.1796361.html</guid>
        <pubDate>Tue, 06 Nov 2007 09:11:21 GMT</pubDate>
<category>html</category>

        <category>get</category>

        <category>sap</category>

        <category>abap</category>
      </item>

      <item>
        <title>SAP中和计量单位有关的表</title>
        <link>http://rocktech.ycool.com/post.1686176.html</link>
        <description><![CDATA[<font face="Arial">SAP中和计量单位有关的表<br />
<br />
T006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 计量单位 <br />
T006_OIB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 计量单位，附加定义<br />
T006A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;分配内部到语言相关单位<br />
(内部单位转换到外部贸易、技术单位用T006A表，比如要显示CAR则把数据库中的KAR在次表中转换)<br />
T006B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;贸易分配到内部测量单位&nbsp;&nbsp;&nbsp;<br />
( 外部贸易单位和转换到内部单位就是用T006B表，比如 PC转到ST，CAR转到KAR等)<br />
<br />
T006C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;外部技术到内部测量单位的分配<br />
T006D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;尺寸<br />
T006D_OIB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 附加维数<br />
T006E&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 计量单位系统（组件，映射）<br />
T006EE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 计量单位系统（实用程序）<br />
T006ET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;计量单位系统（使用程序 -&gt; 文<br />
T006I&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;计量单位的 ISO 代码<br />
T006J&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;ISO 测量文本单位码<br />
T006M&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 计量单位组<br />
T006T&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 维数文本</font>...
]]></description>
        <guid isPermaLink="true">http://rocktech.ycool.com/post.1686176.html</guid>
        <pubDate>Wed, 30 May 2007 10:05:58 GMT</pubDate>

      </item>

      <item>
        <title>sap里部分函数说明</title>
        <link>http://rocktech.ycool.com/post.1676451.html</link>
        <description><![CDATA[ABAP_DOCU_DOWNLOAD - Download ABAP documentationin HTML format. 

ARFC_GET_TID - will return the IP addressof the terminal in hex.   

BAL_* -All function modules used for SAP's application logging can be found here. 

BP_EVENT_RAISE -Trigger an event from ABAP/4 program 

BP_JOBLOG_READ -Fetch job log executions
.........
]]></description>
        <guid isPermaLink="true">http://rocktech.ycool.com/post.1676451.html</guid>
        <pubDate>Wed, 16 May 2007 05:05:37 GMT</pubDate>

      </item>

      <item>
        <title>SAP 中的增强</title>
        <link>http://rocktech.ycool.com/post.1675833.html</link>
        <description><![CDATA[<p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1">sap的用户出口总共有三代: <br />
1、第一代 <br />
sap提供一个空代码的子过程，在这个子过程中用户可以添加自己的代码，控制自己的需求。这类增强都需要修改sap的标准代码。 <br />
示例：USEREXIT.. in SAPMV45A <br />
<br />
2、第二代 <br />
sap提供的是CUSTOMER-FUNCTION，它是通过SMOD和CMOD完成实现。 <br />
<br />
3、第三代 <br />
sap提供的第三代的用户出口就是BADI，他的调用方式是CALL METHOD (instance)，（相关的TCODE是SE18和SE19），可以通过EXIT_HANDLER这个单词查找BADI。&nbsp;<br />
<br />
<strong><font size="4">对于第一代增强，可以用以下方法查找增强：</font></strong><br />
打开欲增强的程序，点击工具栏上的&ldquo;Display Object List&rdquo;按钮，选择Subroutines，查找以&ldquo;UserExit&rdquo;开头的子程序，根据子程序前面的注释文档来查找用户出口<br />
<br />
<font size="4"><strong>对于第二代增强，可以用以下方法查找增强<br />
</strong></font><br />
用户增强通常包括下面3类,顾名思义,就是增强SAP的可能没有提供的功能(通过后台配置也不能实现). <br />
1.E Enhancement exits :就是常说User_exit (用户出口) <br />
使用SE37搜索EXIT*的函数大都是做exit用的,通常里面预包含了一个Z开头 <br />
的程序. SE16查询TFDIR(函数表)输入EXIT*也可. <br />
2.C GUI codes( GUI接口增强) <br />
3. S Subscreens (屏幕增强) <br />
Enhancement在表MODSAP可看到,而TFDIR字段 MAND(值为C表示此出口函数被激活).使用SMOD(CMOD)当然可激活exit function,有时候一时难以查询到相关Enhancement时可使用下面程序将出口函数激活.&nbsp;<br />
<br />
REPORT Zactexitfun . <br />
data ztfdir like tfdir . <br />
* select single * from tfdir into ztfdir <br />
* where FUNCNAME = <br />
* 'EXIT_SAPMM06E_013'. <br />
* ztfdir-MAND = 'C' . <br />
* update tfdir from ztfdir. <br />
* 将EXIT_SAPMM06E_013换成实际所需exit函数名 <br />
update tfdir set MAND = 'C'. <br />
where FUNcname = 'EXIT_SAPMM06E_013'.&nbsp;<br />
<br />
***当然也可SE16:MODSAP表enhancement输入EXIT_SAPMM06E_013然后得到enhancement name MM06E005后使用SMOD测试激活exit函数. <br />
增强相关函数和表格 <br />
Function: <br />
[1].DYNP_VALUES_READ <br />
[2]. MODX_ALL_ACTIVE_MENUENTRIES(菜单增强) <br />
[3].MODX_FUNCTION_ACTIVE_CHECK(出口函数增强) <br />
由于读者可能接触user exit最多,除了附录光盘有个查找ZFINDEXIT的程序外(有些exit使用它并不能找到),另一个直接有效的方法就是使用这个函数,SE37设好断点后执行tcode如其有exit就会调用此函数. <br />
[4].MODX_MENUENTRY_ACTIVE_CHECK(菜单增强) <br />
[5].MODX_SUBSCREEN_ACTIVE_CHECK(屏幕增强) <br />
Table: <br />
[1]. TFDIR-&gt;function module table <br />
[2]. MODSAP-&gt;sap enhancement table <br />
[3]. TSDIR-&gt;Dynpro Areas CALL CUSTOMER SUBSCREEN(屏幕增强) <br />
[4]. CUATEXTS-&gt; GUI Interface: Menu Texts Changed(GUI 菜单文本增强) <br />
<br />
***注意,为了确保一个出口被真正应用,必须同时激活相关程序(SE38)和出口函数(SMOD|CMOD,反正就是要保证tfdir-mandt=&rsquo;C&rsquo;,用程序也可.) <br />
<br />
<br />
<font size="4"><strong>对于第三代增强，详见<br />
<font face="Arial"><a href="http://blog.csdn.net/opparts/archive/2005/08/17/456467.aspx">http://blog.csdn.net/opparts/archive/2005/08/17/456467.aspx</a></font><br />
</strong></font></p>...
]]></description>
        <guid isPermaLink="true">http://rocktech.ycool.com/post.1675833.html</guid>
        <pubDate>Tue, 15 May 2007 04:05:20 GMT</pubDate>

      </item>

      <item>
        <title>如何删除 Outlook 中的重复邮件？</title>
        <link>http://rocktech.ycool.com/post.1675108.html</link>
        <description><![CDATA[最近到旺旺集团做项目，所有的通知和文档都是通过Exchange服务器发送，于是我的邮件客户端从 Outlook Express 改到 Outlook 2003 但从 Outlook Express 导入邮件后 Outlook 又自作聪明地从 Pop3 邮件服务器下载了一遍所有的邮件，于是我的邮箱就混乱不堪，多出了几百封重复的邮件。本来想用邮件规则来删除重复的邮件，结果发现不行，上网查了查怎么删除 Outlook 中的重复邮件，原来有很多插件可以干这个事情：<br />
<br />
For Outlook<br />
<a target="_blank" href="http://www.vaita.com/odir.asp">Outlook Duplicate Items Remover 1.2</a>&nbsp;&nbsp;<br />
英文版，我试了不错，不但可以删重复邮件，其他如会议、联系人、日程安排都能删除重复项，更关键的是这个软件是免费的。<br />
<br />
<a target="_blank" href="http://www.mapilab.com/outlook/duplicate_remover/">Duplicate Email Remover</a><br />
英文版，收费软件，试了下可以自己定义比较规则，但未注册只能删除10封邮件<br />
<br />
<a target="_blank" href="http://www.mapilab.com/outlook/remove_duplicates/">Duplicates Remover for Outlook</a><br />
英文版，收费软件，试了下可以自己定义比较规则，但未注册只能删除10封邮件，除了能删邮件还能删会议、联系人、日程安排等<br />
<br />
<a target="_blank" href="http://www.nomoredupes.com/default.aspx">NoMoreDupes for Outlook</a><br />
英文版，收费软件，15天试用<br />
<br />
<a target="_blank" href="http://rc30.jp/~ando/RepMailDel110.lzh">RepMailDel110.lzh</a><br />
免费，日文版，只能用于 Outlook 2003。虽然不能设置重复的判断条件，但缺省的判断比较确，而且比较删除的速度快。在中文环境下有些乱码，但功能正常。详细还可参看<a href="http://www.users.gr.jp/blogs/ando/archive/2005/03/23/10512.aspx">作者的Blog</a><br />
（使用方法：打开 Outlook 2003 ，&ldquo;工具&rdquo;菜单－〉&ldquo;选项&rdquo;子菜单－〉&ldquo;其他&rdquo;标签－〉&ldquo;高级选项&rdquo;按钮－〉&ldquo;COM 加载项&rdquo;按钮－〉&ldquo;添加&rdquo;按钮，然后选中下载解压后得到的DLL文件即可。安装成功后在&ldquo;工具&rdquo;菜单里会多出一个&ldquo;重複メール削除&rdquo;子菜单。）<br />
<br />
For Outlook Express<br />
<a target="_blank" href="http://www.mapilab.com/outlook/">Remove Duplicates from Outlook Express</a><br />
英文版，收费软件，没试过<br />
<br />
<a target="_blank" href="http://www.52z.com/Down/17777.html">Delete Duplicates for Outlook Express</a><br />
免费且有汉化版，试了下还可以，能简单的定义比较规则，不过速度有些慢<br />...
]]></description>
        <guid isPermaLink="true">http://rocktech.ycool.com/post.1675108.html</guid>
        <pubDate>Mon, 14 May 2007 01:05:31 GMT</pubDate>

      </item>

      <item>
        <title>SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY的比较 - MSSQL</title>
        <link>http://rocktech.ycool.com/post.1665422.html</link>
        <description><![CDATA[SQL Server 2000中，有三个比较类似的功能：他们分别是：SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY，它们都返回插入到 IDENTITY 列中的值。 <br />
<br />
IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。IDENT_CURRENT 不受作用域和会话的限制，而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。<br />
@@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。<br />
SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值<br />
<br />
SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是，SCOPE_IDENTITY 只返回插入到当前作用域中的值；@@IDENTITY 不受限于特定的作用域。<br />
<br />
例如，有两个表 T1 和 T2，在 T1 上定义了一个 INSERT 触发器。当将某行插入 T1 时，触发器被激发，并在 T2 中插入一行。此例说明了两个作用域：一个是在 T1 上的插入，另一个是作为触发器的结果在 T2 上的插入。<br />
<br />
假设 T1 和 T2 都有 IDENTITY 列，@@IDENTITY 和 SCOPE_IDENTITY 将在 T1 上的 INSERT 语句的最后返回不同的值。<br />
<br />
@@IDENTITY 返回插入到当前会话中任何作用域内的最后一个 IDENTITY 列值，该值是插入 T2 中的值。<br />
<br />
SCOPE_IDENTITY() 返回插入 T1 中的 IDENTITY 值，该值是发生在相同作用域中的最后一个 INSERT。如果在作用域中发生插入语句到标识列之前唤醒调用 SCOPE_IDENTITY() 函数，则该函数将返回 NULL 值。<br />
<br />
而IDENT_CURRENT('T1') 和 IDENT_CURRENT('T2') 返回的值分别是这两个表最后自增的值。<br />
<br />
有人做了实验：40条本地线程,40+40条远程线程同时并发测试,插入1200W行 ,得出的结论是:&nbsp;<br />
1.在典型的级联应用中.不能用@@IDENTITY,在CII850,256M SD的机器上1W多行时就会并发冲突.在P42.8C,512M DDR上,才6000多行时就并发冲突.&nbsp;<br />
2.SCOPE_IDENTITY()是绝对可靠的,可以用在存储过程中,连触发器也不用建,没并发冲突&nbsp;<br />
<br />
原文：<font face="Arial"><a href="http://blog.joycode.com/ghj/archive/2004/03/21/16745.aspx">http://blog.joycode.com/ghj/archive/2004/03/21/16745.aspx</a></font>...
]]></description>
        <guid isPermaLink="true">http://rocktech.ycool.com/post.1665422.html</guid>
        <pubDate>Sun, 29 Apr 2007 11:04:16 GMT</pubDate>

      </item>

      <item>
        <title>内表行数统计方法</title>
        <link>http://rocktech.ycool.com/post.1663981.html</link>
        <description><![CDATA[以下是统计内表行数常用的三种方法，如下： <br />
<br />
1．LOOP AT it_itab. <br />
<br />
g_lines2 = g_lines2 + 1. <br />
<br />
ENDLOOP. <br />
<br />
该方法是通过循环内部表自己累加行数。 <br />
<br />
2．DESCRIBE TABLE it_itab　LINES g_lines1 . 该语句通过获得内部表的属性，将内部表行数赋值给 g_lines1 ， g_lines1 为I型变量。 <br />
<br />
3． g_lines3 = lines( it_itab ). 使用函数来计算内部表行数。 <br />
<br />
以上三种方法中，第一种方法不推荐使用，推荐使用后两种方法。&nbsp;<br />
<br />
代码示例：<br />
<br />
REPORT zmauricetest. <br />
<br />
TABLES vbak. <br />
DATA: g_lines1 TYPE i, <br />
g_lines2 TYPE i VALUE 0, <br />
g_lines3 TYPE i, <br />
g_date TYPE d VALUE '19970121', <br />
g_tabix LIKE sy-tabix. <br />
<br />
DATA it_tab LIKE vbak OCCURS 0 WITH HEADER LINE. <br />
<br />
SELECT * FROM vbak INTO TABLE it_tab. <br />
<br />
LOOP AT it_tab. <br />
g_tabix = sy-tabix. <br />
<br />
IF it_tab-audat &lt;&gt; g_date. <br />
DELETE it_tab INDEX g_tabix. <br />
CONTINUE. <br />
ENDIF. <br />
<br />
g_lines2 = g_lines2 + 1. <br />
WRITE:/ it_tab-vbeln,it_tab-audat. <br />
<br />
ENDLOOP. <br />
<br />
DESCRIBE TABLE it_tab LINES g_lines1. <br />
<br />
g_lines3 = LINES( it_tab ). <br />
<br />
WRITE :/ g_lines1,g_lines2,g_lines3. <br />...
]]></description>
        <guid isPermaLink="true">http://rocktech.ycool.com/post.1663981.html</guid>
        <pubDate>Fri, 27 Apr 2007 05:04:47 GMT</pubDate>

      </item>
    </channel>
  </rss>
