2016-03-16 40 views
2

我在其他帖子中多次看到此問題,但尚未能夠解決它。也許你們可以在這裏談一談。PeopleSoft有效日期CI:指定鍵沒有行(Java)

我試圖使用Java對象適配器庫(psjoa.jar)組件接口的「位置」執行更新,但試圖挽救一個,當我堅持了以下錯誤記錄:

"No rows exist for the specified keys. {LOCATION} (91,50), Failed to execute PSBusComp request , The highlighted field is required. You must enter a value for it before proceeding.{LOCATION.LOCATION_TBL(1).DESCR} (15,54), Error saving Component Interface. {LOCATION} (91,37), Failed to execute PSBusComp request" 

如果記錄存在,則不會出現錯誤,但位置未更新。我能夠通過網絡/在線應用程序創建和更新位置,但無法從CI執行同樣的操作。

很可能,這是由表的生效日期行爲引起的。應用程序設計者表明,位置組件具有LOCATION_TBL表中滾動級別0和Scroll 1級下面是我傳遞的參數「的InvokeMethod(SNAME,參數)」 psjoa.jar的操作:

// level 0 
SETID: "SHARE", 
LOCATION :"T00001", 

// level 1 
LOCATION_TBL: {  
    SETID: "SHARE", 
    LOCATION :"T00001", 
    DESCR: "My Test", 
    DESCR_AC: "TEST", 
    EFFDT: |2016-03-16|, 
    EFF_STATUS: "A" 
} 

例如,我已經在幾個地方看過有效日期的組件可能需要使用PeopleCode和/或SQL的自定義實現。

我想知道:

  1. 我是不是錯調用CI操作,傳遞錯誤的參數, 不按預期的渦管結構?如果是這樣,那該怎麼辦?
  2. 是否必須使用 PeopleCode自定義更新/插入操作?
  3. (1)和(2)?

附加信息:

  • PeopleTools的8.53.02
  • PeopleSoft的HRMS 9.20.000
  • 附件是我的位置CI的屏幕截圖。

enter image description here

+0

你的'location_tbl'的關鍵字段是什麼? 'SETID','LOCATION'和'EFFDT'?我想,如果你嘗試更新表項,你的'get'調用就會失敗。請添加如何調用組件接口的java代碼。 –

回答

2

需要看到你的Java代碼可以肯定的,但這裏有一個可能性:

如果添加了一個新的水平0到有效日期的記錄,然後它會自動添加一個「虛擬」的水平1日起生效日期的記錄與當前日期 - 完全一樣,它在Web用戶界面上。如果你再添加另一個1級記錄,那麼你將在滾動中有2行,但只有第二行的引用。如果您隨後在第二行設置了字段並嘗試保存它,那麼您可能會得到正確的錯誤(缺少第1行中的必填字段)。

換句話說,添加一個新的電平0時,以下可能會失敗(道歉僞代碼,但沒有一個被配置的Java/PS ENV手...):

ci.create()   // create new L0 record - also adds L1 record 
l0 = ci.getRow(0) // get the L0 record 
l1 = l0.addRow() // add new L1 record - you now have 2 - l1 points to row 2 
l1.EFFDT = ...  // this sets fields on row 2 
l1.EFF_STATUS = ... 
l1.DESCR = 
ci.save()   // missing values on row 1 cause errors 

而更可能對成功的做法是

ci.create()   // create new L0 record - also adds L1 record 
l0 = ci.getRow(0) // get the Lo record 
l1 = l0.getRow(0) // don't add a new row - just get the dummy one 
l1.EFFDT = ...  // set the fields on row 1 
l1.EFF_STATUS = ... 
l1.DESCR = 
ci.save()   // cross your fingers... 

您可以生成正是你被這裏看到的消息:

  • Ø pening的CI在CI測試儀(工作在2層 - 工具8.54 - 沒試過3層)
  • 創建一個新的SETID /位置
  • 上LOCATION_TBL右鍵單擊> InsertItem - 指數1
  • 選擇第二行(LOCATION_TBL [2])
  • 設置描述
  • 保存CI

你得到完全相同的信息 - 上LOCATION_TBL說明。[1]爲空白。

+0

事實上,創建新記錄並執行更新後,我錯過了「虛擬」行中的DESCR字段。另外,我並不知道CI測試儀的其他功能。我只用它來執行基本操作,但我遵循了您的指導方針並重現了相同的錯誤消息。非常有用的建議。這個問題幫助我更好地瞭解有效期的組件。 – CountD

+1

或者你可以這樣做:&MyCI.GetDummyRows = False; – Jared

+1

@jared yep,CI接口支持該標誌,並且它應該實現期望的結果,但是我發現psjoa接口略微「片狀」以表示最好。一般來說,當我使用界面代碼來複制使用web ui時發生的情況時,我獲得了最大的成功。乾杯。 – Barney

1

使用組件接口測試儀在應用設計。您必須登錄3層。使用該工具,您可以模擬您的程序正在執行的操作,並可能從測試儀獲得反饋。

+1

一般很好的建議,但並不總是100%準確。 CI測試人員不使用psjoa庫,因此使用CI測試人員時,有時會出現使用psjoa庫時出現的錯誤。 – Barney

+1

正如你在上面的答案中看到的那樣,通過使用CI測試器,OP的答案將是顯而易見的 – Jared

+1

在這種情況下,是的(雖然看起來像OP之前沒有使用CI測試器的插入功能)。就像我說的那樣,_一般很好的建議。然而,當組件通過CI測試儀工作時,我已經有很多次,但是沒有通過psjoa。另外,你喜歡刪除關於需要3層的位,因爲這是不正確的。乾杯。 – Barney