sap 內存管理與數據共享方式

SAP內存管理

內存是程序之間為了傳遞數據而使用的共享存儲空間

SAP內存分類:1、SAP內存,2、ABAP內存

這兩種內存都是針對同一登錄用戶實現數據共享

SAP內存(SAP Memory)和ABAP內存(ABAP Memory),兩者都可用于編程中的數據傳遞,將數據通過ID進行綁定,之后在其他程序中通過ID獲取。

先引入三個概念,User Session、External Session 和 Internal Session。

當用戶登錄SAP就生成了User Session。

打開一個窗口界面,就產生了一個External Session,窗口關閉,則External Session釋放。

SAP NW 7.0之前的版本,一次最多打開6個窗口,也就是6個External Session。之后的版本最多打開16個窗口。

在一個窗口內,通過CALL TRANSACTION,SUBMIT等方式調用程序,則會自動打開Internal Session,此處會根據調用打開多個Internal Session。當窗口關閉時,則釋放該External Session下的所有Internal Session。

用戶退出登錄,則關閉所有External Session和Internal Session。

理解了這三個概念,ABAP內存是在Internal Session之間進行數據傳遞,而SAP內存是在External Session之間進行數據傳遞,當然也可以傳數據到Internal Session中。

通俗的講,ABAP內存是在同一個窗口內運行的程序之間,進行數據傳遞。而SAP內存,可以在多個窗口之間進行數據傳遞。

1、SAP內存
? ?

全局內存用戶終端會話內的所有外部會話都可以訪問,實現主會話之間的數據共享(主會話:即單開的SAP窗口,SAP最多支持同時打開6個主會話)

基本語句:SET PARAMETER / GET PARAMETER語句來共享內存,實現傳值。

(也可以在PARAMETERS 或 SELECT-OPTION變量中使用 MEMORY ID 來連接字段與參數)

SET PARAMETER ID 'MAT' FIELD p_matnr.?
?
GET PARAMETER ID 'MAT' FIELD p_matnr.

2、ABAP內存
? ? ? ?

內部會話之間的數據共享(內部會話:在主會話中進行程序調用時,即call function,還在當前窗口中調用產生的窗口,就叫內部會話)。只有在同一個窗口執行的程序才能共享內存

?基本語句:

?EXPORT obj1 … objn TO MEMORY ID key.

?IMPORT obj1 … objn FROM MEMORY ID key.

FREE MEMORY ID ''.

注意:在每個程序里使用的內存有ABAP內存和SAP內存

3.?標準SAP內存ID的應用

在SAP中,定義了很多SAP內存ID,存放在TPARA表中,通常也與數據元素綁定

如:公司代碼,MARA-MATNR物理編碼。VBAK-銷售訂單號,會計憑證號,憑證貨幣等等

如此,可以通過SAP拋內存的方式,為初始屏幕中的字段填值, 如手工憑證錄入的功能中:

作用就是通過內存傳值,自動賦值對應的屏幕等字段

如MM物料編碼的應用:

搭配AND SKIP FIRST SCREEN,就自動打開對應的物料視圖。類似平時在報表中常用的穿透。

對于SAP內存傳值的應用還很多。再比如,當批導上傳EXCEL時,為了能記錄上次導入的文件地址,避免重復選擇文件,通常在文件后邊加上MEMORY ID。此應用也是使用了SAP內存傳值

上傳文件地址

?如果此時用接內存的方式,運行程序就能得到批導程序上傳的文件路徑

當然此時運行其他批導程序,而且MEMORY ID相同,則其他程序也會自動帶出上一個批導程序的文件路徑

所以內存傳值也可以用在一些個性化細節的需求開發。

sap 四種數據共享方式

ABAP Memory/SAP Memory/Shared Buffer/Database

ABAP提供了IMPORT/EXPORT 和 SET/GET PARAMETER語句,可對用戶內存/服務器內存/數據庫進行存儲和訪問。
不過可能很多人對此還不是很了解,下面我們通過實例來測試它們的區別和聯系。

  1. ABAP Memory

  2. 用戶登陸后,最多一個系統可以開6個窗口,這在SAP中稱為External Mode。而同一個窗口中,運行某程序后,可以通過CALL TRANSACTION/SUBMIT或其他代碼跳轉到其他程序,這個稱為Internal Mode。Internal Mode的調用棧最多為9層。那么ABAP Memory,它是屬于Internal Mode間可以共享的數據,而External Mode間無法共享。

例子. 創建程序A,輸入:
DATA matnr TYPE matnr.
IMPORT matnr FROM MEMORY ID ‘YTEST_MATNR’.
WRITE matnr.

創建程序B,輸入:
DATA matnr TYPE matnr.
matnr = ‘000000000000001234’.
EXPORT matnr TO MEMORY ID ‘YTEST_MATNR’.
SUBMIT y_program_a. “調用程序A
直接運行B,發現程序A從ABAP Memory讀到了值并輸出到LIST.

說明:
(1)調試運行B到EXPORT語句后面,Goto-System Area-ABAP Memory,可以查看到名為YTEST_MATNR的一片內存。
(2)如果B和A運行在不同的窗口,則A將訪問不到數據;當用戶輸入/N退出當前程序時,內存值也將被清空。
(3)該語句適用于CALL TRANSACTION/SUBMIT過程中的數據共享,也常用于User Exit,類似于定義全局變量的效果。

  1. SAP Memory


  2. 上面說了External Mode,那么它們之間共享數據必須通過SET/GET PARAMETER語句,不再是EXPORT/IMPORT的模式。

例子. 創建程序A,輸入:
DATA matnr TYPE matnr.
GET PARAMETER ID ‘YTEST’ FIELD matnr.
WRITE matnr.

創建程序B,輸入:

DATA: matnr TYPE matnr.
matnr = ‘000000000000012345’.
SET PARAMETER ID ‘YTEST’ FIELD matnr.
在窗口1運行程序B并關閉后,在窗口2運行程序A,發現程序A仍然讀到了SAP Memory的值。

說明:
(1)調試時,可通過Goto-System Area-SAP Memory,查看到YTEST及其對應的值。
(2)SET/GET PARAMETER的值與本次登陸有關,當用戶注銷后才失效。在用戶登陸的時候,系統會根據每個用戶
User Profile-Own Data-Parameter下的設置,載入到SAP Memory。
(3)Data?Element中可以看到Further Characteristics下可定義PARAMETER ID,代表該字段作為屏幕元素時,可
讀取該PARAMETER ID作為默認值。比如VA03會自動顯示剛剛創建的訂單號。

  1. SHARED MEMORY/SHARED BUFFER


  2. 前面介紹的都是用戶內存,那么不同用戶間如何實現數據共享呢?可以用SHARED MEMORY或SHARED BUFFER,它們
    是服務器上的某片所有用戶共享的內存。關于SHARED MEMORY和SHARED BUFFER的區別,可以F1查看幫助。如果
    EXPORT SHARED BUFFER,則必須IMPORT SHARED BUFFER才能讀到,用IMPORT SHARED MEMORY是讀不到
    的。反過來也是。

例子. 創建程序A,輸入: DATA matnr TYPE matnr.
IMPORT matnr FROM SHARED?BUFFER?indx(aa) ID ‘YTEST_MATNR’.
WRITE matnr.

創建程序B,輸入:
DATA: matnr TYPE matnr.
matnr = ‘000000000000123456’.
EXPORT matnr TO SHARED BUFFER indx(aa) ID ‘YTEST_MATNR’.
先在用戶1的電腦上運行程序B,然后在用戶2的電腦上運行程序A,發現用戶2可以讀取到值。

說明:
(1)既然是服務器上的所有用戶共享空間,那么該值將保存到服務器關機重啟為止,除非用戶用DELETE語句清除它。
其實這個跟ENQUEUE/DEQUEUE有點相似之處。
(2)數據庫也可共享數據,不過服務器共享肯定速度快些,理論上適合網絡游戲,呵呵。
(3)INDX是系統中存在的符合特定格式要求的表。但這不代表該EXPORT/IMPORT語句將在表INDX中增加記錄,僅僅
代表服務器借用了INDX的結構來管理該片共享內存。

  1. DATABASE

  2. 上面說了SHARED BUFFER并不訪問數據庫,而要訪問數據庫就應該用DATABASE。

創建一個程序,錄入代碼:
DATA: matnr TYPE matnr.
matnr = ‘000000000000004321’.
EXPORT matnr TO DATABASE indx(aa) ID ‘YTEST_MATNR’.

執行程序,然后SE16查看表INDX,發現新增了一條RELID = AA, SRTFD = YTEST_MATNR的記錄。如果EXPORT
的數據量比較大,則新增的將是多條,這些條目的字段值SRTF2從0遞增。所以EXPORT DATABASE與普通數據庫操
作的不同之處是,它適合大數據量的操作,系統自動將其拆分成多條記錄并存儲到數據庫中,比如圖片或文檔。而用
IMPORT DATABASE的過程則相反,系統將把這些條相關記錄又自動組合起來成為一個整體。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/897827.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897827.shtml
英文地址,請注明出處:http://en.pswp.cn/news/897827.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據結構與算法(哈希表——兩個數組的交集)

原題 349. 兩個數組的交集 - 力扣(LeetCode) 給定兩個數組 nums1 和 nums2 ,返回 它們的 交集 。輸出結果中的每個元素一定是 唯一 的。我們可以 不考慮輸出結果的順序 。 示例 1: 輸入:nums1 [1,2,2,1], nums2 […

python筆記2

變量:含義 一個容器,計算機當中的存儲空間。 可以理解為一個用于標識或引用數據的名字或標簽。 作用: 可以通過定義一個變量來給需要使用多次的數據命名,就像一個標簽一樣。下次需要使用這個數據時,只需要通過這個變…

【Linux系統編程】信號

目錄 1、信號1.1、什么是信號1.2、進程對信號的處理1.3、信號的生命周期1.4、信號處理流程1.5、信號的發送 2、kill()、raise()函數 發送信號3、alarm函數 鬧鐘信號4、pause函數 掛起信號、暫停5、singal 函數 捕獲信號5.1、為什么返回值是上一次的處理方式5.2、練習 6、sigact…

實用小工具——快速獲取數據庫時間寫法

最近我遇到了一個比較棘手的問題:在工作中,各個項目所使用的數據庫類型各不相同。這導致我習慣性地使用Oracle的SQL語句進行編寫,但每次完成后都會遇到報錯,最終才意識到項目的數據庫并非Oracle。為了避免這種情況,我需…

數據類型及sizeof,進制轉換

其實數據類型可以講很多內容,這里看情況需要講多久吧。 本篇基本都是理論。 目錄 數據類型的分類 基本數據類型 構造數據類型 指針類型 空類型 計算數據類型或變量所占用的內存字節數 基本語法 進制轉換 二進制 二進制的概念 二進制與十進制的轉換 十六進…

pjsip dtmf發送和接收(pjsua)

DTMF(雙音多頻,Dual-Tone Multi-Frequency)是一種用于電話系統的信號技術,通過組合兩個不同頻率的音頻信號來表示數字和符號。以下是DTMF的主要使用背景和應用場景: 電話撥號 DTMF最常見的用途是電話撥號。當用戶按下電話鍵盤上的數字或符號時,電話會生成兩個特定頻率的音…

落雪音樂Pro 8.8.6 | 內置8條音源,無需手動導入,純凈無廣告

洛雪音樂Pro版內置多組穩定音源接口,省去手動導入的繁瑣操作,安裝即可暢聽海量音樂。延續原版無廣告的純凈體驗,支持歌單推薦與音源切換,滿足個性化聽歌需求。此版本僅支持在線播放,無法下載音樂,且與原版不…

mac安裝navicat及使用

0.刪除舊的 sudo rm -Rf /Applications/Navicat\ Premium.app sudo rm -Rf /private/var/db/BootCaches/CB6F12B3-2C14-461E-B5A7-A8621B7FF130/app.com.prect.NavicatPremium.playlist sudo rm -Rf ~/Library/Caches/com.apple.helpd/SDMHelpData/Other/English/HelpSDMIndexF…

【Unity】 HTFramework框架(六十二)Agent編輯器通用智能體(AI Agent)

更新日期:2025年3月14日。 Github源碼:[點我獲取源碼] Gitee源碼:[點我獲取源碼] 索引 編輯器通用智能體AIAgent類Friday(星期五)啟用智能體設置智能體類型開放智能體權限智能體交互資源優化批處理運行代碼聯網搜索休閑…

EverArt MCP 服務器安裝調試筆記 -cline

EverArt MCP 服務器安裝調試筆記 問題描述 用戶在使用 EverArt MCP 服務器時遇到報錯:“MCP error -1: Connection closed”。 調試過程 檢查配置文件 cline_mcp_settings.json: 確認 everart 服務器的配置信息,包括 command、args 和 env 是否正確。…

MFC中使用Create或CreateDialog創建對話框失敗,GetLastError錯誤碼為1813(找不到映像文件中指定的資源類型)

文章目錄 創建對話框失敗示例、原因分析及解決方案示例代碼錯誤原因解決方案 AFX_MANAGE_STATE(AfxGetStaticModuleState())作用一、功能1. 模塊狀態切換2. 自動狀態恢復 二、為什么要用該函數?三、必須使用該宏的典型場景1. MFC 擴展 DLL(Extension DLL…

php進程管理

php-fpm(fastcgi process manager)是PHP 的FastCGI管理器,管理PHP的FastCGI進程,提升PHP應用的性能和穩定性 php-fpm是一個高性能的php FastCGI管理器,提供了更好的php進程管理方式,可以有效的控制內存和進程,支持平滑…

《MySQL數據庫從零搭建到高效管理|表的增刪改查(基礎)》

目錄 引言: 一、表的操作 1.1 創建學生表 1.2 查看表結構 1.3 刪除表 1.4 修改表名 1.5 添加字段 1.6 修改字段 1.7 刪除字段 1.8 小結 二、CRUD 2.1 新增(Create)數據 2.2 查詢(Retrieve)數據 2.3 修改&…

建筑管理(2): 施工承包模式,工程監理,質量監督

文章目錄 一. 施工承包模式1. 施工總承包模式1.1 施工總承包的特點1.2 施工總承包模式中的承包方 2. 平行承包模式3. 聯合體與合作體承包模式 二. 工程監理1. 強制實行監理的工程范圍1.1 國家重點建設工程1.2 大中型公用事業工程(重點)1.3 成片開發建設的住宅小區工程1.4 必須實…

Spring Boot與Apache Ignite集成:構建高性能分布式緩存和計算平臺

1. 前言 1.1 什么是Apache Ignite Apache Ignite是一個高性能的分布式內存計算平臺,支持內存緩存、分布式計算、流處理和機器學習等功能。它提供了低延遲的數據訪問和強大的計算能力,適用于需要高性能和可擴展性的應用。 1.2 為什么選擇Apache Ignite 高性能:Ignite利用內…

REST 請求返回 Invalid Credentials

REST 請求返回 “Invalid Credentials”(無效憑據),通常表示身份驗證失敗。可能的原因和解決方案如下: 可能的原因 & 解決方案 用戶名或密碼錯誤 確保使用正確的用戶名和密碼。如果 API 需要 Base64 編碼的 Authorization 頭…

C++Primer學習(6.7 函數指針——難!)

6.7 函數指針 (這一章節比較難) 函數指針指向的是函數而非對象。和其他指針一樣,函數指針指向某種特定類型。函數的類型由它的返回類型和形參類型共同決定,與函數名無關。例如: //比較兩個 string 對象的長度 bool lengthCompare(const string &,co…

高級java每日一道面試題-2025年2月26日-框架篇[Mybatis篇]-Mybatis是如何將sql執行結果封裝為目標對象并返回的?都有哪些映射形式 ?

如果有遺漏,評論區告訴我進行補充 面試官: Mybatis是如何將sql執行結果封裝為目標對象并返回的?都有哪些映射形式 ? 我回答: 在Java高級面試中討論MyBatis如何將SQL執行結果封裝為目標對象并返回的過程時,我們可以從過程細節和映射形式兩個方面來綜合解答這個問…

react(一):特點-基本使用-JSX語法

初識React React是一個用于構建用戶界面的 JavaScript 庫,由 Facebook 開發和維護。 官網文檔:React 官方中文文檔 特點 1.聲明式編程 2.組件化開發 3.多平臺適配 開發依賴 開發React必須依賴三個庫: 1.react:包含react所必…

【Python+HTTP接口】POST請求不同請求頭構造

1、{‘Content-Type’: ‘application/json’} import requestsbody {"name1": "value1","name2": "value2"} requests.post(urlurl, databody)2、{“Content-Type”: “application/x-www-form-urlencoded; charsetUTF-8”} impor…