SIEBEL功能组件,eScript入门
文章目錄
- 前言
- 學習任務
- 一、MVG的配置與學習
- 1. 1:M的MVG配置,以統計訂單行數量功能為例
- 1. M:M的MVG配置
- 二、View Mode & Visibility配置
- 1. Personal安全性
- 2. Position安全性
- 三、EBC和VBC的創建
- 1. EBC的創建
- 2. VBC的創建
- 四、Import Object配置
- 五、eScript入門
- 提交訂單功能的實現
- 多選刪除按鈕的實現
- 撤銷按鈕的實現
- 同步按鈕的實現
- MVG添加按鈕的實現
- MVG刪除按鈕的實現
- 代碼實現計算字段
- 遇到問題及其解決方案
- 心得總結
前言
9.4~9.16學習情況總結
學習任務
- MVG的配置與學習
- View Mode和Visible的配置
- SQL基礎略看
- EBC和VBC的學習
- Import Object學習
- eScript入門、編碼訓練
一、MVG的配置與學習
個人理解MVG就是1:M或者M:M的關系模型,MVG的配置就將這種關系可視化、數據化。
1. 1:M的MVG配置,以統計訂單行數量功能為例
創建Link:Cascade Delete級聯刪除填寫Delete,避免出現垃圾數據,父子BC填寫對應字段即可
在父BC中創建MVL如下,DestinationBC選擇子BC名,Link選剛才的Link即可。
Auto Primary&Primary ID Field: 對于沒有Primary概念的子BC(即訂單行
中,沒有一個訂單行是主要的) , 我們把該屬性置為None, Primary ID
Field留空。
No Associate/Copy/Delete/Insert/Update: 配置訂單行BC是為了統計訂
單行的數據,而不能直接通過MVG對訂單行進行編輯,因此我們把這些勾全
勾上。
4. 創建一個Calculate字段:注意Type屬性更改(默認是Text屬性),使用Count函數對MVF進行統計,例子中有多少序列號就有多少MVF記錄數,統計記錄數就是統計訂單行數量。注意, Count函數的參數一定是一個MVL的名字。
1. M:M的MVG配置
創建中間表,新建兩個外鍵,分別指向父子BC
創建Link,與1:M區別較大,有中間表做級聯了,所以Source Field和Destination Field不填
重要屬性包括:
Inter Table:中間表。
Inter Parent Column: 中間表中父BC的表的外鍵。
Inter Child Column:中間表中子BC的表的外鍵。
Primary ID Field: 父BC中用于標識主要的字段。
Cascade Delete: 再次強調, 除非需求很特殊,否則M:M的Link一定要選
None!
Primary Id Field = Child Id:業務上區分主要非主要、提升系統性能。
創建MVF
創建MVG Applet
- 運行向導,BC字段填寫子BC
- Pick Applet類型。選擇Edit List模式,模板選擇Popup List Mvg
- 選擇需要的字段(MVF中創建的字段),其中SSA是主要字段,隱藏Field
- 調整布局
- 配置確定按鈕:
在Control下新建一條記錄,設置以下屬性:
Name: CloseApplet
Caption – String Reference: SBL_OK-1004224735-0D4
HTML Type: MiniButton
Method Invoke: CloseApplet
并拖拽至界面。 - 設置Applet屬性:為了讓MVG Applet能夠進行關聯數據和刪除關聯,以及更改Primary記錄等操作,保持No Insert\Delete\Update屬性為N,勾上No Merge屬性
- 新建BC FIeld ,將MVF的Column添加進去(此處是Name)
- 將FIeld添加Column至Applet,并選擇List Column中的MVG Applet屬性
-
復制MVG Applet,把No Delete\Insert\Update\Merge屬性勾上,把Type屬性改為Association List。
-
修改模板,Applet Web Template下,把Associate Applet的Web Template屬性改為 Popup List Assoc。
-
刪除SSA Primary Field和確定按鈕,Associate Applet上無Primary的概念,因此我們把該字段刪除。并把確定按鈕刪除。
-
在MVG Applet上配置Associate Applet
二、View Mode & Visibility配置
1. Personal安全性
2. Position安全性
Position安全性是應用最廣泛的一種安全性,因為它有兩個最重要的特性是
Person安全性所不具備的:
繼承性: 職位的數據可以被繼承,如果一個用戶離職或者換崗,那么新
頂替他的崗位用戶可以繼承該崗位下所有的歷史數據,實現人走崗留,
使業務數據獨立于人(用戶)而存在。
層級性: 上級職位可以通過配置實現對他所有下級職位的數據的訪問。
由于這兩個特性與大多實際業務非常吻合,因此Position安全性是一種使用
很廣泛,也很重要的安全性類型。
我們有標準的職位BC:Position,首先基于Position以及他的Table:S_PARTY,做一個訂單頭上關于職位的MVG
基于父表CX_ORDER_DWJ和子表S_PARTY建立中間表CX_POSITION_CON,創建外鍵字段
創建Link,填寫父子BC以及中間表(不必填Source和Destination Field)
將Position加進BO,添加Link關系
創建MVLink,Destination BC寫子BC
創建MVF,選擇自己需要的字段
創建或者直接使用MVG Applet
添加MVF到訂單頭Applet的Column,并綁定MVG Applet
在父BC中配置View Mode,選擇相應的MVLink
配置View的Visibility Applet Type屬性,分別設置成Sales Rep和Manager
配置View Web Template Items分別設置Applet Visibility Type為對應的屬性
在Screen中上掛上剛剛創建的View
創建職位:開發環境中,管理—組—職位
創建職責:開發環境中,管理—應用程序—職責
分配職責、職位:開發環境中,管理—用戶—員工
在管理—應用程序中注冊視圖,將Manager和Sales視圖分配給相應的經理賬號,Sales分配給相應的銷售人員賬號
用戶、職責、職位的關系如下:
View與職責的關系是在環境中手動配置關聯的,將下屬的View手動添加到父職位中
三、EBC和VBC的創建
EBC指的是通過sql視圖,來獲取單表或者多表數據的BC,不基于任何實體表,不能直接進行新建、刪除、修改操作。
1. EBC的創建
創建View,保存為.sql文件備用
CREATE VIEW detail AS SELECT d.product_id,d.product_price,d.order_deadline,h.order_type,h.order_comments,d.order_comment FROM CX_ORDER_DWJ h , CX_ORDER_ITEM d WHERE d.parent_order_id = h.row_id給View賦權
GRANT SELECT ON detail TO SSE_ROLE;
表里面需要有一個可以作為id的唯一列,將唯一列的system field mapping設置為Id,如下圖所示
新建BC,選擇剛才建的Table字段即可
至此BC已可以正常使用,配置相應的Applet,View,Screen,BO即可,可以作數據展示或者數據處理結果展示等。
2. VBC的創建
四、Import Object配置
Import Object的作用就是通過CSV文件導入記錄
把Import Object對象從Object Explorer中調出來,并創建一個Import Object
對象,BC填寫你需要導入的BC
在Import Field中選擇你可能需要導入的Field
創建導入源(建兩個只是為了測試,一般用一個就行)
定義導入源的Field,即需要導入的字段
定義Field對應的CSV文件的列名
制作導入文件, 本次是用的導出文件的格式作的導入文件
導入設置如下
五、eScript入門
提交訂單功能的實現
需求:新建完訂單后,我們實現一個提交按鈕。該按鈕只有在訂單狀態為“新建”時可點擊。
點擊新建按鈕后,判斷是否存在訂單行。如果沒有訂單行,那么報錯提示錄入訂單行。
如果驗證通過,則把訂單頭的狀態改為“已提交”,并且把所有訂單行的價格改為“999”。
在需要添加按鈕的Applet上添加UP字段如下,注意冒號與“SubmitOrder”間需要一個空格,“ SubmitOrder”應該與 Control 的 Method Invoked 屬性值對應。
注意: Value 的值控制按鈕可用條件,為真(TRUE) 時按鈕可用,為假時(FALSE)按鈕不可用。這里可以設置相應的條件來控制按鈕是否可用,例如這個 Applet 所在的 BC 有一個字段“Status”,是值列表字段,其中有一個值是“導入”,當將 Value 設
置成: [Status]=”導入” 表示在 Applet 上選中某一條記錄,當這條記錄的“Status”字段值不是“導入”時,按鈕將不
可用,當“Status”字段值是“導入”時,按鈕可用。
提示: 這里僅是方便說明問題,所以硬編碼寫了“導入”兩個漢字,實際應用中應當用 LookupValue 形式,如下:
[Status]=LookupValue(“STATUS_TYPE”,”import”)
NGC_ORDER_TYPE 表示這個靜態值列表的類型
Incomplete表示對應的獨立源代碼
添加Control,HTML Type與UP設置的值對應,然后把按鈕添加到Layout上
創建BS,External Use: Y(能被代碼或者工作流調用,一般建立的 BS 都應該勾上),
在Business Service Method下添加方法:SubmitOrder,Display Name: 提交訂單。
在SubmitOrder方法下添加輸入輸出參數:OrderId
選擇NGC Order Header Service,Edit Server Script,在function Service_PreInvokeMethod (MethodName, Inputs, Outputs)添加以下代碼:
BS里添加function:展開general,在declarations里添加以下代碼:
//提交訂單的邏輯//輸入參數:OrderId,需要提交的訂單的Idfunction SubmitOrder(Inputs, Outputs){try{//獲取訂單BO,BCvar boOrder = TheApplication().GetBusObject("HAND Order");var bcOrder = boOrder.GetBusComp("HAND Order");var bcItem = boOrder.GetBusComp("HAND Order Item");//獲取參數//GetProperty()是Property的一個最重要的方法之一,它的作用是獲取 Property Set里的某個鍵的值。我們這里是獲取輸入參數OrderId的值。var orderId = Inputs.GetProperty("OrderId");//根據輸入參數OrderId查詢出需要提交的訂單with (bcOrder){//從下面一句開始到ExecuteQuery,是最常用的腳本BC查詢操作步驟//激活字段,查詢前要激活所有你需要獲取或者設置值的字段ActivateField("Order Status");//設置安全性,結合安全性的知識理解。代碼中新開的BC實例一般用AllView安全性,確保能查到數據。但是界面上的實例不可更改安全性SetViewMode(AllView);//清空查詢條件ClearToQuery();//設置查詢條件,這里有兩種設置查詢條件的方法,SetSearchSpec和SetSearchExpr,我們建議使用SetSearchExpr,具體原因后續再分析//SetSearchSpec("Id", orderId);SetSearchExpr("[Id] = '" + orderId + "'");//執行查詢ExecuteQuery(ForwardOnly);//查詢完成后,通過FirstRecord定位到查詢結果的第一條記錄,如果查詢不到任何記錄,則FirstRecord方法會返回falseif (!FirstRecord())throw "找不到訂單Id " + orderId + " !";}//查詢訂單下的訂單行with (bcItem){ActivateField("Item Status");//這里可以不需要對訂單行設置頭Id的查詢條件,因為在獲取BC時,訂單行被BO里的Link限制為訂單頭的子,該條件會自動附加ClearToQuery();ExecuteQuery(ForwardOnly);var bLineFound = FirstRecord();//驗證如果不存在至少一條訂單行,報錯if (!bLineFound)throw "請先錄入訂單行再提交!";//以下是最典型的通過while循環查詢出的記錄做操作的例子//循環所有訂單行,更新訂單行狀態為待發運var TO_BE_SHIPPED =TheApplication().InvokeMethod("LookupValue","HAND_ORD_ITEM_STATUS", "To Be Shipped");while (bLineFound){//SetFieldVaue是設置BC Field的值的方法SetFieldValue("Item Status", TO_BE_SHIPPED);//WriteRecord是保存記錄的方法WriteRecord();//NextRecord是把記錄定位到查詢結果的下一條記錄,如果已經是最后一條(即不存在下一條),返回false,跳出while循環bLineFound = NextRecord();}}//更新為訂單行后,更新訂單頭狀態with (bcOrder){var PENDING =TheApplication().InvokeMethod("LookupValue", "HAND_ORD_STATUS", "Pending");SetFieldValue("Order Status", PENDING);WriteRecord();}}catch(e){//捕獲異常,報錯throw e;}finally{//釋放對象變量bcItem = null;bcOrder = null;boOrder = null;}}多選刪除按鈕的實現
在訂單行的刪除按鈕上新增多選刪除特性,在不改變按鈕原有功能和外觀的情況下,可以實現一次刪除所有選中的記錄。
實現過程以及代碼略。
撤銷按鈕的實現
實現在訂單頭界面一鍵刪除所有訂單行,并且修改訂單狀態為未提交。
實現過程以及代碼略。
同步按鈕的實現
同步訂單頭的產品名稱和Id到對應訂單行,產品種類是PIcklist字段,自動為所有訂單行Pick訂單頭的產品。
實現過程以及代碼略。
MVG添加按鈕的實現
實現MVG字段的添加,以及設置主鍵的功能。
實現過程以及代碼略。
MVG刪除按鈕的實現
實現MVG字段刪除關系的功能。
實現過程以及代碼略。
代碼實現計算字段
用BC Field的Calculate字段調用BS方法,實現不用配置UP也能實現計算的功能,既節約了性能成本又可以實現代碼復用。
遇到問題及其解決方案
VIew 與Applet做關聯,然后編輯布局,將添加的Applet拖進去
數據庫sql語句報錯
創建中間表時,默認字段會帶空格,無法使用,需要修改。
檢查Table是否正確check in和apply到服務器,修改前check out,修改后apply。
導入數據時顯示文件無法使用或格式不匹配,無法找到與siebel的字段映射
檢查Import Field字段和Applet上顯示的字段是否一致
先導出,使用導出的文件格式填寫數據再導入
VBC無法正常顯示
注意自定義字段不要與系統字段重名
Import Object無法正常導入
文件格式問題,可以導出之后清空數據添加自己的數據
字段命名問題,字段一般要和BC上顯示的名稱一致,便于映射
eScript無法正常執行
檢查使用的字段是否激活
檢查屬性名稱是否對應
動態PickList只讀,能看不能選
檢查字段對應問題,一般要用唯一字段ID
MVG按鈕代碼無法設置PRIMARY KEY
View Mode安全性問題,取消安全性設置即可
MVG按鈕代碼,新建記錄可以指定PRIMARY KEY,原有記錄的PRIMARY KEY無法被修改
級聯刪除的bug問題,實體字段沒有被刪除以及覆蓋,獲取管理員權限,手動設置字段為空。
BC Script 無限循環
BC的代碼不能寫this,否則會造成死循環
可以這樣寫:
return (CancelOperation);要寫在標準方法里,否則自己的方法還會被覆蓋。
一般是由于程序走不到斷點處,檢查判斷邏輯和流程。
系統bug,解決辦法是關閉瀏覽器,關閉所有編程窗口重新編譯,然后重新打斷點
- 開發環境選擇 管理-業務服務(B) ——模擬器
- 服務名稱選擇自己的BS名,再選擇要測試的方法
- 輸入參數要與**Inputs.GetProperty(“OrderId”);**內容一致,點擊物業名稱進行配置
- 點擊運行即可測試
心得總結
DEBUG是開發過程中至關重要的一步,但是TOOLS的編碼和DEBUG工具并不算好用,所以在學習過程中浪費了一些時間。不過好在有經驗之后,大體上也能定位到問題在哪里,所以總體體驗下來,SIEBEL開發是需要一定經驗積累的。一是比較小眾,網上資料和帖子比較少,很難上網找到解決方案;二是開發工具需要一個熟悉的過程,對于它的特性以及BUG等都需要摸索一下。
多做,多做,多做。做過的東西當時是會了,但是過一段時間非常容易遺忘,特別是SIEBEL配置,過程細節比較多,不同功能配置都各不相同,漏了一個環節就直接跑不起來,報錯信息也非常不好定位問題所在。所以還是要多實戰多做幾遍,也能發現一些細節問題,記錄也是必要的,遺忘可以快速撿起來。
剛學eScript的時候,遇到什么問題都想看看有沒有對應的API能用,就去查開發手冊,結果未必能找到對應的API。后來發現通過配置就很簡單能夠實現這個功能。有時候目光不能太局限,SIEBEL是一個界面化的二次開發平臺,要結合它的優點去做開發,配置和代碼,哪個方便穩定性能好,就用哪個。我們的最終目的是實現功能,不管是通過什么方法。
總結
以上是生活随笔為你收集整理的SIEBEL功能组件,eScript入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java application作用_1
- 下一篇: ftm国际化解决方案