2016-03-16 6 views
2

Я видел эту проблему несколько раз в других сообщениях, но еще не смог ее решить. Может быть, вы, ребята, можете пролить свет здесь.PeopleSoft Effective-Dated 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 на Scroll Level 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
  • прилагается скриншот моего Location CI.

enter image description here

+0

Каковы ключевые поля вашего 'location_tbl'? 'SETID',' LOCATION' и 'EFFDT'? Я предполагаю, что уже ваш вызов 'get' завершается с ошибкой, если вы попытаетесь обновить запись в таблице. Добавьте код Java, как вы называете интерфейс компонента. –

ответ

2

бы нужно увидеть код Java, чтобы быть уверенным, но вот одна возможность:

Если вы добавляете новый уровень от 0 до эффективного датированной записи, то он будет автоматически добавить «фиктивную» 1-го уровня эффективной устаревшую запись с текущей датой - точно так же, как в веб-интерфейсе. Если вы затем добавите еще одну запись уровня 1, у вас будет 2 строки в прокрутке, а только ссылка на вторую. Если вы затем установите поля во второй строке и попытаетесь сохранить их, вы можете получить точно такие ошибки (отсутствующие обязательные поля в строке 1), которые вы видите.

Другими словами, при добавлении нового уровня 0 следующее может потерпеть неудачу (извинения за псевдо-кода, но не имеют сконфигурированный Java/PS окр под рукой ...):

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... 

вы можете генерировать именно сообщение, которое вы видите здесь:

  • O pening КИ в CI тестером (работает в 2 яруса - инструменты 8.54 - не пробовал 3-х уровневая)
  • Создание нового SETID/МЕСТОПОЛОЖЕНИЕ
  • правой кнопкой мыши на LOCATION_TBL> InsertItem - индекс 1
  • Выберите второй ряд (LOCATION_TBL [2])
  • Установить описание
  • Сохранить CI

Вы получаете именно ваше сообщение - описание на LOCATION_TBL [1] является пустым.

+0

Действительно, после создания новой записи и выполнения обновления мне не хватало поля DESCR в строке «фиктивный». Кроме того, я не знал о дополнительных функциях CI Tester. Я использовал его только для выполнения основных операций, но я следил за вашими рекомендациями и воспроизводил то же сообщение об ошибке. Очень полезный совет. Этот вопрос помог мне лучше понять эффективные компоненты. – CountD

+1

или вы можете сделать это: & MyCI.GetDummyRows = False; – Jared

+1

@jared yep, интерфейс CI поддерживает этот флаг, и он должен достичь желаемого результата, но я обнаружил, что интерфейс psjoa слегка «шелушится», чтобы сказать лучшее. В общем, у меня был наибольший успех, когда я получил код интерфейса для дублирования именно того, что происходит, когда вы используете веб-интерфейс ui. Приветствия. – Barney

1

Используйте компонентный интерфейс тестер в App Designer. Вы должны войти в систему 3 уровня. Используя инструмент, вы можете имитировать то, что делает ваша программа, и потенциально получать отзывы от тестера.

+1

Обычно хороший совет, но не всегда 100% точный. Тестер CI не использует библиотеку psjoa, поэтому иногда ошибки, возникающие при использовании библиотеки psjoa, не отображаются при использовании CI-тестера. – Barney

+1

Как вы можете видеть в приведенном выше ответе, ответ OP был бы очевиден с помощью тестера CI – Jared

+1

В этом случае да (хотя похоже, что OP ранее не использовал функцию вставки тестера CI). Как я уже сказал, хороший совет. Тем не менее, у меня было много раз, когда компоненты работают через тестер CI, но не через psjoa. Кроме того, вы делаете так, чтобы удалить бит, требующий 3 уровня, поскольку это неверно. Приветствия. – Barney